Facebook SDK Android构建错误

42

我正在尝试构建我的 React Native 项目,并使用 react-native-fbsdk

然而,我遇到了这些错误:

/home/luiz/MYP/app/node_modules/react-native-fbsdk/android/build/intermediates/res/merged/release/values-v24/values-v24.xml:3: AAPT: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.

/home/luiz/MYP/app/node_modules/react-native-fbsdk/android/build/intermediates/res/merged/release/values-v24/values-v24.xml:4: AAPT: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Colored'.

/home/luiz/MYP/app/node_modules/react-native-fbsdk/android/build/intermediates/res/merged/release/values-v24/values-v24.xml:3: error: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.

/home/luiz/MYP/app/node_modules/react-native-fbsdk/android/build/intermediates/res/merged/release/values-v24/values-v24.xml:4: error: Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Colored'.


:react-native-fbsdk:processReleaseResources FAILED

我的当前操作系统是Linux Elementary 0.4.1 Loki x64。

我正在使用react-native@0.37.0,因此需要使用react-native-fbsdk@0.4.0。

我已经尝试过:

  • cd android && ./gradlew clean

  • 删除项目并重新运行npm install

  • 在Android API的23和24中尝试。


3
我和你一样遇到了这个问题,我在 macOS Sierra 上测试了相同的 API。 - Lucas Z.
1
突然我也遇到了这个问题。RN 0.41.2和RN-FBSDK 0.5。 - atlanteh
7个回答

51

显然,Facebook已经更新了他们的SDK,昨天发布了最新版(4.23.0),但此SDK可能存在漏洞或其他问题。

您可以通过更改node_modules\react-native-fbsdk\android\build.gradle文件来解决这个问题:

compile('com.facebook.android:facebook-android-sdk:4.+')

收件人:

compile('com.facebook.android:facebook-android-sdk:4.22.1')

我不是Gradle专家,所以如果有人知道更好的方法来强制从父级gradle.build中设置版本,请在评论中提出,我会更新答案。

**编辑**

@Andreyco成功解决了这个问题,而不需要改变node_modules。你可以向下滚动查看他的答案或单击此处

另外,如@JuanJoseTugores所述,react-native-fbsdk中有一个待批准的拉取请求,因此您可以检查错误的进度并在解决时得到通知。

**另一个更新**
Facebook关闭了有关此问题为他们开放的错误报告,称他们修复了sdk。因此,现在可以删除所有绕过方法。

显然,Facebook仍未解决此问题。我们刚刚升级到RN 0.44和FB 0.6.0


13
编辑node_modules中的任何内容是最糟糕的想法。 - Andreyco
3
显然你是正确的。这只是我找到的一种解决问题的临时方法。这就是为什么我问是否有更好的gradle理解的人可以在不在node_modules中的父级build.gradle中解决它。 - atlanteh
我通过在android/app/build.gradle中将 compileSdkVersion设置为24,成功解决了这个问题。顺便问一下,你能够编译旧版的 react-native-fbsdk(例如0.5.0)吗?似乎无论如何都会拉取最新的Android SDK。 - Andreyco
1
在你的 android/app/build.gradle 文件中更新了 compileSdkVersion 之后,请确保你已经安装了相应的 SDK(Android Studio > Configure > SDK Manager > API Level)。 - max23_
1
@Andreyco 不好意思,我现在无法编译0.5.0版本了 :/。你可以fork这个项目并应用这些更改。 - Juan Jose Tugores
显示剩余7条评论

26

在深入研究gradle之后,我想出了以下解决方案。

关键是排除由react-native-fbsdk所需的facebook-android-sdk并在facebook-android-sdk模块中引入所需的(可工作的)版本 - 最好不要修改node_modules文件夹中的任何内容。

幸运的是,gradle提供了这个功能。

// android/app/build.gradle

dependencies {
    compile(project(':react-native-fbsdk')){
      exclude(group: 'com.facebook.android', module: 'facebook-android-sdk')
    }
    compile "com.facebook.android:facebook-android-sdk:4.22.1"
}

