2016-05-13 9 views
5

i hata aşağıda :::: NihayetÜçüncü taraf sdk'de çoğaltılan libgnustl_shared.so dosyası nasıl düzeltilir? i inşa etmek ve apk çalıştırmak için gradle kullanıldığında

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

biri, aynı libgnustl_shared.so dosya vardır benim projeye ReactAndroid eklerken, ben bu hata ipucu olsun bulabilirsiniz .. İşte –

+0

temiz olmayan kesmek çözümdür: https://stackoverflow.com/a/35660513/2850807 – UrbanMetro

cevap

2

, ben çok varlıklara dosyasını biri hareket almak ve elle önce kullanılan yüklemek

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

Bu, DuplicateFileException hatasını düzeltir, ancak çok iyi çalışmaz. Herhangi biri daha iyi bir şekilde olursa lütfen bana söyleyin. Teşekkür!^_^

+0

.so dosyalarından birini yeniden paketlemeye gerek kalmadan bundan daha iyi bir yol buldunuz mu? – matt

+1

Bunu daha ayrıntılı olarak açıklayabilir misiniz? Ne demek istediğini anlamıyorum "bu dosyalardan birini varlıklara taşıyorum". –

2

Aşağıdaki kodu build.gradle benim için ekleyerek düzeltemedim. Bu bir kesmek; React Native sürümünü içermemek gibi daha zarif bir düzeltme yapılmalıdır. İdeal React Native bunu çözecektir. 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() } 
} 
+0

Bunun libgnustl_shared.so dosyasını kaldırmanın iyi bir yolu olduğunu düşünmüyorum. –

+1

Ayrıca projemde master gradle dosyasında flatDir {dirs 'libs'} ifadesinin yer alması da önemliydi. yukarıda.) –

1

Temizleyici solüsyon açıkça size sorun hakkında biliyorum Gradle anlatmak ve bu dosyaların hiçbirini kabul etmektir: Ben bir sorun açıldı. Desteklediğiniz mimarilere bağlı olarak, sadece bazılarına ihtiyacınız olabilir. Sen ayrıntıları in documentation benim modüllerin

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' 
    } 
} 
İlgili konular