防止课堂萎缩

时间:2013-06-27 11:09:09

标签: android obfuscation proguard shrink

在我的Android应用中,我有一个DbHelper类扩展OrmLiteSqliteOpenHelper,扩展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使用来自支持包的某些东西,并且来自suppord包的progordarded apk类错过了。在proguard-project.txt我有支持包的配置和Action Bar Sherlock

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }

如何正确配置ProGuard以保持支持包不收缩?

1 个答案:

答案 0 :(得分:1)

非常感谢@gunar的帮助。我解决了这个问题,原因是我将proguard-project.txt中的支持包作为-libraryjars而不是-injars。因此它的内容没有打包到生成的apk中,dalvik无法在运行时初始化DbHelper,它使用来自支持包的类