2016-10-25 13 views
12

Przedtem wysłałem pytanie: 'No args constructor for class does not exist', but it does i otrzymałem odpowiedź, która zadziałała, gdy przetestowałem ją w trybie debugowania USB w moim telefonie za pomocą Android Studio. Jednak po uruchomieniu aplikacji w Google Play przestaje działać i powoduje ten sam błąd, który opisałem w tym pytaniu. Powtórzyłem dzisiaj test i to samo się dzieje.Google Play APK i Android Studio APK (debugowanie USB) zachowują się inaczej

celu wyjaśnienia, jestem testowania:

  • Dokładne samego kodu,
  • W dokładnie taki sam telefon
  • Running dokładnie ten sam Android w wersji
  • stosując dokładnie ten sam obraz

Czy jest jakiś powód, dla którego plik APK Google Play zachowałby się inaczej niż na APK Androida Studio? Czy może czegoś brakuje?

+0

Dlaczego idziesz z klasą statyczną dla serializacji i deserializacji: W swojej build.gradle to zrobić? –

+0

@misaochan edytując to samo pytanie i dodając nagrodę do tego pytania, wystarczy, aby powrócić na szczyt aktywnych pytań, zamiast zamieszczać nowe pytanie i linkować stare, ponieważ problem jest taki sam.Następnym razem pomyśl o tym! –

+0

czy stosujesz proguard do wydania kompilacji, ale nie do debugowania kompilacji? – CoderP

Odpowiedz

8

W zależności od konfiguracji build.gradle config, release wersje zazwyczaj uruchamiają się na Twoim kodzie ProGuard. debug wersje zazwyczaj nie uruchamiają takich narzędzi na kodzie.

Więc co mogło się stać, że ProGuard przebiegł twój kod, stwierdził, że MwVolleyApi$Page nie jest używany nigdzie i usunął go.

Aby przetestować tę teorię, Pana build.gradle wyłączyć minifyEnabled:

release { 
    minifyEnabled false 
    ... 
} 

następnie zbudować release-apk i przetestować go.

BTW, zawsze powinieneś przetestować apki wydawcze na swoim urządzeniu przed ich przesłaniem do Google Play, możesz je zainstalować poprzez adb install lub skopiować je na kartę SD i zainstalować z aplikacji Downloads w telefonie.

Jeśli to rzeczywiście problem został rozwiązany, można dodać reguły do ​​pliku proguard.cfg zapisać klasę Page przed usunięciem, coś jak:

-keep class fr.free.nrw.commons.upload.MwVolleyApi$Page {*;} 

Następnie można włączyć minifyEnabled powrotem na true i test ponownie

+0

'minifyEnabled false' naprawił problem, dziękuję! Sprawdzimy, czy wystarczy sama linia '-keep'. –

0

Myślę, że apk, który budujesz ze swojego studia Android, to wersja debugowania, która służy do debugowania podczas programowania. Plik apk, który jest opublikowany w Google Play Store, jest wersją aplikacji.

Można także zbudować wersję Release Studio Android i zobaczyć, że będzie dokładnie taka sama jak w Play Store.

1

Spróbuj zbudować kompilację debugowania za pomocą proguard i sprawdź, czy problem się powiela.

buildTypes { 
     all{ 
      // Place all proguard files 
      proguardFile 'proguard/proguard-rules.pro' 
      proguardFile getDefaultProguardFile('proguard-android.txt') 
      } 
} 
Powiązane problemy