Crashlytics找不到清单时更新身材:gradle这个到3.3.0

时间:2019-02-02 05:23:58

标签: android gradle

我在应用程序中使用了Fabric crashlytics,当com.android.tools.build:gradle为3.2.1时,它可以正常工作,直到将其更新为3.3.0。

现在,我遇到了“ Crashlytics找不到清单”,发现在build / intermediates / merged_manifest /.../ merged中没有创建AndroidManifest.xml。 我读过this thisthis,但并没有解决我的问题。 我如何解决它?谢谢。

这是lib.gradle

apply plugin: 'com.android.library'
buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'io.fabric'
repositories {
    maven { url 'https://maven.fabric.io/public' }
    ...
}

dependencies {
    ...
    api('com.crashlytics.sdk.android:crashlytics:2.9.8@aar') {
        transitive = true
    }
}

这是项目gradle

buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
        ...
    }
}

这是错误: enter image description here

3 个答案:

答案 0 :(得分:12)

您是否尝试过完全按照库模块和基础项目的Crashlytics设置要求配置所有内容?如果设置与推荐的here不同,则新的Gradle插件似乎无法正常工作。

对我来说,从库的build.gradle文件中删除“ apply plugin: 'io.fabric'”(但将其保留在应用程序build.gradle中)解决了该错误。

答案 1 :(得分:6)

我遇到了同样的问题,并像下面那样使用Ionic 5,Capacitor和Cordova FirebaseX Plugin(指的是Crashlytics)修复了问题,可能您需要调整一些路径以适合您的环境:

  1. 运行./gradlew assembleDebug之类的Gradlew构建命令。
  2. 等待您得到的错误。
  3. AndroidManifest.xmlyour-app/src/main/AndroidManifest.xml复制到your-app/build/intermediates/merged_manifests/debug/AndroidManifest.xml
  4. 重新运行Gradlew构建命令./gradlew assembleDebug`。
  5. 您的构建过程现在应该成功。

在我使用Ionic 5和电容器的情况下,路径为:

  • android/capacitor-cordova-android-plugins/src/main/AndroidManifest.xml
  • android/capacitor-cordova-android-plugins/build/intermediates/merged_manifests/debug/AndroidManifest.xml

希望对您有帮助。

答案 2 :(得分:0)

在将Crashlytics依赖项排除在应用程序模块之外的同时,我已对此进行了修复,但这非常hacky。

据我所知,io.fabric插件主要用于为crashlytics生成构建ID,这对Fabric平台很重要,但对Firebase却没有用。我认为,这是残余功能,当Crashlytics完成向Firebase的迁移时,这些功能最终将被删除,但是与此同时,这非常有必要,因为Crashlytics会对其进行检查,如果不存在,则会使您的应用程序崩溃。

因此,我只是创建了一个无用的虚拟构建ID,并从我的模块中删除了对ui.fabric插件的所有提及,并且可以正常工作!我的代码像以前一样编译并报告到Firebase控制台崩溃,并且我可以毫无问题地更新到android gradle插件v3.3.0 +。


我采取的具体步骤是:

将此添加到使用crashlytics的模块的main / res / values.xml文件中:

<string name="com.crashlytics.android.build_id" translatable="false">RANDOM_UUID</string>

并删除io.fabric gradle插件的所有用法,以及gradle插件上的classpath依赖项(因为不再使用它)。


请注意,就像我说的那样,这很hacky。如果您对项目采用这种方法,建议您进行彻底的测试。某些功能可能仍会使用构建ID,这会导致其损坏。

编辑:经过进一步调查,我相信这样做将防止crashlytics上传您的映射文件,这意味着您将必须手动对堆栈跟踪进行模糊处理。至少这仍然是一种选择,但似乎有缺点。同样值得注意的是,您也可以简单地使用:

<string name="com.crashlytics.RequireBuildId">false</string>

而不是提供虚拟的构建ID。