7

我已经将一个版本从 Phonegap (Cordova) 2.0 升级到 2.4 并且在开发中一切正常,直到我真正开始测试最终版本的 apk。在浪费了很多时间之后,我发现,由于某种原因,现在当我运行构建时,我的 proguard 配置以某种方式破坏了 phonegap 构建,这意味着当它运行时,永远不会调用 deviceready。构建时似乎没有错误,运行时也没有错误,据我所见,但我猜想在科尔多瓦 js 中有些东西在默默地失败,因为我没有在设备上收到编译/日志错误。

正如我所说,这仅在构建过程中运行 Proguard obfs 时。如果我关闭 Proguard,一切正常。我将所有代码恢复到 2.0 以确保这一切都很好,所以在此过程中的某个地方出现了一个似乎没有记录/或没有人击中的 stubble 更改(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 似乎没有任何亮点 - 一切看起来都很好......

有人有想法么???

4

2 回答 2

11

尝试将 proguard-project.txt 中的 Cordova“保留”设置替换为以下行,这应该维护所有 Cordova 类、字段和方法,包括公共和私有(从而重新启用 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
于 2013-03-11T16:07:21.877 回答
0

我猜,Phonegap 插件被排除在最终的 APK 之外。Cordova.js 可能甚至不存在给出错误。

于 2013-02-26T11:34:09.627 回答