【问题标题】:Crashlytics Mapping files not getting generated未生成 Crashlytics 映射文件
【发布时间】: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。我有什么遗漏吗?

【问题讨论】:

    标签: android firebase jenkins proguard crashlytics


    【解决方案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:请帮助stackoverflow.com/questions/69709546/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 2016-12-11
    • 2018-11-23
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多