2013-02-26 22 views
7

Uaktualniłem kompilację z Phonegap (Cordova) od 2.0 do 2.4 i wszystko działało dobrze w dev, dopóki nie przystąpiłem do testowania apk wersji finalnej. To, co znajduję, po długim marnowaniu czasu, to to, że z jakiegoś powodu teraz, kiedy uruchamiam kompilację, moja konfiguracja proguard łamie konstrukcję phonegapa w jakiś sposób, co oznacza, że ​​gdy działa, to deviceready nigdy nie jest wywoływana. Wydaje się, że nie ma błędów podczas budowania, ani uruchamiania i nic tak daleko, jak widzę, ale domyślam się, że coś jest po cichu w cordova js, ponieważ nie dostaję błędów kompilacji/dziennika na urządzeniu.Phonegap 2.4 Android Proguard config

Tak jak mówię, jest to TYLKO po uruchomieniu obfs Proguard w procesie kompilacji. Jeśli wyłączyłem Proguard, wszystko działa dobrze. Przywróciłem cały kod z powrotem do wersji 2.0, aby się upewnić i wszystko jest w porządku, więc gdzieś po drodze nastąpiła straszliwa zmiana, która pozornie nie jest udokumentowana/lub nikt jeszcze nie trafił (2.4 pojawił się dopiero kilka tygodni temu - na czas pisania 26 lutego 2013).

My Proguard config zawiera następujące elementy dla PhoneGap (a także niektóre inne standardowe config)

-keep public class * extends com.phonegap.api.Plugin 
-keep public class * extends org.apache.cordova.api.Plugin 
-keep public class org.apache.cordova.DroidGap 
-keep public class org.apache.cordova.** 
-keep public class org.apache.** 
-dontwarn android.webkit.* 
-dontwarn org.apache.** 

decompiling DEX i nie wydaje się, aby rzucić żadnego światła - wszystko wygląda ok na pierwszy rzut oka ...

Ktoś ma jakieś pomysły ???

+0

losowo niezwiązane pytanie: dlaczego używasz DroidGap i nie CordovaWebView? –

+1

To może być droga do zbadania @Edward ... Moja aplikacja rozszerza DriodGap - tak jak było od przed 2.0 (myślę). The proguard config -keep public org.apache.cordova mam z trauling innych postów dotyczących problemów z proguard i phonegap. Aplikacja uruchamia się poprawnie i ładuje poprawne adresy URL, ale tylko wydaje się mieć problem z ładowaniem js. –

Odpowiedz

11

spróbować wymienić Cordova „keep” ustawienia w PROGUARD-project.txt z poniższą linię, która powinna utrzymać wszystkie Cordova klas, pól i metod, zarówno (deviceready a zatem ponownie włączyć) publiczne i prywatne:

-keep klasa org.apache.cordova. ** {*; }

Następnie wystarczy dołączyć swoją klasę (prawdopodobnie rozszerzenie CordovaPlugin, nie tylko Plugin) np.

pre-v3:

-keep public class * extends org.apache.cordova.api.CordovaPlugin 

v3 +: (?)

-keep public class * extends org.apache.cordova.CordovaPlugin 
+0

Jesteś mistrzem! Nie przyszło mi to do tej pory. – AppleGrew

0

Wtyczki Phonegap są wykluczane z ostatecznego pliku APK, jak sądzę. Cordova.js prawdopodobnie nawet nie istnieje, aby podać błędy.

+0

js jest zawarty ręcznie i jest hostowany na serwerze ... Mam zamiar rozpocząć przechodzenie przez kod JS, aby dokładnie określić, czy/gdzie nie działa. Być może masz rację, że być może brakuje wtyczki/zmienia się jej nazwę, gdy działa zaciemnianie i JS nie działa po cichu. Mam to również przez Weinre, ale znowu nie zgłaszam błędów js parsowania/runtime. –