2015-09-04 17 views
8

Zaimplementowałem GCM (Google Cloud Messaging) w mojej aplikacji. Biblioteka Google Play Services ma automatycznie wygenerowany values.xml w którym mój senderId jest:Nie można wygenerować wersji APK z powodu GCM SenderId Android

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

Problem polega na tym, że nie mam innego lokum, a Lint podczas App wydaniu daje mi błąd: Error:(3) Error: "gcm_defaultSenderId" is not translated in "fr" (French) [MissingTranslation]

ponieważ jest generowany automatycznie Nie mogę ustawić translable = false. Jak powinienem to naprawić?

Odpowiedz

6

Zakładam, że używasz Androida Studio.

Wystąpił ten sam problem z Androidem Studio 1.4.

Pierwszą rzeczą, którą próbowałem, było zmodyfikowanie ustawienia "Plik - Ustawienia - Edytor - Kontrola - Android Lint - Niekompletne tłumaczenie" na coś innego niż "Błąd".

To pomogło nie! Nadal nie udało mi się zbudować wersji APK.

skończyło się 'tłumaczenia' XML w następujący sposób:

  1. w folderze .../android/res utworzyć nowy folder języka Wartości-de (zastąpić de ze swoim języku kod).

  2. utwórz plik o nazwie google-services.xml w folderze językowym.

  3. wstawić do pliku xml:

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

    Potem udało mi się zbudować uwolnienie.

+1

Wystąpił błąd związany z tym: https://code.google.com/p/analytics-issues/issues/detail?id=733. Oznacz to gwiazdką, aby została zauważona i naprawiona. – Oliv

+0

Jesteś bohaterem Andre; bardzo za to dziękuję! – Eenvincible

+0

Problem jest [poprawiony od '2.0.0-alpha3'] (https://code.google.com/p/android/issues/detail?id=195824), jeśli nie masz nic przeciwko używaniu kanału alfa. Mogę to potwierdzić WFM z '2.0.0-alpha6' – yuval

0

prawdopodobnie będzie mieć inny fragment kodu wygenerowany automatycznie tak:

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

uzyskać poprawny identyfikator nadawcy z konsoli chmurze google następnie można usunąć R.string.gcm_defaultSenderId z powyższym kodem, a także gcm_defaultSenderId z pliku zasobów.

3

Od czasu ostatniej aktualizacji Androida Studio (1.5) miałem ten problem również. Rozwiązałem go, aktualizując zależności usług Google do latest version.

Według tego link rzeczywiście

Kwestia ta powinna być ustalona z 8.3.0 Usługi Google Play i zależność 1.5.0-beta2.

Mam nadzieję, że to pomoże!:)


EDIT Integracja: faktycznie, natomiast ciąg gcm_defaultSenderId jest teraz generowane prawidłowo (z atrybutem translatable="false") google_app_id i ga_trackingID sznurki, na przykład, nie są.

Dla tych nadal występują problemy, doszedłem do wniosku, że musimy czekać na Google faceci, aby rozwiązać ten problem i zignorować błąd w międzyczasie dodając do poziomu aplikacji build.gradle plik

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

If chcesz/potrzebujesz uaktualnienie do nowszej wersji:

  • szarpie (androidstudio z wbudowanym szarpie)
  • narzędzia budowania
  • compileSdkVersion
  • wtyczki Gradle
  • Gradle
  • google-usług (wtyczki)
  • google-dedendencies usługi (np Play-usługi-GCM)
  • (niestety) inne zależności, czy są transitivelly zależny do usługi Google

trzeba wybrać wiselly wersje wszystkich tych elementów razem. Ponieważ wszystkie te muszą być kompatybilne razem. Niestety, nie ma tabeli zgodności (jedyne, co znalazłem, ma więcej lat, więc nie łączę go tutaj .Jeśli ktokolwiek o tym wie, proszę udostępnij link).

Rozwiązaniem jest zatem zbadanie, którego fragmentu blokuje cokolwiek innego. Które mogą być koszmarem, więc wiele rad, aby powrócić do ostatniej znanej konfiguracji funkcjonalnej. Ale wcześniej czy później będziemy zmuszeni do aktualizacji.

Sprawdziłem strony startowe każdej części, aby znaleźć dowolne informacje o wersji, ale w końcu nadal rozwiązuję je metodą testu i próby.

Oto, co działa dla mnie:

  • androidstudio 1,5
  • narzędzia kompilacji 23.0.2
  • compileSdkVersion 23
  • Gradle plugin 1.5.0
  • Gradle 2,8
  • google services plugin 1.5.0
  • Zależności od usług Google 8.3.0
  • szczęście, żadne inne zewnętrzne GS Zależności (oczywiście wszystkie moduły wewnętrzne musi użyć tej samej wersji)
15

Dodaj plik lint.xml w katalogu głównym aplikacji projektu (w app /) i dodać brakujące tłumaczenia będą ignorowane tam:

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

nich zostanie zignorowane przez szarpie - można określić, które właściwości ignorować, a nie będziesz musiał czekać na aktualizacje z zespołu Google-usług dla właściwości, że nie pomyśleli o .

Linting nadal będzie łapał wszystkie inne błędy, dzięki czemu można nadal korzystać z innych funkcji.

+0

Nie działa dla mnie – crubio

+2

Działa idealnie zgodnie z opisem. To wydaje mi się najbardziej poprawnym rozwiązaniem dla mnie. Prosto do punktu, a nie hack, jak niektóre inne odpowiedzi tutaj. Wskazówka: umieść plik lint.xml w aplikacji/folderze. – nilsmagnus

+0

Nie zadziałało też dla mnie :( – Thanos

Powiązane problemy