我在应用程序中使用了Fabric crashlytics,当com.android.tools.build:gradle为3.2.1时,它可以正常工作,直到将其更新为3.3.0。
现在,我遇到了“ Crashlytics找不到清单”,发现在build / intermediates / merged_manifest /.../ merged中没有创建AndroidManifest.xml。 我读过this this和this,但并没有解决我的问题。 我如何解决它?谢谢。
这是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'
...
}
}
答案 0 :(得分:12)
您是否尝试过完全按照库模块和基础项目的Crashlytics设置要求配置所有内容?如果设置与推荐的here不同,则新的Gradle插件似乎无法正常工作。
对我来说,从库的build.gradle文件中删除“ apply plugin: 'io.fabric'
”(但将其保留在应用程序build.gradle中)解决了该错误。
答案 1 :(得分:6)
我遇到了同样的问题,并像下面那样使用Ionic 5,Capacitor和Cordova FirebaseX Plugin(指的是Crashlytics)修复了问题,可能您需要调整一些路径以适合您的环境:
./gradlew assembleDebug
之类的Gradlew构建命令。AndroidManifest.xml
从your-app/src/main/AndroidManifest.xml
复制到your-app/build/intermediates/merged_manifests/debug/AndroidManifest.xml
。在我使用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。