2013-02-26 51 views
7

我已經從Phonegap(科爾多瓦)2.0版本升級到2.4,並且一切工作都很好,直到我真正來測試最終版本的apk。我發現,在浪費了很多時間之後,出於某種原因,現在當我運行構建時,我的proguard配置以某種方式打破了phonegap構建,這意味着它在運行時不會調用deviceready。似乎沒有錯誤時,建設,也沒有運行,沒有什麼,只要我能看到,但我猜一些默默無聞的cordova js失敗,因爲我沒有得到設備上的編譯/日誌錯誤。Phonegap 2.4 Android Proguard配置

正如我所說,這是隻有在編譯過程中運行Proguard obfs。如果我關閉Proguard它一切正常。我將所有的代碼恢復到了2.0,這一切都很好,所以在這個過程中一直存在着一個看起來沒有記錄的或者沒有人打過的stuble變化(2.4幾個星期前才發佈 - at寫作時間2013年2月26日)。

我ProGuard配置文件中包含了PhoneGap的以下(以及一些其他的標準配置)

-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.** 

和反編譯的DEX似乎並沒有拋出任何光線 - 一切看起來不錯一目瞭然......

任何人有任何想法?

+0

隨機不相關的問題:你爲什麼要使用DroidGap而不是CordovaWebView? – 2013-02-26 11:22:19

+1

這可能是調查@ Edward的一個途徑...我的應用程序正在擴展DriodGap - 因爲它早在2.0之前就已經存在了(我認爲)。 proguard配置-keep public org.apache.cordova我已經從其他文章中排除了有關proguard和phonegap的問題。該應用程序啓動罰款和加載正確的網址,但似乎只有加載js時有問題。 – 2013-02-26 11:51:55

回答

11

嘗試更換科爾多瓦「保持」設置在您的ProGuard-project.txt與下面的行,這應該對所有科爾多瓦類,字段和方法,公共和私人(因此重新啓用deviceready):

-keep class org.apache.cordova。** {*; }

然後,你只需要包括你的類(大概延長CordovaPlugin,而不僅僅是插件),例如

v3之前:

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

V3 +:(?)

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

你是冠軍!直到現在我都沒有想到。 – AppleGrew 2013-07-05 19:21:39

0

Phonegap插件被排除在最後的APK我猜。 Cordova.js可能甚至不存在錯誤。

+0

js是手動包含的,它託管在服務器上......我即將開始瀏覽JS代碼以確定它是否失敗。你可能是對的,也許是一個插件丟失/重命名時,混淆運行和JS失敗默默。我也通過Weinre運行,但是又一次沒有報告任何分析/運行時js錯誤。 – 2013-02-26 11:53:52