未生成 Crashlytics 映射文件

Posted

技术标签:

【中文标题】未生成 Crashlytics 映射文件【英文标题】:Crashlytics Mapping files not getting generated 【发布时间】:2021-11-30 21:07:59 【问题描述】:

我已经使用minifyEnabled true 启用了 proguard,并尝试从 jenkins 创建构建。但是在从 jenkins 创建 apk 时,我遇到了构建错误。

> Task :app:packageUat
> Task :app:uploadCrashlyticsMappingFileUat FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:uploadCrashlyticsMappingFileUat'.
> Crashlytics could not find the resource file generated by Google Services. You may need to execute the :process<Variant>GoogleServices Task. Please check your Firebase project configuration (https://firebase.google.com/docs/android/setup). 

我在我的应用程序中使用 FCM 和 Crashlytics Google 服务。我没有包括google-service.json,而是初始化运行时。这是firebase初始化代码:

FirebaseApp.initializeApp(mAppContext, new FirebaseOptions.Builder()
            .setProjectId(BuildConfig.PROJECT_ID)
            .setApiKey(BuildConfig.API_KEY)
            .setApplicationId(BuildConfig.FCM_APPLICATION_ID)
            .setGcmSenderId(BuildConfig.GCM_SENDER_ID)
            .build());

    FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);

按照我在 jenkins 上使用的命令来创建构建:

clean
assemble$Build

这是我的 uat 构建配置:

uat 
        minifyEnabled true
        shrinkResources true
        signingConfig signingConfigs.uat
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        buildConfigField "String", 'API_KEY', API_KEY
        buildConfigField "String", 'FCM_APPLICATION_ID', FCM_APPLICATION_ID
        buildConfigField "String", 'PROJECT_ID', PROJECT_ID
        buildConfigField "String", 'GCM_SENDER_ID', GCM_SENDER_ID

    

由于安全问题,我无法在我的项目中包含 google-service.json。我有什么遗漏吗?

【问题讨论】:

【参考方案1】:

它清楚地告诉你它期望它在res 目录中:

Crashlytics 找不到由 Google 服务生成的资源文件

XML 文件看起来很像 this... 但为什么不在构建时简单地提供 google-services.json 呢?这可能比从环境变量生成 XML 文件更省力(基本上就是插件所做的)。

实际上……documentation 写着:

Firebase 配置文件包含您项目的唯一但非机密标识符。

【讨论】:

google-service.json 的问题是,如果有人可以访问代码,那么任何人都可以访问密钥。这就是我们从 jenkins 注入它的原因。 只需添加一个构建步骤、shell 脚本,然后将整个文件作为 here-doc 注入。你没看我的回答吗?这个文件绝对没有什么“秘密”,任何可以反编译应用程序的人都可以访问这些字符串。这不是一个服务帐户配置文件,它会保存 SSH 密钥。 嗨@Martin 我明白了你的意思,但是真的可以在没有 google-services.json 的情况下在项目中配置 proguard 吗? @MartinZeitler:请帮助***.com/questions/69709546/…

以上是关于未生成 Crashlytics 映射文件的主要内容,如果未能解决你的问题,请参考以下文章

Android 将特定构建警告视为错误,因此当 Crashlytics 映射文件上传失败时构建失败

Android NoHttpResponseException:Crashlytics 在上传 deobs 文件时出现问题

Chrome 开发工具未映射 ts 源

花生壳添加映射失败怎么办

SQLMETAL 和 EDMGenerator 生成的映射文件的基本区别是啥?

使用java实体类自动生成Hibernate映射文件