2014-12-15 2 views
2

Я пытаюсь заставить DexGuard работать над проектом, над которым я работаю. У меня уже есть ProGuard с proguard-rules.pro. После запуска релиз DexGuard построил аварию приложения сJava NoClassDefFoundError с DexGuard и spongycastle

FATAL EXCEPTION: main 
Process: com.project.fr, PID: 7937 
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/spongycastle/jce/provider/BouncyCastleProvider; 
    at com.project.CustomApplication.<clinit>(:44) 
    at java.lang.reflect.Constructor.newInstance(Native Method) 
    at java.lang.Class.newInstance(Class.java:1572) 
    at android.app.Instrumentation.newApplication(Instrumentation.java:994) 
    at android.app.Instrumentation.newApplication(Instrumentation.java:979) 
    at android.app.LoadedApk.makeApplication(LoadedApk.java:558) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4491) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:144) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1339) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5221) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.spongycastle.jce.provider.BouncyCastleProvider" on path: DexPathList[[zip file "/data/app/com.project.fr-1/base.apk"],nativeLibraryDirectories=[/data/app/com.project.fr-1/lib/arm, /vendor/lib, /system/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
    ... 16 more 
    Suppressed: java.lang.ClassNotFoundException: org.spongycastle.jce.provider.BouncyCastleProvider 
     at java.lang.Class.classForName(Native Method) 
     at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
     at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
     ... 17 more 
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

Когда я построить приложение с ProGuard и то же proguard-rules.pro он работает нормально.

В rules.pro У меня включен этот параметр.

## Spongycastle 
-keep class org.spongycastle.** 
-dontwarn org.spongycastle.jce.provider.X509LDAPCertStoreSpi 
-dontwarn org.spongycastle.x509.util.LDAPStoreHelper 

Какие согласно размещать Using Spongycastle with Proguard должны быть те исправить.

Весь proguard-rules.pro можно найти здесь link to gist

ответ

6

Для полноты: мы разработали по электронной почте о том, что проблема была вызвана опцией „minifyEnabled правда“ в build.gradle , что несовместимо с плагином DexGuard. Конечно, DexGuard уже обеспечивает сокращение, оптимизацию и обфускацию.

(Я разработчик ProGuard и DexGuard)

+0

вот что вы получите за не читая инструкцию каждый раз :) ТНХ для быстрой поддержки Эрик – Aegis