我的应用有facebook登录和facebook分享。我已经按照facebook android SDK文档中的说明配置了我的清单文件。
App在发布和调试模式下正常运行。
使用'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类,但应用程序仍然崩溃。我是android的新手。在谷歌搜索了很多,但找不到解决方案。
更新2015年12月1日
我尝试在linux中启用proguard创建发布APK。在我的linux机器上创建apk时没有问题。但是我在Windows机器上创建的apks以及mac在启动时崩溃了。在linux环境中构建时我没有更改任何代码。
PS:我尝试过使用proguard禁用创建的Dex protector和模糊释放apk。 APK由dexprotector创建,工作正常。
答案 0 :(得分:2)
我将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 文件
答案 1 :(得分:1)
确保在项目根目录中的build.gradle中添加gradle插件依赖项(并使用像Nikita所说的1.5),而不是在android-client文件夹中的build.gradle中。这解决了我的问题。
答案 2 :(得分:0)
-keep class com.facebook.** { *; }
在proguard配置中包含上面的行。
tldr;
如果你只想包括" -ignorewarnings"作为proguard唯一的config指令,然后不要使用它。
如果你想学习proguard / android然后谷歌一些示例配置文件和谷歌一些关于如何保留android / proguard中的库项目的界面defs和公共类的用法。
答案 3 :(得分:0)
就我而言,将proguard-android-optimize.txt
更改为proguard-android.txt
确实可行。
尝试:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
ext.set("dexprotector.configFile", "${projectDir}/dexprotector.xml")
}
}
我不确定为什么,但是很久以前dexprotector支持告诉我更改它,因为使用r8和proguard优化文件存在一个已知的错误,因此我尝试并成功了。没有更多详细信息,对不起:(