从输入中找到路径“lib/arm64-v8a/libc++_shared.so”的 2 个文件...-react native

问题描述 投票:0回答:5

我正在尝试在react-native中启用ffmpeg-kit-react-native包。 example中给出的示例命令成功执行。但我想使用

libwebp
将 gif 文件转换为 webp,该文件位于名为 video
package
下。按照指示。我必须启用 package 才能使用一些库。

2.2.1 在 Android 上启用包 编辑 android/build.gradle 文件并在 ext.ffmpegKitPackage 变量中添加包名称。

ext {
   ffmpegKitPackage = "<package name>"
}

所以我在

node_module/ffmpeg-kit-react-native/android/build.gradle

中添加了一行
android {
  compileSdkVersion 30

  defaultConfig {
    minSdkVersion safeExtGet('ffmpegKitPackage', 'https').contains("-lts") ? 16 : 24
    targetSdkVersion 30
    versionCode 451
    versionName "4.5.1"
  }

  buildTypes {
    release {
      minifyEnabled false
    }
  }
  lintOptions {
    disable 'GradleCompatible'
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  rootProject.ext.ffmpegKitPackage = "video" // Added this line here 

}

错误:

* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction
   > 2 files found with path 'lib/arm64-v8a/libc++_shared.so' from inputs:
      - C:\Users\ADMIN\.gradle\caches\transforms-3\7403ebe5571a2ce5a6a5fc9876af4814\transformed\jetified-react-native-0.66.4\jni
      - C:\Users\ADMIN\.gradle\caches\transforms-3\4be54e44fe38656741a8345504588323\transformed\jetified-ffmpeg-kit-video-4.5.1-1\jni
     If you are using jniLibs and CMake IMPORTED targets, see
     https://developer.android.com/r/tools/jniLibs-vs-imported-targets

我已经尝试过 ./gradlew clean 但问题仍然存在。 如何修复这个错误?谢谢

java android react-native gradle ffmpeg
5个回答
48
投票

将此添加到您的

node_module/ffmpeg-kit-react-native/android/build.gradle

android{
  packagingOptions {
      pickFirst 'lib/x86/libc++_shared.so'
      pickFirst 'lib/x86_64/libc++_shared.so'
      pickFirst 'lib/armeabi-v7a/libc++_shared.so'
      pickFirst 'lib/arm64-v8a/libc++_shared.so'
  }
  rootProject.ext.ffmpegKitPackage = "video"
}

ffmpeg-kit-react-native 已经在这里讨论过这个错误。 https://github.com/tanersener/ffmpeg-kit/wiki/Tips#2-depending-another-android-library-containing-libc_sharedso


45
投票

我正在使用 react native 0.68.2,我的问题已通过应用以下更改得到解决。

编辑

android/build.gradle
并强制所有模块使用与您的项目相同的react-native版本。


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())

    configurations.all {
        resolutionStrategy {
            force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION
        }
    }
}

您可以查看这个以获取更多信息


36
投票

您需要在 build.gradle(app) 中添加以下内容:

android {
    //2 files found for path lib/arm64-v8a/libc++_shared.so. This version of the Android Gradle Plugin chooses the f
    packagingOptions {
        pickFirst 'lib/x86/libc++_shared.so'
        pickFirst 'lib/x86_64/libc++_shared.so'
        pickFirst 'lib/armeabi-v7a/libc++_shared.so'
        pickFirst 'lib/arm64-v8a/libc++_shared.so'
    }

这对我有用。在反应0.68.2中。还有 0.69.x.


6
投票
android{
  packagingOptions {
      pickFirst 'lib/x86/libc++_shared.so'
      pickFirst 'lib/x86_64/libc++_shared.so'
      pickFirst 'lib/armeabi-v7a/libc++_shared.so'
      pickFirst 'lib/arm64-v8a/libc++_shared.so'
  }
  rootProject.ext.ffmpegKitPackage = "video"
}

//如果上面不起作用,请尝试下面的代码

sourceSets.main {
    jniLibs.srcDir 'libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}

0
投票

我们在将 expo 集成到具有许多依赖项的现有 React-Native 应用程序时遇到了这个问题。解决方案是遵循打包选项更改并将其应用到所有子项目,如下所示:

subprojects {
    afterEvaluate( { project ->
        if (project.getPlugins().hasPlugin('android') ||
                project.getPlugins().hasPlugin('android-library')) {
            project.configure(project.android) {
                packagingOptions {
                    pickFirst 'lib/x86/libc++_shared.so'
                    pickFirst 'lib/x86_64/libc++_shared.so'
                    pickFirst 'lib/armeabi-v7a/libc++_shared.so'
                    pickFirst 'lib/arm64-v8a/libc++_shared.so'
                }
            }
        }
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.