2013-02-26 52 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