Fabric Beta 和 APK 拆分
Fabric Beta and APK splits
我根据 ABI 拆分我的应用程序,而不是密度,如下所示:
splits {
abi {
enable true
reset()
include 'x86', 'armeabi', 'armeabi-v7a', 'mips', 'arm64-v8a'
universalApk true
}
}
我有多种风格和 2 种构建类型(调试和发布)。我想将具有所有平台本机库的通用 apk 文件放在 fabric beta 上。据我了解,这是通过 ext.betaDistributionApkFilePath 属性支持的。
我可以在 buildType 级别或 flavor 级别定义它。问题是我需要构建类型和风格来选择我的变体——像这样:
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);
}
}
}
不幸的是,这似乎不起作用 - 目前有什么方法可以做到这一点吗?
对于每个现有变体,您可以添加一个将在 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
}
}
}
}
}
我根据 ABI 拆分我的应用程序,而不是密度,如下所示:
splits {
abi {
enable true
reset()
include 'x86', 'armeabi', 'armeabi-v7a', 'mips', 'arm64-v8a'
universalApk true
}
}
我有多种风格和 2 种构建类型(调试和发布)。我想将具有所有平台本机库的通用 apk 文件放在 fabric beta 上。据我了解,这是通过 ext.betaDistributionApkFilePath 属性支持的。
我可以在 buildType 级别或 flavor 级别定义它。问题是我需要构建类型和风格来选择我的变体——像这样:
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);
}
}
}
不幸的是,这似乎不起作用 - 目前有什么方法可以做到这一点吗?
对于每个现有变体,您可以添加一个将在 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
}
}
}
}
}