【问题标题】:More than one file was found with OS independent path 'lib/armeabi-v7a/libfbjni.so'找到多个文件,其独立于操作系统的路径 \'lib/armeabi-v7a/libfbjni.so\'
【发布时间】:2022-11-11 05:09:25
【问题描述】:
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > More than one file was found with OS independent path 'lib/armeabi-v7a/libfbjni.so'. If you are using jniLibs and CMake IMPORTED targets, see https://developer.android.com/studio/preview/features#automatic_packaging_of_prebuilt_dependencies_used_by_cmake

在 app/build.gradle 文件中

packagingOptions {
  pickFirst 'lib/x86/libc++_shared.so'
  pickFirst 'lib/x86_64/libc++_shared.so'
  pickFirst 'lib/arm64-v8a/libc++_shared.so'
  pickFirst 'lib/armeabi-v7a/libc++_shared.so'

} 仍然报错....

试过了

In app/build.gradle file

    packagingOptions {
      pickFirst 'lib/x86/libfbjni.so'
      pickFirst 'lib/x86_64/libfbjni.so'
      pickFirst 'lib/arm64-v8a/libfbjni.so'
      pickFirst 'lib/armeabi-v7a/libfbjni.so'
   }

但它给出了以下错误 发现多个文件的操作系统独立路径为“lib/armeabi-v7a/libc++_shared.so”。

【问题讨论】:

  • Try this。这是一个普遍的问题

标签: android react-native build.gradle


【解决方案1】:

==旧解决方案==

当前 react-native 的修复

我们建议所有 React Native 用户将此修复应用到您的顶级 build.gradle 文件,如下所示:

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

buildscript {
    // ...
}


allprojects {
    repositories {
+       exclusiveContent {
+           // We get React Native's Android binaries exclusively through npm,
+           // from a local Maven repo inside node_modules/react-native/.
+           // (The use of exclusiveContent prevents looking elsewhere like Maven Central
+           // and potentially getting a wrong version.)
+           filter {
+               includeGroup "com.facebook.react"
+           }
+           forRepository {
+               maven {
+                   // NOTE: if you are in a monorepo, you may have "$rootDir/../../../node_modules/react-native/android"
+                   url "$rootDir/../node_modules/react-native/android"
+               }
+           }
+       }
        // ...
    }
}

此修复程序将应用一个 ExclusiveContent 解析规则,该规则将强制 React Native Android 库的解析,以使用 node_modules 中的那个。

将应用更新到 React Native v0.71.0 后,将不再需要此修复。

==新解决方案==

我们已经为所有主要版本的 react-native 准备了一个修补程序:

? 0.70.5:https://github.com/facebook/react-native/releases/tag/v0.70.5

?️ 0.69.7:https://github.com/facebook/react-native/releases/tag/v0.69.7

? 0.68.5:https://github.com/facebook/react-native/releases/tag/v0.68.5

?️ 0.67.5:https://github.com/facebook/react-native/releases/tag/v0.67.5

?️ 0.66.5:https://github.com/facebook/react-native/releases/tag/v0.66.5

?️ 0.65.3:https://github.com/facebook/react-native/releases/tag/v0.65.3

?️ 0.64.4:https://github.com/facebook/react-native/releases/tag/v0.64.4

?️ 0.63.5:https://github.com/facebook/react-native/releases/tag/v0.63.5

通过更新到这些补丁版本,您的 Android 版本应该会重新开始工作。

为此,在您的 package.json 中将 react-native 的版本更改为相关的新补丁(例如,如果您使用的是 0.64.3,请更改为 0.64.4)并运行 yarn install。无需进行其他更改,但您可能希望在尝试重新运行您的 Android 应用程序之前使用 cd android && ./gradlew clean 清理您的 android 工件。

来源:https://github.com/facebook/react-native/issues/35210

【讨论】:

  • 非常感谢,看来可以了。你能解释一下为什么现在会发生这种情况,因为我们没有改变我们的设置,并且在那天(我认为是昨天或前一天)它突然失败了。
  • 如果您像我一样使用旧版本的 react native(0.60.6),希望这将提供线索github.com/facebook/react-native/issues/35210
【解决方案2】:

在 allProjects-build.gradle-repositories 下添加以下代码。 它适用于我一直在从事的一个旧项目。

 exclusiveContent {
       filter {
           includeGroup "com.facebook.react"
       }
       forRepository {
           maven {
               // NOTE: if you are in a monorepo, you may have "$rootDir/../../../node_modules/react-native/android"
               url "$rootDir/../node_modules/react-native/android"
           }
       }
   }

【讨论】:

    【解决方案3】:

    如果您使用的是较旧的 react-native,请参阅下面的文章

    Fix for older react-native (< 0.63)

    上述修复仅适用于 gradle 6.2 及更高版本。较旧的 react-native 使用较旧的 gradle。

    您可以通过查看 /android/gradle/wrapper/gradle-wrapper.properties 文件来确定您的 gradle 版本。

    如果您使用的是使用 gradle 6.1 或更低版本的较旧版本的 react-native(例如 0.63 或更早版本),则必须使用不同的解决方法,因为 gradle 6.1 不支持 ExclusiveContent。

    将此添加到您的 android/build.gradle 文件的 allprojects 区域中。

    def REACT_NATIVE_VERSION = new File(['node', '--print',"JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"].execute(null, rootDir).text.trim())
    
    allprojects {
        configurations.all {
            resolutionStrategy {
                // Remove this override in 0.65+, as a proper fix is included in react-native itself.
                force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多