【问题标题】:java.lang.NoClassDefFoundError after proguard obfuscationproguard混淆后的java.lang.NoClassDefFoundError
【发布时间】:2013-05-31 06:54:31
【问题描述】:

从 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

我完全排除了该类与所有成员的混淆,我看到它列在 seed.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 结束?

【问题讨论】:

  • 试试-keep public class * extends package_of_SherlockFragmentActivity.SherlockFragmentActivity
  • 这是一个较旧的项目并且您最近更新了您的 Android 开发者工具?试试如果禁用 ProGuard 会发生什么。

标签: java android eclipse proguard eclipse-adt


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以以这种方式加载的类: Intent intent = new Intent(this, ItemListActivity.class);没有被proguard检测到?让我快速尝试并回复您。
  • 不,那行不通。当我查看 proguard cfg 时,我已经保留了该类: -keep public class * extends com.actionbarsherlock.app.SherlockFragmentActivity{*;} 正如我所说,它列在种子中,意味着它没有被处理。在此之前还有 3 个活动通过 Intent 以相同的方式加载。
  • 如果您已经配置了它,为什么不在您的问题中写下它?提供的 ProGuard 配置不包含这样的内容。
  • 从我的问题中引用“我完全排除了该类与所有成员的混淆,我看到它列在 seed.txt 中。”啊,对不起,我现在看到了……它不是整个 proguard 文件,它只是我展示如何排除类依赖项的一部分。
【解决方案2】:

android-support-v4.jar 没有在项目属性的 Java 构建路径下设置为导出:

右击项目 -> 属性 -> Java 构建路径 -> 排序和导出 -> 勾选“Android 私有库”复选框(android-support-v4.jar 位于库选项卡上的节点)

【讨论】:

  • 这是您的问题解决方案吗?如果其他人有同样的问题,这个答案将无济于事,因为它是不可理解的。
  • 它对我有用:我的一个类是从 android.support.v4.app.FragmentActivity 扩展的,在检查“Android 私有库”之后。它有效。
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 2023-04-03
  • 2019-07-20
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多