android - 使用 Proguard 混淆 Cordova Android 应用程序似乎无能为力

标签 android cordova proguard obfuscation cordova-plugin-proguard

我是第一次测试 Proguard 的混淆功能。为此,我做了以下事情

  • 下载了 Cordova Hello World plugin
  • 通过将字符串 "This is top secret" 添加到它发出的问候消息来修改它
  • 创建了一个简单的 Cordova Hello World 项目 cordova create ...
  • 添加了 Cordova Proguard plugin
  • 将本地源的插件添加到此项目
  • 通过附加 proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-custom 修改了 platforms\android\project.properties 文件。文本文件
  • 构建 apk cordova build --release

proguard-custom.txt 文件我几乎没有动过。其内容如下所示

-keepclassmembers class * {@android.webkit.JavascriptInterface <methods>;}
#AddedThis 
-adaptresourcefilenames    **.json,**.gif,**.jpg 
-adaptresourcefilecontents **.json,META-INF/MANIFEST.MF

-keep class com.android.vending.licensing.ILicensingService
-keepattributes *Annotation*

-keepclassmembers enum * {
  public static **[] values();
  public static ** valueOf(java.lang.String);
}

-keepattributes InnerClasses
-keep class **.R
-keep class **.R$* {<fields>;}

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

-keep class org.apache.cordova.** { *; }
-keep public class * extends org.apache.cordova.CordovaPlugin

-keep class org.apache.cordova.CordovaBridge 
{org.apache.cordova.PluginManager pluginManager; }
-keep class org.apache.cordova.CordovaInterfaceImpl 
{org.apache.cordova.PluginManager pluginManager; }
-keep class org.apache.cordova.CordovaResourceApi
{org.apache.cordova.PluginManager pluginManager; }
-keep class org.apache.cordova.CordovaWebViewImpl 
{org.apache.cordova.PluginManager pluginManager; }
-keep class org.apache.cordova.ResumeCallback 
{org.apache.cordova.PluginManager pluginManager; }
-keep class org.apache.cordova.engine.SystemWebViewEngine 
{org.apache.cordova.PluginManager pluginManager; }

-keep class com.google.gson.internal.UnsafeAllocator { ** theUnsafe; }

-dontnote org.apache.harmony.xnet.provider.jsse.NativeCrypto
-dontnote sun.misc.Unsafe

-keep class com.worklight.androidgap.push.** { *; }
-keep class com.worklight.wlclient.push.** { *; }

-keep class com.google.** { *; }
-dontwarn com.google.common.**
-dontwarn com.google.ads.**

-optimizations 

!class/merging/vertical*,!class/merging/horizontal*,
!code/simplification/arithmetic,!field/*,!code/allocation/variable

-keep class net.sqlcipher.** { *; }
-dontwarn net.sqlcipher.**

-keep class org.codehaus.** { *; }
-keepattributes *Annotation*,EnclosingMethod

-keepclassmembers enum * {
 public static **[] values();
 public static ** valueOf(java.lang.String);
}

-assumenosideeffects class android.util.Log {
  public static *** d(...);
}

-dontwarn com.worklight.common.internal.WLTrusteerInternal*
-dontwarn com.worklight.jsonstore.**
-dontwarn org.codehaus.jackson.map.ext.*
-dontwarn com.worklight.androidgap.push.GCMIntentService
-dontwarn com.worklight.androidgap.plugin.WLInitializationPlugin

-dontwarn android.support.v4.**
-dontwarn android.net.SSLCertificateSocketFactory
-dontwarn android.net.http.*

Proguard 按预期执行所有 Action 。例如,我看到

Obfuscating...
Printing mapping to 
[buildpath\outputs\mapping\release\mapping.txt]...
Preverifying...
Writing output...
Preparing output jar 
[buildpath\intermediates\transforms\proguard\release\0.jar]
Copying resources from program jar 
[buildpath\intermediates\transforms\desugar\release\0.jar] 
(filtered)
Copying resources from program directory 
[buildpath\intermediates\transforms\desugar\release\1] 
(filtered)
Copying resources from program jar 
[buildpath\intermediates\transforms\mergeJavaRes\release\0.jar] 
(filtered)

并且 APK 已按预期生成。我通过这个 Java decompiler 运行了这个 APK并下载了输出。浏览到该下载中的 Hello.java,我找到了完整的原始源代码

package com.example.plugin;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;

public class Hello extends CordovaPlugin 
{
 public boolean execute(String str,JSONArray jSONArray, 
 CallbackContext callbackContext) 
 {
  if (!str.equals("greet")) return false;
  callbackContext.success("Hello, " + jSONArray.getString(0) + 
  " This is a secret!");
  return true;
 }
}

就好像 Proguard 经历了所有的 Action ,但后来什么都没有。我显然错过了这里的关键步骤,但我不清楚那可能是什么。如果有人能帮助我走上正轨,我将不胜感激。

最佳答案

proguard-custom.txt 文件中的这些行阻止混淆器混淆该文件:

-keep class org.apache.cordova.** { *; }
-keep public class * extends org.apache.cordova.CordovaPlugin

如果删除它们,您应该会看到文件变得模糊不清。然而,这可能会破坏您的应用程序,因为 Cordova 包含它们可能是有原因的(我对 Cordova 不是很熟悉)。

关于android - 使用 Proguard 混淆 Cordova Android 应用程序似乎无能为力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53799693/

相关文章:

安卓有时花屏

android - 如何在 Android 中保护调用 web 服务

android - 使用gradle和proguard构建android库时缺少Java资源文件

android - 辅助功能服务未在服务中列出?

android - Nexus 7 上的 CSS 媒体查询,显示分辨率在代码中不起作用

javascript - 使用滑动手势从一个页面移动到另一页面

javascript - Phonegap iOS 应用仅在最小化时请求权限

android - 在proguard Android中保留 Assets 文件夹

android - Retrofit 2 addQueryParam 替换

android - 选项卡 fragment 内的 gridview