2015-09-04 84 views
8

我在我的应用中实施了GCM(Google Cloud Messaging)。谷歌Play服务库已经自动生成了values.xml在我senderId是:由于GCM无法生成APK发布SenderId Android

<?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。我应该如何解决这个问题?

回答

6

我假设你正在使用Android Studio。

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

我尝试的第一件事是编辑“文件 - 设置 - 编辑器 - 检查 - Android Lint - 不完整翻译”严重性设置为其他错误。

那样做不是帮助!我仍然无法构建释放APK。

我结束了“翻译”的XML如下:

  1. 文件夹

    ... /安卓/ RES创建一个新的语言文件夹值德(替换用去你的语言码)。

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

  3. 插入XML文件:

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

    之后,我是能够建立的释放。

+1

这里提出了一个问题:https://code.google.com/p/analytics-issues/issues/detail?id=733。请明星,这是注意到和修复。 – Oliv

+0

你是英雄安德烈;非常感谢你做的这些! – Eenvincible

+0

如果您不介意使用Alpha通道,则问题是[自2.0.0-alpha3'](https://code.google.com/p/android/issues/detail?id=195824)[固定]。我可以用'2.0.0-alpha6'确认它WFM – yuval

0

你可能有这样的自动生成的代码,另一位:

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

获得来自谷歌云控制台有效的发件人ID,那么你可以从上面的代码,也是去除R.string.gcm_defaultSenderId资源文件中的gcm_defaultSenderId。

3

自从Android Studio(1.5)的最新更新以来,我也遇到过这个问题。我通过将Google服务依赖项更新为latest version来解决此问题。

根据这一link,的确,

这个问题应该固定8.3.0谷歌播放服务和1.5.0-β2依赖。

希望这会有所帮助!:)


编辑集成:实际上,虽然gcm_defaultSenderId字符串现在可以正确生成(与translatable="false"属性),google_app_idga_trackingID字符串,例如,都没有。

对于那些仍然有问题,我来到了,我们必须等待谷歌的家伙来解决这个问题,并通过向应用级build.gradle文件

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

如果忽略其间错误的结论你想/需要升级到较新的版本:

  • 皮棉(androidstudio与内置的皮棉)
  • 构建工具
  • compileSdkVersion
  • 插件的gradle
  • gradle这个
  • 谷歌的服务(插件)
  • 谷歌服务dedendencies(例如发挥服务-GCM)
  • (可惜的)其他相关性,如果是transitivelly依赖于谷歌的服务

你需要wiselly选择所有这些部分的版本一起。因为这些都需要一起兼容。不幸的是,没有兼容性表格(我发现的只有一年多了,所以我没有链接到这里,如果有人知道,请分享链接)。

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

我检查了每个部分的主页以查找任何版本信息,但最后我仍然通过测试 - 尝试方法解决它。

这里是什么对我来说是功能:

  • androidstudio 1.5
  • 构建工具23.0.2
  • compileSdkVersion 23
  • gradle这个插件1.5.0
  • gradle这个2.8
  • 谷歌服务插件1.5.0
  • 谷歌服务依赖关系8.3。0
  • 幸运,无其他对外GS依赖(显然所有内部组件需要使用同一版本)
15

在项目中应用程序的根添加一个lint.xml文件(在应用程序/)并添加缺少的翻译被忽略有:

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

这将现在皮棉被忽略 - 你可以配置要忽略的属性,你将不必等待来自谷歌的服务团队的更新特性,他们都没有想到的。

落针仍会捕获所有其他错误,所以您仍然可以享受其他功能。

+0

没有为我工作 – crubio

+2

作品描述完美。这似乎是对我来说最正确的解决方案。直截了当,而不是像其他一些答案一样的黑客攻击。提示:将lint.xml放入应用程序/文件夹中。 – nilsmagnus

+0

此外,它并没有为我工作:( – Thanos