由于 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 如下:
在文件夹.../android/res新建一个语言文件夹values-de (将 de 替换为您的语言代码)。
在语言文件夹中创建一个名为 google-services.xml 的文件。
插入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_id
和 ga_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 仍会捕获所有其他错误,因此您仍然可以享受其他功能。
我在我的应用程序中实施了 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 如下:
在文件夹.../android/res新建一个语言文件夹values-de (将 de 替换为您的语言代码)。
在语言文件夹中创建一个名为 google-services.xml 的文件。
插入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_id
和 ga_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 仍会捕获所有其他错误,因此您仍然可以享受其他功能。