在proguard混淆之后的java.lang.NoClassDefFoundError

时间:2013-05-31 06:54:32

标签: java android eclipse proguard eclipse-adt

从eclipse导出签名包后,应用程序在调用其中一个活动时开始崩溃。

05-30 23:05:43.814: E/AndroidRuntime(11578): FATAL EXCEPTION: main
05-30 23:05:43.814: E/AndroidRuntime(11578): java.lang.NoClassDefFoundError: com.encryptomatic.alockbin.ItemListActivity

我完全将该类与所有成员的混淆排除在外,我看到它在seeds.txt中列出。

与其他活动的区别仅在于此扩展了SherlockFragmentActivity。 我完全使用以下方法排除了依赖关系:

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

这里有什么问题?如何检查我的班级是否真的以apk结束?

2 个答案:

答案 0 :(得分:1)

快速回答是:ProGuard无法检测到您的代码使用了类com.encryptomatic.alockbin.ItemListActivity,因此已将其删除。如果动态加载或以不同的方式加载,就会发生这种情况。

因此,如果您使用ProGuard,您只需将提及的类作为类添加到“keep”:

 -keep class com.encryptomatic.alockbin.ItemListActivity { public *; } 

然后重新构建APK并尝试它。测试应用的所有功能,因为很可能还有其他类需要配置才能保留。如果您已经确定所有类别,也请检查ProGuard警告,因为它们通常包含可能明智的其他类别。

答案 1 :(得分:0)

android-support-v4.jar未设置为在项目属性中的Java Build Path下导出:

右键点击Project - >属性 - > Java构建路径 - >订单和出口 - >选中复选框“Android私有库”(android-support-v4.jar驻留在“库”选项卡上的节点)