当我使用gradle构建并运行apk时,我得到以下错误::::
Error:Execution failed for task ':app:transformNative_libsWithMergeJniLibsForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK lib/armeabi-v7a/libgnustl_shared.so
File1:
app/build/intermediates/exploded-aar/com.facebook.react/react-native/0.20.1/jni
File2:
app/build/intermediates/exploded-aar/app/videosdk/unspecified/jni
答案 0 :(得分:6)
清洁解决方案是明确告诉Gradle您知道该问题并接受任何这些文件。根据您支持的体系结构,您可能只需要一些。您可以找到详细信息in documentation
android {
// some stuff
packagingOptions {
pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
pickFirst 'lib/arm64-v8a/libgnustl_shared.so'
pickFirst 'lib/x86_64/libgnustl_shared.so'
pickFirst 'lib/x86/libgnustl_shared.so'
}
}
答案 1 :(得分:4)
我可以通过将以下代码添加到 ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(R.layout.togle);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
来解决此问题。这是一种黑客行为;应该有一个更优雅的修复,就像不必包含React Native版本一样。理想情况下,React Native会解决这个问题。我提出了一个问题:https://github.com/facebook/react-native/issues/9454
build.gradle
答案 2 :(得分:3)
最后,我将其中一个so文件移动到资源,并在使用之前手动加载
String path = getApplication().getFilesDir().toString() + "/armeabi-v7a/libgnustl_shared.so";
if (!FileUtils.isFileExit(path)) //move so from assets to another dir
FileUtils.initSOFileFromAssetsFile(getApplication());
System.load(path);
虽然它修复了DuplicateFileException错误,但效果不是很好。 如果有人得到更好的方式请告诉我。 谢谢!^ _ ^