Proguard cordova应用程序

Proguard cordova应用程序,cordova,proguard,cordova-plugin-proguard,Cordova,Proguard,Cordova Plugin Proguard,安全审计团队要求我们在我们的一个应用程序上对Cordova Java代码运行proguard 我们通过对构建进行以下修改来启用proguard: 要使用ant构建项目,请运行android更新项目-p-t# --子项目在平台/android/文件夹上。创建build.xml并更新project.properties 在project.properties中取消注释#proguard.config=${sdk.dir}/tools/proguard/proguard android.txt:pro

安全审计团队要求我们在我们的一个应用程序上对Cordova Java代码运行proguard

我们通过对构建进行以下修改来启用proguard:

  • 要使用ant构建项目,请运行
    android更新项目-p-t#
    --子项目
    在平台/android/文件夹上。创建
    build.xml
    并更新
    project.properties

  • project.properties
    中取消注释
    #proguard.config=${sdk.dir}/tools/proguard/proguard android.txt:proguard project.txt

  • 在proguard-project.txt中添加

    -dontwarn javax.naming.*

    -keepattributes封闭方法

  • 和取消注释

    -keepclassmembers class fqcn.of.javascript.interface.for.webview {
    public *;
    }
    
  • 通过
    ant-release
    编译,并期望不会得到错误
  • 执行此操作后,在运行时出现以下错误:

    E/AndroidRuntime( 2195): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.somecompany.someapp/com.somecompany.someapp.someapp}: java.lang.RuntimeException: Failed to create webview.
    E/AndroidRuntime( 2195): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
    E/AndroidRuntime( 2195): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
    E/AndroidRuntime( 2195): at android.app.ActivityThread.access$800(ActivityThread.java:135)
    E/AndroidRuntime( 2195): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    E/AndroidRuntime( 2195): at android.os.Handler.dispatchMessage(Handler.java:102)
    E/AndroidRuntime( 2195): at android.os.Looper.loop(Looper.java:136)
    E/AndroidRuntime( 2195): at android.app.ActivityThread.main(ActivityThread.java:5017)
    E/AndroidRuntime( 2195): at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime( 2195): at java.lang.reflect.Method.invoke(Method.java:515)
    E/AndroidRuntime( 2195): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    E/AndroidRuntime( 2195): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    E/AndroidRuntime( 2195): at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime( 2195): Caused by: java.lang.RuntimeException: Failed to create webview.
    E/AndroidRuntime( 2195): at org.a.a.w.a(Unknown Source)
    E/AndroidRuntime( 2195): at org.a.a.e.e(Unknown Source)
    E/AndroidRuntime( 2195): at org.a.a.e.d(Unknown Source)
    E/AndroidRuntime( 2195): at org.a.a.e.a(Unknown Source)
    E/AndroidRuntime( 2195): at org.a.a.e.a(Unknown Source)
    E/AndroidRuntime( 2195): at com.somecompany.someapp.someapp.onCreate(Unknown Source)
    E/AndroidRuntime( 2195): at android.app.Activity.performCreate(Activity.java:5231)
    E/AndroidRuntime( 2195): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    E/AndroidRuntime( 2195): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
    E/AndroidRuntime( 2195): ... 11 more
    E/AndroidRuntime( 2195): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, class org.a.a.p]
    E/AndroidRuntime( 2195): at java.lang.Class.getConstructorOrMethod(Class.java:472)
    E/AndroidRuntime( 2195): at java.lang.Class.getConstructor(Class.java:446)
    E/AndroidRuntime( 2195): ... 20 more
    
    E/AndroidRuntime(2195):java.lang.RuntimeException:无法启动活动组件信息{com.somecompany.someapp/com.somecompany.someapp.someapp}:java.lang.RuntimeException:无法创建webview。
    E/AndroidRuntime(2195):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
    E/AndroidRuntime(2195):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
    E/AndroidRuntime(2195):位于android.app.ActivityThread.access$800(ActivityThread.java:135)
    E/AndroidRuntime(2195):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    E/AndroidRuntime(2195):位于android.os.Handler.dispatchMessage(Handler.java:102)
    E/AndroidRuntime(2195):位于android.os.Looper.loop(Looper.java:136)
    E/AndroidRuntime(2195):位于android.app.ActivityThread.main(ActivityThread.java:5017)
    E/AndroidRuntime(2195):位于java.lang.reflect.Method.Invokenactive(本机方法)
    E/AndroidRuntime(2195):位于java.lang.reflect.Method.invoke(Method.java:515)
    E/AndroidRuntime(2195):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    E/AndroidRuntime(2195):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    E/AndroidRuntime(2195):位于dalvik.system.NativeStart.main(本机方法)
    E/AndroidRuntime(2195):原因:java.lang.RuntimeException:未能创建webview。
    E/AndroidRuntime(2195):org.a.a.w.a(未知来源)
    E/AndroidRuntime(2195):org.a.a.E.E(未知来源)
    E/AndroidRuntime(2195):org.a.a.E.d(未知来源)
    E/AndroidRuntime(2195):org.a.a.E.a(未知来源)
    E/AndroidRuntime(2195):org.a.a.E.a(未知来源)
    E/AndroidRuntime(2195):位于com.somecompany.someapp.someapp.onCreate(未知来源)
    E/AndroidRuntime(2195):位于android.app.Activity.performCreate(Activity.java:5231)
    E/AndroidRuntime(2195):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    E/AndroidRuntime(2195):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
    E/AndroidRuntime(2195):。。。还有11个
    E/AndroidRuntime(2195):由以下原因引起:java.lang.NoSuchMethodException:[class android.content.Context,class org.a.a.p]
    E/AndroidRuntime(2195):在java.lang.Class.getConstructorOrMethod(Class.java:472)中
    E/AndroidRuntime(2195):位于java.lang.Class.getConstructor(Class.java:446)
    E/AndroidRuntime(2195):。。。20多
    
    我们只需关闭proguard,应用程序就会编译并运行良好

    以下是我们的问题: 我们如何在编译时出现这个问题?
    B.如何更改构建配置以修复此错误并使用Proguard混淆代码?

    为避免混淆cordova类,请添加
    -保留公共类org.apache.cordova.*{*;}

    在proguard project.txt中。

    我建议修改您的构建脚本,使用
    -printconfiguration
    -printmapping
    选项运行proguard(请参阅),这样您就可以了解哪些类实际上已损坏,以及是否实际使用了您期望的配置(我的第一次打赌不是这样).使用cordova plugin proguard此文件是什么?它位于何处?