【问题标题】:Crashlytics could not find the manifest when update build:gradle to 3.3.0更新 build:gradle 到 3.3.0 时,Crashlytics 找不到清单
【发布时间】:2019-06-26 15:57:48
【问题描述】:

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

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

这里是 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'
        ...
    }
}

这是错误:

【问题讨论】:

  • 同样的问题!
  • 我也一样!!!
  • 我最终将结构移动到应用程序模块。它对我有用

标签: android gradle


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我试过了,但不要修复它。此外,它适用于 gradle:3.2.1 所以我认为这个配置很好。当更新到 3.3.0 时,没有在 intermediates/.../merged 中创建 AndroidManifest.xml,所以我猜这就是报告此错误的原因。
【解决方案2】:

我遇到了同样的问题并为我解决了如下问题,使用 Ionic 5、Capacitor 和 Cordova FirebaseX Plugin(引用 Crashlytics),您可能需要调整一些路径以适应您的环境:

  1. 运行 Gradlew 构建命令,如 ./gradlew assembleDebug
  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 和 Capacitor 的情况下,路径是:

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

希望对你有帮助。

【讨论】:

  • 感谢您的回复。这似乎是一种更容易完成的方法。
  • 谢谢,有完全相同的问题,这解决了它。但现在得到 AAPT: error: resource color/accent (aka com.flexeventsapp.flex:color/accent) not found。你有没有遇到过这种情况?
  • @ihorbond 我按照步骤卡在了那里,你能解决它吗?
  • @Zen3515 是的,我做到了。我创建了一个 color.xml (pastebin.com/6SmQYt4H) 文件并放入 \android\app\src\main\res\values
  • 你已经在正确的道路上。似乎您有一些插件需要带有(在您的情况下)颜色定义的附加 config.xml。你也需要复制这个,你可以创建一个用于复制静态资源的小脚本。
【解决方案3】:

我已经解决了这个问题,同时将 Crashlytics 依赖项排除在应用程序模块之外,但它非常 hacky。

据我所知,io.fabric 插件的存在主要是为 crashlytics 生成构建 ID,这对 Fabric 平台很重要,但对于 Firebase 却未使用。我认为这是残留的功能,最终会在 Crashlytics 完成迁移到 Firebase 时被删除,但与此同时,它是非常必要的,因为 Crashlytics 会检查它,如果它不存在就会使您的应用崩溃。

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


我采取的具体步骤是:

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

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

并删除 io.fabric gradle 插件的所有用法,以及对 gradle 插件的类路径依赖(因为您不再使用它)。


请注意,正如我所说,这非常hacky。如果您将这种方法用于您的项目,我建议您彻底测试一下。可能有一些功能仍然使用构建 ID,这会导致它中断。

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

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

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

【讨论】:

  • 感谢您的回复。我根据@Roman Potapov 的回答修复它。首先,将插件移动到 app.gradle buildscript { repositories { maven { url 'maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.+' } } apply plugin: 'io.fabric' 然后保持这在我的 lib.gralde 存储库中 { maven { url "jitpack.io" } maven { url 'maven.fabric.io/public' } } api('com.crashlytics.sdk.android:crashlytics:2.9.9@aar') { 传递 =真的}
  • 是的,这应该也可以,我在提供此解决方案时的观点是,它将所有 Crashlytics 保留在库模块中。我首先使用库模块的全部原因是将我的代码与 firebase / crashlytics 完全分离。
  • 是的,这很有道理。
猜你喜欢
  • 2018-05-12
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
相关资源
最近更新 更多