From 1d7f3fd15483e2f105ed1a15c82abc846e8fb9f0 Mon Sep 17 00:00:00 2001 From: ARIYAMA Keiji Date: Mon, 6 Nov 2023 21:11:38 +0900 Subject: [PATCH 1/4] Update targetSdkVersion Fix the issue IllegalException occurred when PermissionRequiredDialog.show() --- .gitignore | 2 + .idea/compiler.xml | 2 +- .idea/deploymentTargetDropDown.xml | 10 ++ .idea/gradle.xml | 6 +- .idea/kotlinc.xml | 6 + .idea/migrations.xml | 10 ++ .idea/misc.xml | 3 +- app/build.gradle.kts | 107 ++++++++++++------ app/src/main/AndroidManifest.xml | 5 +- .../c_lis/ccl/morelocale/entity/LocaleItem.kt | 4 +- .../service/RestoreLocaleService.kt | 16 ++- .../ui/locale_edit/EditLocaleFragment.kt | 2 +- .../ui/locale_list/LocaleListFragment.kt | 18 +-- {lib => app}/src/main/res/values/iso_3166.xml | 0 {lib => app}/src/main/res/values/iso_639.xml | 0 build.gradle.kts | 23 ++-- gradle.properties | 6 +- gradle/wrapper/gradle-wrapper.properties | 6 +- lib/build.gradle.kts | 18 ++- lib/src/main/AndroidManifest.xml | 3 +- settings.gradle.kts | 7 ++ 21 files changed, 171 insertions(+), 83 deletions(-) mode change 100755 => 100644 .idea/compiler.xml create mode 100644 .idea/deploymentTargetDropDown.xml mode change 100755 => 100644 .idea/gradle.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/migrations.xml mode change 100755 => 100644 .idea/misc.xml rename {lib => app}/src/main/res/values/iso_3166.xml (100%) rename {lib => app}/src/main/res/values/iso_639.xml (100%) diff --git a/.gitignore b/.gitignore index cd070d3..27eb074 100755 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ .externalNativeBuild .cxx /release.properties + +keystore.properties diff --git a/.idea/compiler.xml b/.idea/compiler.xml old mode 100755 new mode 100644 index f861765..3cd2840 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..0c0c338 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml old mode 100755 new mode 100644 index f7a6fca..c34ccc3 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,10 +4,8 @@ diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..f8467b4 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100755 new mode 100644 index d3d1969..080419a --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - - + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 65ce068..0c0d88e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,22 +1,26 @@ +import org.gradle.util.GUtil.loadProperties + plugins { id("com.android.application") - kotlin("android") - kotlin("kapt") + id("org.jetbrains.kotlin.android") + id("com.google.devtools.ksp") id("kotlin-parcelize") - id("dagger.hilt.android.plugin") + id("com.google.dagger.hilt.android") } -val hiltVersion: String by rootProject.extra - android { - compileSdk = 31 + compileSdk = 34 defaultConfig { applicationId = "jp.co.c_lis.ccl.morelocale" - minSdk = 14 - targetSdk = 30 - versionCode = 14246 - versionName = "2.4.6" + namespace = "jp.co.c_lis.ccl.morelocale" + + minSdk = 19 + maxSdk = 30 + targetSdk = 34 + + versionCode = 14247 + versionName = "2.4.7" buildConfigField( "String", @@ -30,27 +34,63 @@ android { "\"locale.db\"" ) - sourceSets { - // Adds exported schema location as test app assets. - getByName("androidTest").assets.srcDirs("$projectDir/schemas") + buildFeatures { + buildConfig = true } - javaCompileOptions { - annotationProcessorOptions { - arguments["room.schemaLocation"] = "$projectDir/schemas" - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + ksp { + arg("room.schemaLocation", "$projectDir/schemas") } testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } + signingConfigs { + create("release") { + val releaseKeyStoreFile = File(rootDir, "keystore.properties") + if (!releaseKeyStoreFile.exists()) { + return@create + } + + val releaseKeyStoreProps = loadProperties(releaseKeyStoreFile) + + val keystorePath = releaseKeyStoreProps.getProperty("keystore_path", "") + val keystorePassword = releaseKeyStoreProps.getProperty("keystore_password", "") + val keystoreKeyAlias = releaseKeyStoreProps.getProperty("keystore_key_alias", "") + val keystoreKeyPassword = releaseKeyStoreProps.getProperty("keystore_key_password", "") + + if (arrayOf( + keystorePath, + keystorePassword, + keystoreKeyAlias, + keystoreKeyPassword + ).none { it.isNullOrEmpty() } + ) { + storeFile = file(keystorePath) + storePassword = keystorePassword + keyAlias = keystoreKeyAlias + keyPassword = keystoreKeyPassword + } + } + } + buildTypes { release { - isMinifyEnabled = false + isMinifyEnabled = true + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) + signingConfig = signingConfigs.getByName("release") } } testOptions { @@ -62,9 +102,10 @@ android { } dependencies { - val lifecycleVersion = "2.4.0-rc01" - val fragmentVersion = "1.4.0-alpha10" - val roomVersion = "2.3.0" + val lifecycleVersion = "2.7.0-beta01" + val fragmentVersion = "1.7.0-alpha06" + val roomVersion = "2.6.0" + val hiltVersion = "2.48.1" implementation( fileTree( @@ -76,30 +117,30 @@ dependencies { ) ) - implementation("androidx.core:core-ktx:1.7.0") - implementation("androidx.appcompat:appcompat:1.3.1") - implementation("com.google.android.material:material:1.4.0") - implementation("androidx.constraintlayout:constraintlayout:2.1.1") - implementation("androidx.recyclerview:recyclerview:1.2.1") + implementation(project(":lib")) + + implementation("androidx.core:core-ktx:1.12.0") + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.10.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("androidx.recyclerview:recyclerview:1.3.2") implementation("androidx.fragment:fragment-ktx:$fragmentVersion") implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion") implementation("androidx.room:room-runtime:$roomVersion") - kapt("androidx.room:room-compiler:$roomVersion") + ksp("androidx.room:room-compiler:$roomVersion") androidTestImplementation("androidx.room:room-testing:$roomVersion") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") implementation("com.jakewharton.timber:timber:5.0.1") implementation("com.google.dagger:hilt-android:$hiltVersion") - kapt("com.google.dagger:hilt-android-compiler:$hiltVersion") - - implementation(project(mapOf("path" to ":lib"))) + ksp("com.google.dagger:hilt-android-compiler:$hiltVersion") testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.3") - androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cea966a..afc62d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,10 +1,11 @@ - + + + diff --git a/app/src/main/java/jp/co/c_lis/ccl/morelocale/entity/LocaleItem.kt b/app/src/main/java/jp/co/c_lis/ccl/morelocale/entity/LocaleItem.kt index 5a2ebe2..b28c894 100644 --- a/app/src/main/java/jp/co/c_lis/ccl/morelocale/entity/LocaleItem.kt +++ b/app/src/main/java/jp/co/c_lis/ccl/morelocale/entity/LocaleItem.kt @@ -7,10 +7,10 @@ import androidx.room.Ignore import androidx.room.PrimaryKey import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize -import java.util.* +import java.util.Locale -@Entity @Parcelize +@Entity data class LocaleItem( @PrimaryKey(autoGenerate = true) val id: Int = 0, diff --git a/app/src/main/java/jp/co/c_lis/ccl/morelocale/service/RestoreLocaleService.kt b/app/src/main/java/jp/co/c_lis/ccl/morelocale/service/RestoreLocaleService.kt index d7614de..99c52e1 100644 --- a/app/src/main/java/jp/co/c_lis/ccl/morelocale/service/RestoreLocaleService.kt +++ b/app/src/main/java/jp/co/c_lis/ccl/morelocale/service/RestoreLocaleService.kt @@ -1,5 +1,6 @@ package jp.co.c_lis.ccl.morelocale.service +import android.annotation.SuppressLint import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager @@ -11,6 +12,7 @@ import android.os.Build import android.os.IBinder import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat +import androidx.core.app.PendingIntentCompat import dagger.hilt.android.AndroidEntryPoint import jp.co.c_lis.ccl.morelocale.BuildConfig import jp.co.c_lis.ccl.morelocale.equals @@ -243,6 +245,7 @@ class RestoreLocaleService : Service() { notificationManager.createNotificationChannel(channel) } + @SuppressLint("MissingPermission") private fun showProgressNotification(context: Context) { val notify = createProgressNotification(context) NotificationManagerCompat.from(context) @@ -275,6 +278,7 @@ class RestoreLocaleService : Service() { } + @SuppressLint("MissingPermission") private fun showCanceledNotification(context: Context) { val notify = createCanceledNotification(context) NotificationManagerCompat.from(context) @@ -293,11 +297,13 @@ class RestoreLocaleService : Service() { neverPendingIntent ) - val restorePendingIntent = PendingIntent.getService( + val restorePendingIntent = PendingIntentCompat.getService( context, REQUEST_CODE_RESTORE, getRestoreIntent(context), - PendingIntent.FLAG_UPDATE_CURRENT) + PendingIntent.FLAG_UPDATE_CURRENT, + false, + ) val restoreAction = NotificationCompat.Action( NO_ICON, getText(R.string.restore), @@ -316,6 +322,7 @@ class RestoreLocaleService : Service() { } + @SuppressLint("MissingPermission") private fun showPermissionErrorNotification(context: Context) { val notify = createPermissionErrorNotification(context) NotificationManagerCompat.from(context) @@ -323,11 +330,12 @@ class RestoreLocaleService : Service() { } private fun createPermissionErrorNotification(context: Context): Notification { - val pendingIntent = PendingIntent.getActivity( + val pendingIntent = PendingIntentCompat.getActivity( context, REQUEST_OPEN_FROM_PERMISSION_ERROR, Intent(context, MainActivity::class.java), - PendingIntent.FLAG_CANCEL_CURRENT + PendingIntent.FLAG_CANCEL_CURRENT, + false, ) return NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) diff --git a/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_edit/EditLocaleFragment.kt b/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_edit/EditLocaleFragment.kt index 5ebcc38..325a34c 100644 --- a/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_edit/EditLocaleFragment.kt +++ b/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_edit/EditLocaleFragment.kt @@ -77,7 +77,7 @@ class EditLocaleFragment : Fragment(R.layout.fragment_edit_locale) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - mode = MODE.values()[requireArguments().getInt(KEY_MODE)] + mode = MODE.entries.toTypedArray()[requireArguments().getInt(KEY_MODE)] } override fun onAttach(context: Context) { diff --git a/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_list/LocaleListFragment.kt b/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_list/LocaleListFragment.kt index 114ca11..6dadd59 100644 --- a/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_list/LocaleListFragment.kt +++ b/app/src/main/java/jp/co/c_lis/ccl/morelocale/ui/locale_list/LocaleListFragment.kt @@ -27,17 +27,18 @@ import timber.log.Timber @AndroidEntryPoint class LocaleListFragment : Fragment(R.layout.fragment_locale_list) { - - private var binding: FragmentLocaleListBinding? = null - - private val viewModel: LocaleListViewModel by viewModels() - companion object { fun getInstance(): LocaleListFragment { return LocaleListFragment() } } + private var binding: FragmentLocaleListBinding? = null + + private val viewModel: LocaleListViewModel by viewModels() + + private val permissionDialog = PermissionRequiredDialog.getInstance() + private val menuCallback = object : LocaleListAdapter.MenuCallback { override fun onEdit(localeItem: LocaleItem) { parentFragmentManager.beginTransaction() @@ -116,17 +117,18 @@ class LocaleListFragment : Fragment(R.layout.fragment_locale_list) { } viewModel.alertsEvents.observe(viewLifecycleOwner) { typeAlert -> + Timber.d("typeAlert: $typeAlert, ${permissionDialog.isAdded}") when (typeAlert) { AlertsMoreLocale.NEED_PERMISSION -> { - PermissionRequiredDialog.getInstance().apply { - show(parentFragmentManager, PermissionRequiredDialog.TAG) - } + permissionDialog.show(parentFragmentManager, PermissionRequiredDialog.TAG) } + else -> {} } } binding = FragmentLocaleListBinding.bind(view).also { binding -> + binding.lifecycleOwner = viewLifecycleOwner binding.recyclerView.layoutManager = WrapContentLinearLayoutManager( requireContext(), LinearLayoutManager.VERTICAL, false) binding.recyclerView.adapter = adapter diff --git a/lib/src/main/res/values/iso_3166.xml b/app/src/main/res/values/iso_3166.xml similarity index 100% rename from lib/src/main/res/values/iso_3166.xml rename to app/src/main/res/values/iso_3166.xml diff --git a/lib/src/main/res/values/iso_639.xml b/app/src/main/res/values/iso_639.xml similarity index 100% rename from lib/src/main/res/values/iso_639.xml rename to app/src/main/res/values/iso_639.xml diff --git a/build.gradle.kts b/build.gradle.kts index 25ff9fa..8d1106c 100755 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,24 +1,17 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -buildscript { - val kotlinVersion = "1.5.31" - val hiltVersion = "2.38.1" - - extra.apply { - set("kotlinVersion", kotlinVersion) - set("hiltVersion", hiltVersion) - } +plugins { + id("com.android.application") version "8.2.0-rc02" apply false + id("com.android.library") version "8.2.0-rc02" apply false + id("org.jetbrains.kotlin.android") version "1.9.10" apply false + id("com.google.dagger.hilt.android") version "2.48" apply false + id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false +} +buildscript { repositories { google() mavenCentral() } - dependencies { - classpath("com.android.tools.build:gradle:7.0.3") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - classpath("com.google.dagger:hilt-android-gradle-plugin:$hiltVersion") - - classpath("com.deploygate:gradle:2.4.0") - } } tasks.register("clean", Delete::class) { diff --git a/gradle.properties b/gradle.properties index acf164f..54adf5d 100755 --- a/gradle.properties +++ b/gradle.properties @@ -10,11 +10,13 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. # Default value: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 -XX:+UseParallelGC # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -android.enableJetifier=true android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +org.gradle.unsafe.configuration-cache=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 25c57b2..81b7627 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Nov 27 15:07:26 JST 2020 +#Mon Nov 06 19:07:26 JST 2023 distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip +zipStoreBase=GRADLE_USER_HOME diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index a3dc906..33649f2 100755 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -3,16 +3,26 @@ plugins { } android { - compileSdk = 30 + namespace = "jp.co.c_lis.morelocale" + + compileSdk = 34 defaultConfig { minSdk = 3 - targetSdk = 30 + } + + buildFeatures { + buildConfig = true + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } } dependencies { testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.3") - androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") } diff --git a/lib/src/main/AndroidManifest.xml b/lib/src/main/AndroidManifest.xml index e1e0768..c0ff88f 100755 --- a/lib/src/main/AndroidManifest.xml +++ b/lib/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ + xmlns:tools="http://schemas.android.com/tools"> Date: Mon, 6 Nov 2023 20:20:51 +0900 Subject: [PATCH 2/4] Update JDK version --- .github/workflows/android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index d5bfeee..d56b321 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -29,6 +29,6 @@ jobs: uses: actions/setup-java@v2 with: distribution: 'zulu' - java-version: '11' + java-version: '17' - name: Build with Gradle run: ./gradlew build${{ matrix.Variant }} From 1d812ae5b5f6b42507aae13ac65838b14bc9a722 Mon Sep 17 00:00:00 2001 From: ARIYAMA Keiji Date: Tue, 7 Nov 2023 20:53:16 +0900 Subject: [PATCH 3/4] Bump minSDk for multidex --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0c0d88e..837d6d6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,7 +15,7 @@ android { applicationId = "jp.co.c_lis.ccl.morelocale" namespace = "jp.co.c_lis.ccl.morelocale" - minSdk = 19 + minSdk = 20 maxSdk = 30 targetSdk = 34 From 98a585feb121540ed86d06adb20992e7b5d164f3 Mon Sep 17 00:00:00 2001 From: ARIYAMA Keiji Date: Tue, 7 Nov 2023 21:07:02 +0900 Subject: [PATCH 4/4] Multi DEX enabled --- app/build.gradle.kts | 6 +++++- .../main/java/jp/co/c_lis/ccl/morelocale/MainApplication.kt | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 837d6d6..90cb3d3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -15,9 +15,10 @@ android { applicationId = "jp.co.c_lis.ccl.morelocale" namespace = "jp.co.c_lis.ccl.morelocale" - minSdk = 20 + minSdk = 19 maxSdk = 30 targetSdk = 34 + multiDexEnabled = true versionCode = 14247 versionName = "2.4.7" @@ -104,6 +105,7 @@ android { dependencies { val lifecycleVersion = "2.7.0-beta01" val fragmentVersion = "1.7.0-alpha06" + val multidexVersion = "2.0.1" val roomVersion = "2.6.0" val hiltVersion = "2.48.1" @@ -129,6 +131,8 @@ dependencies { implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion") + implementation("androidx.multidex:multidex:$multidexVersion") + implementation("androidx.room:room-runtime:$roomVersion") ksp("androidx.room:room-compiler:$roomVersion") androidTestImplementation("androidx.room:room-testing:$roomVersion") diff --git a/app/src/main/java/jp/co/c_lis/ccl/morelocale/MainApplication.kt b/app/src/main/java/jp/co/c_lis/ccl/morelocale/MainApplication.kt index e32563e..4f094e2 100644 --- a/app/src/main/java/jp/co/c_lis/ccl/morelocale/MainApplication.kt +++ b/app/src/main/java/jp/co/c_lis/ccl/morelocale/MainApplication.kt @@ -1,7 +1,7 @@ package jp.co.c_lis.ccl.morelocale -import android.app.Application import android.content.Context +import androidx.multidex.MultiDexApplication import androidx.room.Room import dagger.hilt.android.HiltAndroidApp import timber.log.Timber @@ -9,7 +9,7 @@ import timber.log.Timber.DebugTree @Suppress("unused") @HiltAndroidApp -class MainApplication : Application() { +class MainApplication : MultiDexApplication() { companion object {