问题
When i used the gradle to build and run the apk, i get the error below::::
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
回答1:
Cleaner solution is to explicitly tell Gradle that you know about the problem and accept any of these files. Depending on the architectures you support you may need only some of the. You can find details 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'
}
}
回答2:
I was able to fix this by adding the code below to my build.gradle
. It's kind of a hack; there should a more elegant fix, like not having to include the React Native version. Ideally React Native would resolve this. I opened an issue: https://github.com/facebook/react-native/issues/9454
import com.android.build.gradle.internal.pipeline.TransformTask
def deleteDuplicateJniFiles() {
def files = fileTree("${buildDir}/intermediates/exploded-aar/com.facebook.react/react-native/0.31.0/jni/") {
include "**/libgnustl_shared.so"
}
files.each { it.delete() }
}
tasks.withType(TransformTask) { pkgTask ->
pkgTask.doFirst { deleteDuplicateJniFiles() }
}
回答3:
Finally,i move one of the so file to assets,and load it manually before used
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);
This works not very well , although it fixes the DuplicateFileException bug . If anyone get the better way pls tell me . Thanks!^_^
来源:https://stackoverflow.com/questions/37200853/how-to-fix-the-libgnustl-shared-so-file-duplicated-which-in-third-party-sdks