当前位置:  开发笔记 > Android > 正文

Crashlytics(Fabric)针对应用程序变体(构建类型,产品风格)分离组织

如何解决《Crashlytics(Fabric)针对应用程序变体(构建类型,产品风格)分离组织》经验,为你挑选了2个好方法。

这是一个自我回答的问题,分享我的知识.

我有一个具有多种产品口味的项目,我希望使用不同的组织为每种产品风格整合Fabric.

我尝试使用Android Studio Fabric插件集成Fabric.它补充道


进入AndroidManifest.xmlmain源集合.

我决定在应用程序变体特定的源集中重写此条目:



    
        
    

然后我发现Fabric Gradle插件crashlytics.properties在构建期间生成带有fabric api secret(AKA build secret)的文件,我应该将此文件包含在源代码控制中.但是每次构建特定的应用程序变体时都会覆盖此文件,因为api secret对于每个应用程序都是唯一的.

如何针对每种应用程序变体使用单独的组织集成Fabric?



1> mixel..:

fabricGenerateResources调用构建任务期间,它会查找fabric.properties以下列内容命名的文件:

apiSecret=YOUR_BUILD_SECRET
apiKey=YOUR_API_KEY

所以我们需要的是fabric.properties在此之前生成文件.

我找到了这个解决方案,稍微对其进行了修改,以完全支持不仅构建类型的应用程

将此代码添加到以下android部分build.gradle:

File crashlyticsProperties = new File("${project.projectDir.absolutePath}/fabric.properties")
applicationVariants.all { variant ->
    variant.productFlavors.each { flavor ->
        def variantSuffix = variant.name.capitalize()
        def generatePropertiesTask = task("fabricGenerateProperties${variantSuffix}") << {
            Properties properties = new Properties()
            properties.put("apiKey", flavor.fabricApiKey)
            properties.put("apiSecret", flavor.fabricApiSecret)
            properties.store(new FileWriter(crashlyticsProperties), "")
        }

        def generateResourcesTask = project.tasks.getByName("fabricGenerateResources${variantSuffix}")
        generateResourcesTask.dependsOn generatePropertiesTask
        generateResourcesTask.doLast {
            println "Removing fabric.properties"
            crashlyticsProperties.delete()
        }
    }
}

它迭代应用程序变体,并为每个应用程序变体创建任务,生成fabric.properties在Fabric Gradle插件生成应用程序资源后删除此文件的文件和任务.

您现在需要的只是定义产品风味或特定的构建类型,fabricApiKey并且fabricApiSecret:

productFlavors {
    flavor1 {
        ext.fabricApiKey = "FLAVOR1_API_KEY"
        ext.fabricApiSecret = "FLAVOR1_API_SECRET"
    }
}

ext是每个ExtensionAware对象提供的ExtraPropertiesExtention对象.它允许将新属性添加到现有对象.在我的例子中是对象,它可以通过使用语法扩展新属性,以后可以使用这些属性.flavor1ExtensionAwareext.someProperty = "value"flavor.someProperty, flavor.fabricApiKey

此外,最好包括fabric.properties.gitignore.

ext.enableCrashlytics = false如果您在调试期间使用它来禁用Crashlytics,请不要忘记从调试版本类型中删除.您可以在Application.onCreate以下位置禁用它:

Fabric.with(this, new Crashlytics.Builder().core(
    new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build());



2> Dave Jensen..:

如果您不反对使用应用程序ID后缀,则不需要单独的组织.崩溃和答案将被视为单独的应用程序.

例如,假设我的应用程序ID是 io.example

在build.gradle中:

buildTypes {
  debug {
    applicationIdSuffix ".debug"
  }
  release {
    //options
  }
}

将调试版本部署到设备或模拟器后,在Fabric站点上,您将看到两个应用程序:

io.example

io.example.debug

有一件事情是好的这个方法是,你还可以跟踪其他构建口味seprately: ,io.exmaple.free,io.exmaple.paid,io.example.exterprise等等.


@CerlinBoss这是一个不同的错误.您尚未为此"新"应用设置Google API..debug是一个新的应用程序!
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有