В чем разница в задачах Gradle между параметрами установки приложения «APK по умолчанию» и «APK из набора приложений»

Я хочу извлечь ресурсы нашего Android-приложения в Android Asset Pack, поскольку мы превышаем ограничение на размер AAB (Android App Bundle) в 150 МБ. Во время тестирования я следовал инструкциям по тестированиюпакета приложений Android и изменил конфигурацию запуска / отладки Android Studio на APK из пакета приложений . После выполнения этого изменения я смог найти активы из Asset Pack во время выполнения при отладке моего приложения.

Однако позже во время выполнения я понял, что метод JDK11 больше не поддерживается, как это было раньше при использовании APK- файла конфигурации запуска / отладки по умолчанию . Вот как его раньше обессахаривали.

       C$r8$backportedMethods$utility$Optional$0$isEmpty.isEmpty(someVariable)

После некоторого исследования Google я включил в свой проект, который фактически решил эту проблему с библиотеку Desugaringобратным переносом . Однако, продолжая работать, я понял, что некоторые части нашей библиотеки, которая используется как зависимость в приложении Android, используют следующий метод.

      public static ConcurrentHashMap.KeySetView newKeySet()

Согласно этой статье о stackoverflow, это известная проблема, которая приводит к следующему исключению.

      Process: com.test.android_application, PID: 20849
    java.lang.NoSuchMethodError: No static method newKeySet()Lj$/util/concurrent/ConcurrentHashMap$KeySetView; in class Lj$/util/concurrent/ConcurrentHashMap; or its super classes (declaration of 'j$.util.concurrent.ConcurrentHashMap')

Это мой файл build.gradle:

      apply plugin: 'com.android.application'
android {
    compileSdkVersion 30
    defaultConfig {
        applicationId "com.myAndroidApp"
        minSdkVersion 21
        targetSdkVersion 30
        versionName "MyApplication"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        testOptions {
            execution 'ANDROIDX_TEST_ORCHESTRATOR'
        }
        ndk {
            abiFilters "arm64-v8a", "armeabi-v7a", "x86", "x86_64"
        }
    }

    signingConfigs {
        debug {
            storeFile file('debug_signing/debug.keystore')
            storePassword androidDebugStorePassword
            keyAlias 'androiddebugkey'
            keyPassword androidDebugKeyPassword
        }
        release {
            Properties releaseSigningProperties = new Properties()
            def releasePropsFile = file(releaseApiKeyFile)
            if (releasePropsFile.canRead()) {
                releaseSigningProperties.load(new FileInputStream(releasePropsFile))
                if (releaseSigningProperties != null) {
                    storeFile file(releaseStoreFile)
                    storePassword releaseSigningProperties['releaseStorePassword']
                    keyAlias releaseSigningProperties['releaseKeyAlias']
                    keyPassword releaseSigningProperties['releaseKeyPassword']
                }
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            multiDexKeepFile file('multidex-config.txt')
            signingConfig signingConfigs.release
        }
        debug{
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            multiDexKeepFile file('multidex-config.txt')
            signingConfig signingConfigs.debug
        }
    }

    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}
dependencies {
    implementation group: 'com.myProject', name: 'internalDependency', version: '1.0'
    
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.cardview:cardview:1.0.0'

    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
    testImplementation 'junit:junit:4.13.1'
    testImplementation 'org.hamcrest:hamcrest-library:1.3'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    androidTestImplementation 'androidx.test:runner:1.4.0'
    androidTestImplementation 'androidx.test:core:1.4.0'
    androidTestUtil 'androidx.test:orchestrator:1.4.0'
    
    // Lifecycle components
    def archLifecycleVersion = '2.2.0'
    implementation "androidx.lifecycle:lifecycle-extensions:$archLifecycleVersion
}

APK- файл конфигурации запуска по умолчанию поддерживает только резервные копии Optional.isEmpty метод и сохраняет public static ConcurrentHashMap.KeySetView newKeySet()нетронутый (на нем не производилась операция по обессахариванию). Такого же поведения я хочу добиться и для APK из набора приложений .

Я явно мог бы переписать этот фрагмент кода в библиотеке, которая втягивается в приложение Android, но все же возникает вопрос, какая разница в задачах Gradle между параметрами установки приложения APK по умолчанию и APK из пакета приложений .

Я уже нашел эту статью, но она не вдавалась в подробности.
Кроме того, при создании приложения выполняются следующие задачи Gradle:

      Default APK : assembleDebug  
APK from app bundle : extractApksForDebug

0 ответов

Другие вопросы по тегам