java.lang.NoClassDefFoundError:失败的解决方案:Lcom/facebook/R $样式
问题描述:
我试图将Facebook Android SDK(4.25.0)集成到我的应用程序中。如果我在Android Studio中使用Gradle构建,一切正常。
如果我与我的AOSP(Android开放源代码项目)源代码集成,它不起作用。没有编译错误。但是当我打电话
FacebookSdk.sdkInitialize(this.getApplicationContext());
//if I didn't call this method, it gave me another exception said
'The SDK has not been initialized, make sure to call
FacebookSdk.sdkInitialize() first.'
我有以下异常:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/facebook/R$style;
at com.facebook.FacebookSdk.<clinit>(FacebookSdk.java:84)
我的MK文件看起来像:
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res
LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/gridlayout/res
LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/design/res
LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/cardview/res
LOCAL_STATIC_JAVA_AAR_LIBRARIES := facebook-android-sdk
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
facebook-android-sdk:libs/facebook-android-sdk-4.25.1.aar \
bolts-android:libs/bolts-android-1.4.0.jar
什么建议吗?提前致谢。
答
我大部分时间都会遇到这个错误,我将第三方库添加到AOSP应用程序构建中。通常的作用如下:
1)将你的.aar“转换”为一个.jar(解压缩它,将classes.jar重命名为facebook-android-sdk-4.25.1.jar,将res文件夹复制到某处您可以链接到)
2)以下内容添加到您的.mk文件:
LOCAL_STATIC_JAVA_LIBRARIES += facebook-android
...
LOCAL_AAPT_FLAGS := --auto-add-overlay
LOCAL_AAPT_FLAGS := --extra-packages com.facebook
...
LOCAL_RESOURCE_DIR += /path/to/facebook-android-sdk-RES/
...
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += facebook-android:/path/to/the/facebook-android-sdk-4.25.1.jar
3)添加所有dependcies给build(程序兼容性,网格布局,customtabs等的链接的Facebook -sdk you posting shows。)
我不知道你是否可以跳过第一步,因为它取决于你的Android版本(Link to the commit)。我在旧版本LOCAL_STATIC_JAVA_AAR_LIBRARIES
不存在(但是如果你仍然使用它,你不会得到一个错误)。
但是,您的错误信息Failed resolution of: Lcom/facebook/R$style
表明,这也是你的情况。
答
我发现这个问题的另一种解决方案:
LOCAL_STATIC_JAVA_AAR_LIBRARIES := facebook-android-sdk
LOCAL_AAPT_FLAGS :=\
--auto-add-overlay \
--extra-packages com.facebook
它的工作就像一个魅力。
谢谢,
它表明异常来自何处。 – user3034559