java - 使用 proguard 后,应用程序因 com.facebook.FacebookContentProvider 的 java.lang.NoClassDefFoundError 崩溃

标签 java android proguard dexprotector

我的应用程序有 facebook 登录和 facebook 分享。我已经按照 facebook android SDK 文档中的说明配置了我的 list 文件。

应用程序在发布和 Debug模式下正常工作。

在我使用“minifyEnabled true”创建发布 APK 后,应用程序在启动时崩溃并显示以下日志:

java.lang.RuntimeException: Unable to get provider com.facebook.FacebookContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookContentProvider" on path: DexPathList[[zip file "/data/app/com.pocketium.trollmonkey-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at android.app.ActivityThread.installProvider(ActivityThread.java:5087)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4679)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4619)
at android.app.ActivityThread.access$1500(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1378)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookContentProvider" on path: DexPathList[[zip file "/data/app/com.pocketium.trollmonkey-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.app.ActivityThread.installProvider(ActivityThread.java:5072)
... 11 more
Suppressed: java.lang.ClassNotFoundException: com.facebook.FacebookContentProvider
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 13 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我尝试禁用收缩和优化并添加保留选项以保留 facebook 类,但应用程序仍然崩溃。我是安卓新手。在谷歌中搜索了很多,但找不到解决方案。

2015 年 12 月 1 日更新

我尝试在 Linux 中启用 proguard 创建发布 APK。当我在我的 linux 机器上创建 apk 时没有问题。但是我在我的 windows 机器上创建的 apks 以及 mac 在启动时崩溃了。在 linux 环境中进行构建时,我没有更改任何代码。

PS:我尝试了 Dex 保护器并混淆了我在禁用混淆器的情况下创建的发布 apk。 dexprotector 创建的 APK 运行正常。

最佳答案

对我来说,将 gradle 插件更新到 1.5.0 并重建解决了这个问题:

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        ...
    }
}

我的facebook-sdk版本是4.8.1

Gradle 版本是 2.7。可以在 gradle-wrapper.properties 文件中找到

关于java - 使用 proguard 后,应用程序因 com.facebook.FacebookContentProvider 的 java.lang.NoClassDefFoundError 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972558/

相关文章:

java - 如何更新 Recyclerview 中的数据?

android - 如何将自定义按钮添加到 Material 日期范围选择器android?

android - MVP:管理 Activity 和 fragment 的最佳实践

android - ProGuard 的 -whyareyoukeeping 在 Android Studio 中的输出在哪里?

java - 使用 StepVerifier 验证是否至少已经过了一段时间?

java - 错误: [Dagger/MissingBinding] error message doesn't make sense

java - 在 Java 中处理 String 数组元素

java - 在 Android Studio 中运行 YouTube Activity 时出错

java - Proguard 将所有混淆的类移动到一个包中

java - 我怎样才能对 ProGuard 进行良好的混淆处理?