android - Fabric Beta 和 APK 拆分

标签 android android-gradle-plugin crashlytics crashlytics-beta crashlytics-android

我根据 ABI 拆分我的应用程序,而不是密度,如下所示:

    splits {
       abi {
           enable true
           reset()
           include 'x86', 'armeabi', 'armeabi-v7a', 'mips', 'arm64-v8a'
           universalApk true
       }
    }

我有多种风格和 2 种构建类型(调试和发布)。我想将具有所有平台 native 库的通用 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
        }
      }
    }
  }
}

关于android - Fabric Beta 和 APK 拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33488249/

相关文章:

xcode - 确保您的项目build设置正在生成 dSYM 文件。对于所有配置,DEBUG_INFORMATION_FORMAT 应设置为 dwarf-with-dsym

ios - Crashlytics:存档分发错误:-3

java - 在 Main Activity 中的任何地方启动一个 Activity

android - gradle-experimental:0.1.0 buildConfigField

swift - 在哪里快速实现 crashlytics 的 setUserIdentifier 函数

android - Android Studio中这两个Gradle是什么意思?

java.lang.NoSuchMethodError : No static method zzb(ZLjava/lang/Object;)V in class Lcom/google/android/gms/common/internal/zzaa; or its super classes 错误

javascript - react native Android WebView : javaScriptEnabled does not seem to be working

android - 如何从 ListView 获取数据到上下文菜单?

android - 如何在类上使用 Kotlin 扩展函数?