proguard 混淆后的 java.lang.NoClassDefFoundError

标签 java android eclipse proguard eclipse-adt

从 eclipse 导出签名包后,当调用其中一项 Activity 时,应用程序开始崩溃。

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 中。

与其他 Activity 的唯一区别是该 Activity 扩展了 SherlockFragmentActivity。 我使用以下方法完全排除了依赖项:

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

这里可能出了什么问题?如何检查我的类(class)是否真的以 apk 结束?

最佳答案

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

因此,如果您使用 ProGuard,您应该简单地将提到的类添加为“keep”类:

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

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

关于proguard 混淆后的 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16851424/

相关文章:

java - 可用于将所有项目相关信息聚合到一处的工具

java - 将带有配置文件的应用程序分发给其他用户

Java - HtmlUnit - 无法将 HTML 保存到文件(在某些情况下)

java - 如何查看 Umbrella 异常的完整堆栈跟踪(或根本原因)?

android - 更新 salesforce Hybrid cordova 应用程序

android - 显示 map View 时如何将默认位置设置为我的位置

java - Android - 每 X 小时解锁一个按钮

android - 是否可以将 kotlin 中的高阶函数映射到字符串

java - 使用 Jenkins 进行集成测试

java.lang.IllegalArgumentException : plexus.container.default:无效的模块名称: 'default'不是Java标识符