L'équipe d'audit de sécurité nous a demandé d'exécuter proguard sur le code Java Cordova sur l'une de nos applications.Application proguard cordova
Nous avons mis proguard en faisant les modifications suivantes à notre construction:
Pour utiliser projet de construction de fourmis, exécutez
android update project -p . -t # --subprojects
sur la plate-forme/android/dossier. Cela créebuild.xml
et met à jourproject.properties
. Décommenter#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
dansproject.properties
.dans proguard-project.txt ajouter
-dontwarn javax.naming.**
-keepattributes EnclosingMethod
et uncomment
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
- Compile par
ant release
et s'attendre à ne pas avoir d'erreur.
Après que nous avons fait que nous avons eu l'erreur suivante au moment de l'exécution:
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
Nous pouvons simplement désactiver proguard et l'application va compiler et exécuter bien.
Voici nos questions: A. Comment pouvons-nous faire apparaître ce problème au moment de la compilation? B. Comment pouvons-nous changer notre configuration de construction pour corriger cette erreur et obscurcir le code avec Proguard?
Je vous suggère de modifier votre script de build pour exécuter proguard avec les options '-printconfiguration' et' -printmapping' (voir https://www.guardsquare.com/fr/proguard/manual/usage) afin de savoir quelles classes sont réellement corrompus et si la configuration que vous attendez est effectivement utilisée (mon premier pari n'est pas). – SergGr