由于 GCM SenderId Android,无法生成 APK 版本

Can't generate APK Release because of GCM SenderId Android

我在我的应用程序中实施了 GCM(Google 云消息传递)。 Google Play 服务库已自动生成 values.xml,其中我的 senderId 是:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="gcm_defaultSenderId">123</string>
</resources>

问题是我有其他语言环境,应用程序发布期间的 Lint 给我一个错误: Error:(3) Error: "gcm_defaultSenderId" is not translated in "fr" (French) [MissingTranslation]

因为是自动生成的所以不能设置translable = false。我应该如何解决这个问题?

您可能会有另一段自动生成的代码,如下所示:

String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

从 google 云控制台获取有效的发件人 ID 然后您可以从上面的代码中删除 R.string.gcm_defaultSenderId 以及从资源文件中删除 gcm_defaultSenderId。

我假设您使用的是 Android Studio。

与 Android Studio 1.4 有完全相同的问题。

我尝试的第一件事是将 "File - Settings - Editor - Inspections - Android Lint - Incomplete Translation" 严重性设置编辑为 'Error' 以外的设置。

没有帮助!我仍然无法构建发布版 APK。

我最终 'translating' XML 如下:

  1. 在文件夹.../android/res新建一个语言文件夹values-de (将 de 替换为您的语言代码)。

  2. 在语言文件夹中创建一个名为 google-services.xml 的文件。

  3. 插入xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <string name="gcm_defaultSenderId"><YOUR_SENDERID></string>
    </resources>
    

    之后我就可以构建版本了。

自从上次更新 Android Studio (1.5) 以来,我也遇到了这个问题。我通过将 Google 服务依赖项更新为 latest version.

来解决它

据此link,的确,

This issue should be fixed with 8.3.0 Google Play Services and 1.5.0-beta2 dependency.

希望这对您有所帮助! :)


EDIT 集成:实际上,虽然 gcm_defaultSenderId 字符串现在已正确生成(具有 translatable="false" 属性),但 google_app_idga_trackingID 例如,字符串不是。

对于那些仍然有问题的人,我得出的结论是我们必须等待 Google 人解决这个问题,同时通过添加到应用级别 build.gradle 来忽略错误文件

...
android {
    lintOptions {
        abortOnError false
    }
}
...

如果您want/need升级到更新版本:

  • lint(带有 build-inlint 的 androidstudio)
  • 构建工具
  • compileSdkVersion
  • gradle 插件
  • gradle
  • google-services(插件)
  • google-services 依赖项(例如 play-services-gcm)
  • (不幸的是)其他依赖项如果传递依赖于 google-services

你需要明智地选择所有这些部分的版本。因为这些都需要兼容在一起。不幸的是,没有兼容性table(我发现的唯一一个是一年多的,所以我没有link这里。如果有人知道请分享一个link)。

因此,解决方案是调查哪个版本的哪个部分阻止了其他任何内容。这可能是噩梦,所以很多建议是恢复到最后已知的功能配置。不过我们迟早会强制升级的。

我翻遍了各个部分的首页,没有找到版本信息,最后还是用test-and-try的方法解决了。

以下是对我有用的功能:

  • androidstudio 1.5
  • 构建工具 23.0.2
  • compileSdkVersion 23
  • gradle 插件 1.5.0
  • gradle 2.8
  • google 服务插件 1.5.0
  • google 服务依赖 8.3.0
  • 幸运的是,没有其他外部 GS 依赖项(显然所有内部模块都需要使用相同的版本)

在您的项目应用程序根目录(在 app/ 下)添加一个 lint.xml 文件,并在其中添加要忽略的缺失翻译:

<lint>
    <issue id="MissingTranslation">
        <ignore regexp="ga_trackingId"/>
        <ignore regexp="gcm_defaultSenderId"/>
        <ignore regexp="google_app_id"/>
    </issue>
</lint>

这些现在将被 lint 忽略 - 您可以配置要忽略的属性,并且您不必等待 google-services 团队更新他们没有想到的属性.

Lint-ing 仍会捕获所有其他错误,因此您仍然可以享受其他功能。