2015-09-04 77 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