2016-09-20 5 views
0

私はAndroidでライブラリプロジェクトを作成しています。 私はプロガードを有効にしたいが、私は、次のクラッシュを取得:私はいくつかを見つけAndroid proguard with volley:ClassNotFoundException:クラス "com.android.volley.VolleyLog"が見つかりませんでした

-keep class com.android.volley.** { *; } 
-keep interface com.android.volley.** { *; } 
-keepclassmembers class com.android.volley.VolleyLog { *; } 
-keep class org.apache.commons.logging.** { *; } 

:私は次のように構成されたproguard-rules.proファイルを持っている私のライブラリプロジェクトで

Process: com.mysdk.myapplication, PID: 15629 
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/volley/VolleyLog; 
    at com.mysdk.sdk.api.b.a(Unknown Source) 
    at com.mysdk.sdk.api.mysdk.startmysdk(Unknown Source) 
    at com.mysdk.myapplication.App.onCreate(Unknown Source) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1026) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5099) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1464) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:168) 
    at android.app.ActivityThread.main(ActivityThread.java:5885) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:819) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:709) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.volley.VolleyLog" on path: DexPathList[[zip file "/data/app/com.mysdk.myapplication-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mysdk.myapplication-1/lib/arm64, /vendor/lib64, /system/lib64]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
    at com.mysdk.sdk.api.b.a(Unknown Source) 
    at com.mysdk.sdk.api.mysdk.startmysdk(Unknown Source) 
    at com.mysdk.myapplication.App.onCreate(Unknown Source) 
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1026) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5099) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:150) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1464) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:168) 
    at android.app.ActivityThread.main(ActivityThread.java:5885) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:819) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:709) 
Suppressed: java.lang.ClassNotFoundException: com.android.volley.VolleyLog 
    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) 
    ... 14 more 
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 

をWeb上のソリューション(私のプロガードファイルにApacheの行を追加するなど)は動作しませんでした。 提案がありますか?私は何が欠けていますか?

ありがとうございました。

答えて

1

命令

-keepclassmembers class com.android.volley.VolleyLog { *; } 

は、クラスメンバー(メソッド、フィールドなど)を維持するためには、ProGuardに指示しますが、それでも、それはそれはAABA」のようなものに名前を変更することができることを意味し、実際のクラスの名前を難読化することができますAPKではProGuardのは、クラスの名前を維持するために

-keep class com.android.volley.VolleyLog { *; } 

com.android.volley.VolleyLogは、APKに含まれていない場合は、その後にルールを変更されているかどうかを確認するためにClassySharkのようなツールを使用してください。

0

Androidスタジオのほとんどのインスタント実行機能は、クラス名が異なるこの問題をいくつか作成します。メインアプリケーションクラスが見つかりません... 私はこれらの問題に何度も直面しましたが、クリーン、リビルドは私の問題を解決しませんでした。私がオフにするとすぐに実行すると、私のアプリは、このランタイムクラッシュの代わりに正常に動作し始めたまたはアプリケーションの起動時にクラッシュ

ちょうどこれを行う.. チェックファイル - >設定 - >ビルド、実行、インスタント実行 を有効にし、有効にする場合は無効にする、有効にする場合は無効にする

関連する問題