我正在使用react-native@0.37.0,因此需要使用react-native-fbsdk@0.4.0。我将编辑问题。 - Luiz
3
由于某些原因,这对我来说无法正常工作。 - Ramon Canales
跟随 @atlanteh 的答案,它一定会起作用,直到发布补丁为止,调整 node_modules 是可以的。我的答案展示了更通用的解决方案,适用于类似的问题。 - Andreyco
1
@RamonJamOnCanales 我遇到了同样的问题,但是通过在build.gradle中使用以下代码解决了它:configurations.all { resolutionStrategy { force 'com.facebook.android:facebook-android-sdk:4.22.1' .... } }https://dev59.com/hFcP5IYBdhLWcg3wkKzU#44205756 - Belal mazlom
谢谢...那个答案救了我的一天。 - Allloush
在react-native v0.51.0和RN-fbsdk v0.6.3上,我遇到了问题:评估项目“:app”时出现问题。
在类型为org.gradle.api.Project的“:react-native-fbsdk”项目中找不到方法exclude()的参数[{group=com.facebook.android,module=facebook-android-sdk}]。
- Quilty Kim

11

我成功解决了这个问题,而不需要修改 node_modules/... 文件。我将我们的 react-native-fbsdk 版本升级到 0.6.0,然后将以下内容添加到我们应用程序的 build.gradle 文件中,将 facebook-android-sdk 固定在版本 4.22.1

project(':react-native-fbsdk') {
    configurations.all {
        resolutionStrategy {
            force 'com.facebook.android:facebook-android-sdk:4.22.1'
        }
    }
}

configurations.all {
    resolutionStrategy {
        force 'com.facebook.android:facebook-android-sdk:4.22.1'
        ...
    }
}

编辑:我们正在使用以下工具进行构建:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    ...
}

升级是一种可行的解决方案。然而,有时并不适用。 - Luiz
1
只需要以下这段代码: project(':react-native-fbsdk') { configurations.all { resolutionStrategy { force 'com.facebook.android:facebook-android-sdk:4.22.1' } } } - paynd
1
@paynd 对于一些用户来说可能有效,然而在我的应用中,它仍然试图将新的SDK作为依赖项使用,因此我需要在react-native-fbsdk项目和我的应用程序配置中都进行强制操作。 - rtcherry

5

对我来说这个问题已经解决

android/build.gradle 文件中进行修改

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 27
                buildToolsVersion '27.0.3'
            }
        }
    }
}

5
我刚遇到了这个错误。首先,RN Facebook SDK v.0.6.0只适用于react-native >= 0.44.0,因此您必须在package.json中更新您的依赖项为react-native: ^0.44.0。然后去Android的build.gradle文件并进行以下更改:compileSdkVersion 25compile "com.android.support:appcompat-v7:25.0.0"

4

对于那些想要在RN 0.42中使用的人,这是一个与React版本稳定的Facebook SDK 4.18.0 "com.facebook.android:facebook-android-sdk:4.18.0",它是在发布react-native-fbsdk@0.5.0时发布的。否则,你可能会遇到以下问题:https://developers.facebook.com/bugs/1712442065726889/

此外,如果你发现很难强制Facebook SDK成为你需要的版本,请尝试以下方法:

android/app/build.gradle

...

dependencies {
    compile project(':react-native-fbsdk')
    compile project(':react-native-vector-icons')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
    compile "com.facebook.android:facebook-android-sdk:[4.18.0)"
}

android/build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

project(':react-native-fbsdk') {
  configurations.all {
    resolutionStrategy {
      force 'com.facebook.android:facebook-android-sdk:4.18.0'
    }
  }
}

...

allprojects {
    repositories {
        ...
        configurations.all {
            resolutionStrategy {
              force 'com.facebook.android:facebook-android-sdk:4.18.0'
            }
        }
    }
}

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接