Browse Source

Update version code and name in build.gradle.kts to 17 and 2.6.1, and add new dependencies for core:local and core:location modules. Enhance ProGuard rules across multiple modules to ensure proper class retention and prevent warnings during builds.

Carles Sentis 4 days ago
parent
commit
e7da11a5b3

+ 4 - 2
app/build.gradle.kts

@@ -16,8 +16,8 @@ android {
         applicationId = "com.arklan.weather"
         minSdk = ConfigData.minSdk
         targetSdk = ConfigData.targetSdk
-        versionCode = 16
-        versionName = "2.6"
+        versionCode = 17
+        versionName = "2.6.1"
         setProperty("archivesBaseName", "weekly-weather-v$versionName.$versionCode")
 
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
@@ -71,6 +71,8 @@ dependencies {
     implementation(project(mapOf("path" to ":feature:weather")))
     implementation(project(mapOf("path" to ":feature:maps")))
     implementation(project(mapOf("path" to ":core:umami")))
+    implementation(project(mapOf("path" to ":core:local")))
+    implementation(project(mapOf("path" to ":core:location")))
 
     implementation(libs.androidx.core.ktx)
     implementation(libs.androidx.lifecycle.runtime.ktx)

+ 62 - 1
app/proguard-rules.pro

@@ -18,4 +18,65 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Missing classes rules
+-keep class com.codeskraps.core.local.data.repository.** { *; }
+-keep class com.codeskraps.core.local.di.** { *; }
+-keep class com.codeskraps.core.local.domain.repository.** { *; }
+-keep class com.codeskraps.core.location.di.** { *; }
+-keep class com.codeskraps.core.location.domain.** { *; }
+-keep class com.codeskraps.feature.common.di.** { *; }
+-keep class com.codeskraps.feature.common.dispatcher.** { *; }
+-keep class com.codeskraps.feature.common.mvi.** { *; }
+-keep class com.codeskraps.feature.common.navigation.** { *; }
+-keep class com.codeskraps.feature.geocoding.** { *; }
+-keep class com.codeskraps.feature.weather.** { *; }
+-keep class com.codeskraps.maps.** { *; }
+-keep class com.codeskraps.umami.** { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory
+
+# Additionally, adding specific rules from the missing_rules.txt
+-dontwarn com.codeskraps.core.local.data.repository.LocalGeocodingRepositoryImpl
+-dontwarn com.codeskraps.core.local.data.repository.LocalResourceRepositoryImpl
+-dontwarn com.codeskraps.core.local.di.LocalModule_ProvidesGeocodingDBFactory
+-dontwarn com.codeskraps.core.local.domain.repository.LocalGeocodingRepository
+-dontwarn com.codeskraps.core.local.domain.repository.LocalResourceRepository
+-dontwarn com.codeskraps.core.location.di.CoreLocationModule_ProvidesLocationTrackerFactory
+-dontwarn com.codeskraps.core.location.domain.LocationTracker
+-dontwarn com.codeskraps.feature.common.di.FeatureModule_ProvidesDispatcherProviderFactory
+-dontwarn com.codeskraps.feature.common.di.FeatureModule_ProvidesResourcesFactory
+-dontwarn com.codeskraps.feature.common.dispatcher.DispatcherProvider
+-dontwarn com.codeskraps.feature.common.mvi.StateReducerFlow
+-dontwarn com.codeskraps.feature.common.navigation.Screen$Geocoding
+-dontwarn com.codeskraps.feature.common.navigation.Screen$Map
+-dontwarn com.codeskraps.feature.common.navigation.Screen$Weather
+-dontwarn com.codeskraps.feature.geocoding.data.remote.GeocodingApi
+-dontwarn com.codeskraps.feature.geocoding.data.repository.GeocodingRepositoryImpl
+-dontwarn com.codeskraps.feature.geocoding.di.FeatureModule_ProvidesGeocodingApiFactory
+-dontwarn com.codeskraps.feature.geocoding.presentation.GeocodingViewModel
+-dontwarn com.codeskraps.feature.geocoding.presentation.GeocodingViewModel_HiltModules$KeyModule
+-dontwarn com.codeskraps.feature.geocoding.presentation.components.GeocodingScreenKt
+-dontwarn com.codeskraps.feature.geocoding.presentation.mvi.GeoEvent
+-dontwarn com.codeskraps.feature.geocoding.presentation.mvi.GeoState
+-dontwarn com.codeskraps.feature.geocoding.repository.GeocodingRepository
+-dontwarn com.codeskraps.feature.weather.data.remote.WeatherApi
+-dontwarn com.codeskraps.feature.weather.data.repository.WeatherRepositoryImpl
+-dontwarn com.codeskraps.feature.weather.di.FeatureModule_ProvidesWeatherApiFactory
+-dontwarn com.codeskraps.feature.weather.domain.repository.WeatherRepository
+-dontwarn com.codeskraps.feature.weather.presentation.WeatherViewModel
+-dontwarn com.codeskraps.feature.weather.presentation.WeatherViewModel_HiltModules$KeyModule
+-dontwarn com.codeskraps.feature.weather.presentation.components.WeatherScreenKt
+-dontwarn com.codeskraps.feature.weather.presentation.mvi.WeatherEvent
+-dontwarn com.codeskraps.feature.weather.presentation.mvi.WeatherState
+-dontwarn com.codeskraps.maps.presentation.MapViewModel
+-dontwarn com.codeskraps.maps.presentation.MapViewModel_HiltModules$KeyModule
+-dontwarn com.codeskraps.maps.presentation.components.MapScreenKt
+-dontwarn com.codeskraps.maps.presentation.mvi.MapEvent
+-dontwarn com.codeskraps.maps.presentation.mvi.MapState
+-dontwarn com.codeskraps.umami.di.CoreUmamiModule_ProvidesAnalyticsRepositoryFactory
+-dontwarn com.codeskraps.umami.di.CoreUmamiModule_ProvidesDeviceIdRepositoryFactory
+-dontwarn com.codeskraps.umami.domain.AnalyticsRepository
+-dontwarn com.codeskraps.umami.domain.DeviceIdRepository

+ 16 - 0
core/local/consumer-rules.pro

@@ -0,0 +1,16 @@
+# Keep all local domain models and repositories when consumed by other modules
+-keep class com.codeskraps.core.local.data.repository.** { *; }
+-keep class com.codeskraps.core.local.di.** { *; }
+-keep class com.codeskraps.core.local.domain.model.** { *; }
+-keep class com.codeskraps.core.local.domain.repository.** { *; }
+
+# Keep specifically problematic classes
+-keep class com.codeskraps.core.local.data.repository.LocalGeocodingRepositoryImpl { *; }
+-keep class com.codeskraps.core.local.data.repository.LocalResourceRepositoryImpl { *; }
+-keep class com.codeskraps.core.local.di.LocalModule_ProvidesGeocodingDBFactory { *; }
+-keep class com.codeskraps.core.local.domain.model.GeoLocation { *; }
+-keep class com.codeskraps.core.local.domain.repository.LocalGeocodingRepository { *; }
+-keep class com.codeskraps.core.local.domain.repository.LocalResourceRepository { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 18 - 1
core/local/proguard-rules.pro

@@ -18,4 +18,21 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Keep all local domain models and repositories
+-keep class com.codeskraps.core.local.data.repository.** { *; }
+-keep class com.codeskraps.core.local.di.** { *; }
+-keep class com.codeskraps.core.local.domain.model.** { *; }
+-keep class com.codeskraps.core.local.domain.repository.** { *; }
+
+# Keep specifically problematic classes
+-keep class com.codeskraps.core.local.data.repository.LocalGeocodingRepositoryImpl { *; }
+-keep class com.codeskraps.core.local.data.repository.LocalResourceRepositoryImpl { *; }
+-keep class com.codeskraps.core.local.di.LocalModule_ProvidesGeocodingDBFactory { *; }
+-keep class com.codeskraps.core.local.domain.model.GeoLocation { *; }
+-keep class com.codeskraps.core.local.domain.repository.LocalGeocodingRepository { *; }
+-keep class com.codeskraps.core.local.domain.repository.LocalResourceRepository { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 5 - 2
core/local/src/main/java/com/codeskraps/core/local/di/LocalRepositoryModule.kt

@@ -7,18 +7,21 @@ import com.codeskraps.core.local.domain.repository.LocalResourceRepository
 import dagger.Binds
 import dagger.Module
 import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
 
 @Module
-@InstallIn(ViewModelComponent::class)
+@InstallIn(SingletonComponent::class)
 abstract class LocalRepositoryModule {
 
     @Binds
+    @Singleton
     abstract fun bindsGeocodingRepository(
         localGeocodingRepositoryImpl: LocalGeocodingRepositoryImpl
     ): LocalGeocodingRepository
 
     @Binds
+    @Singleton
     abstract fun bindsLocalResourceRepository(
         localResourceRepositoryImpl: LocalResourceRepositoryImpl
     ): LocalResourceRepository

+ 11 - 0
core/location/consumer-rules.pro

@@ -0,0 +1,11 @@
+# Keep all location module classes when consumed by other modules
+-keep class com.codeskraps.core.location.** { *; }
+-keep class com.codeskraps.core.location.di.** { *; }
+-keep class com.codeskraps.core.location.domain.** { *; }
+
+# Keep specifically problematic classes
+-keep class com.codeskraps.core.location.di.CoreLocationModule_ProvidesLocationTrackerFactory { *; }
+-keep class com.codeskraps.core.location.domain.LocationTracker { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 13 - 1
core/location/proguard-rules.pro

@@ -18,4 +18,16 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Keep all location module classes
+-keep class com.codeskraps.core.location.** { *; }
+-keep class com.codeskraps.core.location.di.** { *; }
+-keep class com.codeskraps.core.location.domain.** { *; }
+
+# Keep specifically problematic classes
+-keep class com.codeskraps.core.location.di.CoreLocationModule_ProvidesLocationTrackerFactory { *; }
+-keep class com.codeskraps.core.location.domain.LocationTracker { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 13 - 0
core/umami/consumer-rules.pro

@@ -0,0 +1,13 @@
+# Keep all umami module classes when consumed by other modules
+-keep class com.codeskraps.umami.** { *; }
+-keep class com.codeskraps.umami.di.** { *; }
+-keep class com.codeskraps.umami.domain.** { *; }
+
+# Keep specifically problematic classes
+-keep class com.codeskraps.umami.di.CoreUmamiModule_ProvidesAnalyticsRepositoryFactory { *; }
+-keep class com.codeskraps.umami.di.CoreUmamiModule_ProvidesDeviceIdRepositoryFactory { *; }
+-keep class com.codeskraps.umami.domain.AnalyticsRepository { *; }
+-keep class com.codeskraps.umami.domain.DeviceIdRepository { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 15 - 1
core/umami/proguard-rules.pro

@@ -18,4 +18,18 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Keep all umami module classes
+-keep class com.codeskraps.umami.** { *; }
+-keep class com.codeskraps.umami.di.** { *; }
+-keep class com.codeskraps.umami.domain.** { *; }
+
+# Keep specifically problematic classes
+-keep class com.codeskraps.umami.di.CoreUmamiModule_ProvidesAnalyticsRepositoryFactory { *; }
+-keep class com.codeskraps.umami.di.CoreUmamiModule_ProvidesDeviceIdRepositoryFactory { *; }
+-keep class com.codeskraps.umami.domain.AnalyticsRepository { *; }
+-keep class com.codeskraps.umami.domain.DeviceIdRepository { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 18 - 0
feature/common/consumer-rules.pro

@@ -0,0 +1,18 @@
+# Keep all common module classes when consumed by other modules
+-keep class com.codeskraps.feature.common.** { *; }
+-keep class com.codeskraps.feature.common.di.** { *; }
+-keep class com.codeskraps.feature.common.dispatcher.** { *; }
+-keep class com.codeskraps.feature.common.mvi.** { *; }
+-keep class com.codeskraps.feature.common.navigation.** { *; }
+
+# Keep specifically the problematic classes
+-keep class com.codeskraps.feature.common.di.FeatureModule_ProvidesDispatcherProviderFactory { *; }
+-keep class com.codeskraps.feature.common.di.FeatureModule_ProvidesResourcesFactory { *; }
+-keep class com.codeskraps.feature.common.dispatcher.DispatcherProvider { *; }
+-keep class com.codeskraps.feature.common.mvi.StateReducerFlow { *; }
+-keep class com.codeskraps.feature.common.navigation.Screen$Geocoding { *; }
+-keep class com.codeskraps.feature.common.navigation.Screen$Map { *; }
+-keep class com.codeskraps.feature.common.navigation.Screen$Weather { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 20 - 1
feature/common/proguard-rules.pro

@@ -18,4 +18,23 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Keep all common module classes
+-keep class com.codeskraps.feature.common.** { *; }
+-keep class com.codeskraps.feature.common.di.** { *; }
+-keep class com.codeskraps.feature.common.dispatcher.** { *; }
+-keep class com.codeskraps.feature.common.mvi.** { *; }
+-keep class com.codeskraps.feature.common.navigation.** { *; }
+
+# Keep specifically the problematic classes
+-keep class com.codeskraps.feature.common.di.FeatureModule_ProvidesDispatcherProviderFactory { *; }
+-keep class com.codeskraps.feature.common.di.FeatureModule_ProvidesResourcesFactory { *; }
+-keep class com.codeskraps.feature.common.dispatcher.DispatcherProvider { *; }
+-keep class com.codeskraps.feature.common.mvi.StateReducerFlow { *; }
+-keep class com.codeskraps.feature.common.navigation.Screen$Geocoding { *; }
+-keep class com.codeskraps.feature.common.navigation.Screen$Map { *; }
+-keep class com.codeskraps.feature.common.navigation.Screen$Weather { *; }
+
+# Java language APIs
+-dontwarn java.lang.invoke.StringConcatFactory

+ 4 - 1
feature/geocoding/proguard-rules.pro

@@ -18,4 +18,7 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Added to fix R8 warning for missing StringConcatFactory
+-dontwarn java.lang.invoke.StringConcatFactory

+ 4 - 2
feature/geocoding/src/main/java/com/codeskraps/feature/geocoding/di/FeatureModule.kt

@@ -5,16 +5,18 @@ import com.squareup.moshi.Moshi
 import dagger.Module
 import dagger.Provides
 import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
+import dagger.hilt.components.SingletonComponent
 import retrofit2.Retrofit
 import retrofit2.converter.moshi.MoshiConverterFactory
 import retrofit2.create
+import javax.inject.Singleton
 
 @Module
-@InstallIn(ViewModelComponent::class)
+@InstallIn(SingletonComponent::class)
 object FeatureModule {
 
     @Provides
+    @Singleton
     fun providesGeocodingApi(): GeocodingApi {
         val moshi = Moshi.Builder()
             .build()

+ 4 - 2
feature/geocoding/src/main/java/com/codeskraps/feature/geocoding/di/RepositoryModule.kt

@@ -5,13 +5,15 @@ import com.codeskraps.feature.geocoding.repository.GeocodingRepository
 import dagger.Binds
 import dagger.Module
 import dagger.hilt.InstallIn
-import dagger.hilt.android.components.ViewModelComponent
+import dagger.hilt.components.SingletonComponent
+import javax.inject.Singleton
 
 @Module
-@InstallIn(ViewModelComponent::class)
+@InstallIn(SingletonComponent::class)
 abstract class RepositoryModule {
 
     @Binds
+    @Singleton
     abstract fun bindsGeocodingRepository(
         geocodingRepositoryImpl: GeocodingRepositoryImpl
     ): GeocodingRepository

+ 26 - 0
feature/maps/consumer-rules.pro

@@ -0,0 +1,26 @@
+# Keep all maps related classes when consumed by other modules
+-keep class com.codeskraps.maps.** { *; }
+-keep class com.codeskraps.maps.presentation.** { *; }
+-keep class com.codeskraps.maps.presentation.components.** { *; }
+-keep class com.codeskraps.maps.presentation.mvi.** { *; }
+
+# Keep specifically the problematic classes
+-keep class com.codeskraps.maps.presentation.MapViewModel { *; }
+-keep class com.codeskraps.maps.presentation.MapViewModel_HiltModules$KeyModule { *; }
+-keep class com.codeskraps.maps.presentation.components.MapScreenKt { *; }
+-keep class com.codeskraps.maps.presentation.mvi.MapEvent { *; }
+-keep class com.codeskraps.maps.presentation.mvi.MapState { *; }
+
+# Keep dependencies
+-keep class com.codeskraps.core.local.domain.model.** { *; }
+-keep class com.codeskraps.core.local.domain.repository.** { *; }
+-keep class com.codeskraps.core.location.domain.** { *; }
+-keep class com.codeskraps.umami.domain.** { *; }
+
+# Dontwarn rules
+-dontwarn com.codeskraps.core.local.domain.model.GeoLocation
+-dontwarn com.codeskraps.core.local.domain.repository.LocalGeocodingRepository
+-dontwarn com.codeskraps.core.local.domain.repository.LocalResourceRepository
+-dontwarn com.codeskraps.core.location.domain.LocationTracker
+-dontwarn com.codeskraps.umami.domain.AnalyticsRepository
+-dontwarn java.lang.invoke.StringConcatFactory

+ 28 - 1
feature/maps/proguard-rules.pro

@@ -18,4 +18,31 @@
 
 # If you keep the line number information, uncomment this to
 # hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile
+
+# Keep all maps related classes
+-keep class com.codeskraps.maps.** { *; }
+-keep class com.codeskraps.maps.presentation.** { *; }
+-keep class com.codeskraps.maps.presentation.components.** { *; }
+-keep class com.codeskraps.maps.presentation.mvi.** { *; }
+
+# Keep specifically the problematic classes
+-keep class com.codeskraps.maps.presentation.MapViewModel { *; }
+-keep class com.codeskraps.maps.presentation.MapViewModel_HiltModules$KeyModule { *; }
+-keep class com.codeskraps.maps.presentation.components.MapScreenKt { *; }
+-keep class com.codeskraps.maps.presentation.mvi.MapEvent { *; }
+-keep class com.codeskraps.maps.presentation.mvi.MapState { *; }
+
+# Keep dependencies
+-keep class com.codeskraps.core.local.domain.model.** { *; }
+-keep class com.codeskraps.core.local.domain.repository.** { *; }
+-keep class com.codeskraps.core.location.domain.** { *; }
+-keep class com.codeskraps.umami.domain.** { *; }
+
+# Dontwarn rules
+-dontwarn com.codeskraps.core.local.domain.model.GeoLocation
+-dontwarn com.codeskraps.core.local.domain.repository.LocalGeocodingRepository
+-dontwarn com.codeskraps.core.local.domain.repository.LocalResourceRepository
+-dontwarn com.codeskraps.core.location.domain.LocationTracker
+-dontwarn com.codeskraps.umami.domain.AnalyticsRepository
+-dontwarn java.lang.invoke.StringConcatFactory