Cordova android 5.1.1 APK混淆与proguard混淆

时间:2016-06-23 14:43:28

标签: android cordova android-proguard

使用dex2jar和jdgui2等工具可以很容易地检查APK的内容。

我们正在尝试在我们的Cordova项目中使用Proguard来保护"一些包含我们想要保密的信息的类(主要是解密我们试图为客户保护的一些内容的密钥)。

我们无法做对。该应用程序崩溃,或者它没有被混淆。

我们已添加到build.gradle:

buildTypes {
   release {
      signingConfig signingConfigs.release
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
           }
}

我们的proguard.pro包含:

-keep class !com.smartmobilesoftware.** ( *; }

smartmobilesoftware是一个inAppPurchases插件。

在那个包中我们修改了几个类,没有proguard就可以很好地工作。

我发现以下情况" Proguard支持缺失":https://issues.apache.org/jira/browse/CB-9269

Joe Bowser声称如下:"好吧,你不应该将ProGuard与Cordova一起使用,或者至少没有充分的理由使用它,因为你不能将它与minifyEnabled一起使用,这实际上是ProGuard正常工作的原因。由于Cordova在整个地方使用Reflection,这是在没有proguard-rules.pro文件的情况下炸毁Cordova的好方法。"

我们试图通过告诉proguard除了com.smartmobilesoftware中的所有类(-keep class!com.smartmobilesoftware。**(*;})

之外,所有类都应保持完整,以避免这个问题。

我不确定这是否是我们代码的问题(但代码在没有proguard的情况下工作正常),插件或者proguard本身。

我们没有看到任何有意义的错误。

我们在使用Cordova 2.2.0构建之前发布了应用程序,它使用了ANT和proguard以及另一个插件,它运行良好。所以我们想知道Cordove是否在proguard方面有所改变。

任何人都可以对这个问题有所了解吗?

3 个答案:

答案 0 :(得分:3)

看起来包com.smartmobilesoftware中的代码实现了Cordova插件。在这种情况下,您需要至少保留几个类,否则Cordova将无法在运行时正确找到它们(对于最近的Cordova版本):

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

答案 1 :(得分:2)

由于主要活动,Cordova应用程序将在混淆后崩溃,并且cordova类将变得混淆。因此,在运行时无法创建webview,应用程序将崩溃。

To resolve this you have to add :

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

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

答案 2 :(得分:2)

当今有一个不错的cordova插件

https://github.com/greybax/cordova-plugin-proguard

这对我来说是开箱即用的,尽管我必须添加此行以防止构建错误:

-dontwarn com.google.android.gms.**