我已经将一个版本从Phonegap(Cordova)2.0升级到2.4,并且一切都在开发中工作正常,直到我真正来测试最终版本apk.在经过大量浪费之后,我发现的是,由于某些原因,现在当我运行构建时,我的proguard配置以某种方式打破了phonegap构建,这意味着当它运行时,从未调用过设备.在构建时似乎没有错误,也没有任何错误,只要我能看到,但我猜测有些东西在cordova js中默默地失败,因为我没有在设备上获得编译/日志错误.
正如我所说,这只是在构建过程中运行Proguard obfs时.如果我关闭Proguard它一切正常.我将我的所有代码恢复到2.0以确保这一切都很好,所以在某个地方出现了一个看似没有记录/或者还没有人发现过的简单变化(2.4仅在几周前出现 – 在写作时间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似乎没有任何亮点 – 一切看起来都一目了然……
有人有主意吗???
解决方法
尝试使用以下行替换proguard-project.txt中的Cordova“keep”设置,该行应该维护所有Cordova类,字段和方法,包括公共和私有(以及因此重新启用设备):
-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