Отладочные файлы отображаются в папке «Активы» производственной сборки - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть 3 варианта сборки: debug, development и release.

Для debug и development в папке активов есть экран с именем DebugActivity и некоторые вещи для отладки. Вот структура каталогов:

main 
    AndroidManifest.xml  (no reference to DebugActivity)
    \java\com\companyname\android\DebugActivity.kt
    \assets\some debug things

debug 
    AndroidManifest.xml (DebugActivity defined)

development
    AndroidManifest.xml (DebugActivity defined)
  • Когда я помещаю вещи из ресурсов в основную, я вижу их в производственной сборке (когда я открываю APK с APKTool).
  • Когда я копирую и вставляю \ assets \ некоторые отладочные файлы в debug и development, я не вижу его в производственной сборке, но у меня есть двойные элементы, что усложняет обслуживание эти файлы.

Как правильно структурировать это? Я ожидаю, что система сборки удалит ссылку на DebugActivity, потому что я определил логическое значение в моем build.gradle.

build.gradle:

buildConfigField 'boolean', 'SHOW_DEBUG_MENU', 'false'

MyApplication:

open class MyApplication : DaggerApplication() {

    override fun applicationDidEnterForeground() {
        super.applicationDidEnterForeground()
        if (BuildConfig.SHOW_DEBUG_MENU) {
            DebugActivity.showNotification(this)
        }
    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

при сборке Gradle не удалит эти файлы в папке активов, даже если они не используются.

Хорошее решение, без бесполезных флагов, должно быть таким:

Первое, что нужно сделать, это отделить ваши варианты от стандартных Android buildTypes (debug / release), потому что они содержат разные флаги во время компиляции и, возможно, разные подписи apk. Поэтому лучше не создавать никаких конфликтов с именами.

Создайте новое измерение, которое фактически определяет, что отлаживается, а что нет. Вы могли бы назвать это environment, и 2 измерения будут dev и prod.

flavorDimensions "environment"
productFlavors {
dev {
  dimension "environment"
}

prod {
  dimension "environment"
}

Создание 3 файлов:

main \ java \ com \ companyname \ android \ AbstractApplication.kt

abstract class AbstractApplication: DaggerApplication() {
..
abstract fun initEnvApp()
fun onCreate() {
  ...
  initEnvApp()
  ...
}

dev \ java \ com \ companyname \ android \ MyApplication.kt

abstract class MyApplication: AbstractApplication() {
..
fun initEnvApp() {
  \\init your debug logic
}

prod \ java \ com \ companyname \ android \ MyApplication.kt

abstract class MyApplication: AbstractApplication() {
..
fun initEnvApp() {
  \\init your prod logic or leave it empty
}

Организуйте свои файлы следующим образом:

main 
    AndroidManifest.xml  (reference to DebugActivity, add this attribute to application tag: android:name="com.companyname.android.MyApplication")
    \java\com\companyname\android\AbstractApplication.kt

dev
    \java\com\companyname\android\MyApplication.kt
    \java\com\companyname\android\DebugActivity.kt
    \...all assets files

prod
    \java\com\companyname\android\MyApplication.kt

Создайте свои APK с помощью

gradlew assembleDevDebug
gradlew assembleProdRelease

или любой другой комбинации, которую вы хотите.

Если, кроме debug / не отладка (которую мы назвали dev / prod), вам нужно разделить logi c по-другому, вы всегда можете создать другую среду (я назову ее foo), и после определения ваших productFlavors (скажем, * 1039) * и foo2), вы будете строить следующим образом:

gradlew assembleDevFoo1Debug
gradlew assembleDevFoo2Debug
gradlew assembleProdFoo2Release

или любую другую комбинацию, которую хотите

В обоих случаях сборки, принадлежащие среде DEV, будут содержать вашего разработчика активы и классы, в то время как любая другая сборка PROD не будет.

...