Ткань Бета и АПК распадается
Я делю свое приложение на основе ABI, а не на плотность, вот так:
splits {
abi {
enable true
reset()
include 'x86', 'armeabi', 'armeabi-v7a', 'mips', 'arm64-v8a'
universalApk true
}
}
У меня есть несколько вариантов, и 2 типа сборки (отладка и выпуск). Я хочу поместить универсальный apk-файл, который содержит нативные библиотеки для всех платформ, на фабричную бета-версию. Насколько я понимаю, это поддерживается с помощью атрибута ext.betaDistributionApkFilePath.
Я могу определить это либо на уровне buildType, либо на уровне аромата. Проблема в том, что мне нужен как тип сборки, так и вариант, чтобы подобрать мой вариант - что-то вроде этого:
android.applicationVariants.all { variant ->
variant.ext.betaDistributionApkFilePath = "${buildDir}/outputs/apk/app-${variant.productFlavors[0].name}-universal-${variant.buildType.name}.apk"
}
или же
gradle.taskGraph.beforeTask { Task task ->
if(task.name ==~ /crashlyticsUploadDistribution.*/) {
System.out.println("task name: ${task.name}");
android.applicationVariants.all { variant ->
System.out.println("match: crashlyticsUploadDistribution${variant.name}");
if(task.name ==~ /(?i)crashlyticsUploadDistribution${variant.name}/){
ext.betaDistributionApkFilePath = "${buildDir}/outputs/apk/app-${variant.productFlavors[0].name}-universal-${variant.buildType.name}.apk"
System.out.println(ext.betaDistributionApkFilePath);
}
}
}
К сожалению, это не работает - есть ли способ сделать это в настоящее время?
1 ответ
Для каждого существующего варианта вы можете добавить действие, которое будет выполняться перед задачами Crashlytics, и установить ext.betaDistributionApkFilePath
согласно названию варианта. Вот как это выглядит:
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
// Filter is null for universal APKs.
def filter = output.getFilter(com.android.build.OutputFile.ABI)
if (filter == null) {
tasks.findAll {
it.name.startsWith(
"crashlyticsUploadDistribution${variant.name.capitalize()}")
}.each {
it.doFirst {
ext.betaDistributionApkFilePath = output.outputFile.absolutePath
}
}
tasks.findAll {
it.name.startsWith(
"crashlyticsUploadSymbols${variant.name.capitalize()}")
}.each {
it.doFirst {
ext.betaDistributionApkFilePath = output.outputFile.absolutePath
}
}
}
}
}