在我的 android 应用程序中,我有一个DbHelper
类 extends OrmLiteSqliteOpenHelper
which extends SQLiteOpenHelper
。在项目上运行ProGuard成功完成,但稍后在运行时出现错误:java.lang.NoClassDefFoundError: com.example.myapp.mypackage.DbHelper
我被加入-keep class com.example.myapp.mypackage.** { *; }
以proguard-project.txt
排除我DbHelper
的缩小,但这无济于事。
此外,我尝试添加-dontshrink
标志,仅用于测试,以禁用收缩步骤,但这也无济于事。
任何建议我做错了什么以及尝试什么?谢谢
UPD:完整的堆栈跟踪
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: com.example.myapp.mypackage.DbHelper
at com.example.myapp.App.onCreate(App.java:78)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1000)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4391)
at android.app.ActivityThread.access$1300(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1294)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
UPD 2: 对于 OrmLite,我正在使用此配置
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
UPD 3:
我尝试classes.dex
使用工具从 proguarded apk中取消索引,dex2jar
而我的 DbHelper 恰好存在于它应该在的位置
UPD 4: 不,这不是测试应用程序,这是通常的 android 应用程序
UPD 5:
是的,DbHelper
使用来自支持包的某种东西,并且在来自支持包的 proguarded apk 类中被遗漏了。在proguard-project.txt
我有这个支持包和动作栏 Sherlock 的配置
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
如何正确配置 ProGuard 以防止支持包缩小?