Я разрабатываю приложение, которое должно работать на телефонах с Android API 19+. В беседах с руководством выясняется, можем ли мы отказаться от поддержки более старых версий Android, но кажется почти наверняка, что мы не можем жить только с 26+.
В последнее время возникла необходимость использовать библиотеку, которая используетнекоторые функции Java 1.8, и те, которые не могут dex.
Ранее я думал, что автоматическое «десагеринг» было включено при сборке / индексации с помощью gradle, и такие проблемы будут «автоматически» решены. путем преобразования неподдерживаемых опкодов в 1.7 в функционально эквивалентные 1.7 опкоды.
Но мои сборки терпят неудачу с «Методы частного интерфейса поддерживаются только начиная с Android N (--min-api 24)» и аналогичныхсообщения об ошибках (как я уже сказал, API-уровень 26 является самым большим на мой взгляд), и:
"Failed to transform artifact '...' to match attributes {artifactType=android-dex, dexing-enable-desugaring=false, dexing-is-debuggable=false, dexing-min-sdk=1}"
Как вы можете видеть, dexing, кажется, происходит с "dexing-enable-desugaring = false" и"dexing-min-sdk = 1", и я бы хотел это изменить. Я долго искал способ их установки, и, похоже, не могу найти способ сказать gradle, что он должен передать правильные параметры дексеру.
Вот соответствующие фрагментыфайлы конфигурации:
gradle.properties:
androidBuildToolsVersion=28.0.3
androidCompileSdkVersion=28
gradle-wrapper.properties:
distributionUrl = https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
build.gradle:
buildscript {
repositories {
jcenter()
mavenCentral()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects {
repositories {
jcenter()
google()
}
}
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:mediarouter-v7:23.0.1'
compile 'com.google.android.gms:play-services-analytics:10.0.0'
compile 'com.google.android.gms:play-services-cast:10.0.0'
compile 'com.google.android.gms:play-services-location:10.0.0'
compile 'com.google.firebase:firebase-core:10.0.1'
compile 'org.bouncycastle:bcpkix-jdk15on:1.60'
compile 'org.bouncycastle:bcprov-jdk15on:1.60'
...
}
apply plugin: 'com.google.gms.google-services'
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
compileSdkVersion androidCompileSdkVersion.toInteger()
buildToolsVersion androidBuildToolsVersion
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
...
}
}
defaultConfig.applicationId = "..."
}
Любые предложения?
Кроме того, стоит отметить, что это не «чистый» проект android / Gradle, там задействован нативный код и система сборки, над которой я не могу хорошо контролировать, которая запускает Gradle какшаг в процессе сборки. Если есть несколько способов настройки параметров dexer, я бы предпочел что-то, что требует изменения build.gradle, так как это единственное, над чем у меня есть прямой контроль, вставка чего-либо в gradle.properties потребует взлома системы сборки способами, которые яЛучше избегать, но я возьму это, если это единственный способ сделать это.