2015-12-03 49 views
0

所以我試圖讓一個應用程序在運行工作,但我得到這個錯誤:如何刪除aar文件中的jar文件?

Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK org/snmp4j/util/doc-files/org_snmp4j_util.gif File1: /Users/Kelson/Documents/AndroidStudioProjects/aspen-android/app/libs/snmp4j.jar File2: /Users/Kelson/Documents/AndroidStudioProjects/aspen-android/app/build/intermediates/exploded-aar/libscanmanager-release/jars/libs/snmp4j.jar File3: /Users/Kelson/Documents/AndroidStudioProjects/aspen-android/app/build/intermediates/exploded-aar/devicediscoverymanager-release/jars/libs/snmp4j.jar

我想是因爲snmp4j.jar已經在應用libs文件夾它拋出這個錯誤,但隨後在libscanmanager和devicediscoverymanager的aar文件也包含在snmp4j中並被再次編譯。我認爲解決方案是從aar文件中刪除snmp4j,但我無法弄清楚如何去做。每次我嘗試snmp4j都會在aar內重建。這是外部庫選項卡中文件的外觀。 link to pic

我認爲正在發生的是,每一次它的運行它重新編譯snmp4j.jar從內classes.jar org.snmp4j,所以每次我試圖刪除snmp4j.jar它只是被重建。手動刪除org.snmp4j似乎不起作用。那麼有沒有辦法刪除它或停止編譯?或者我必須去libscanmanager和devicediscoverymanager的來源,並重新使用它們之前在主應用程序庫?

或者這是完全錯誤的方法,我錯過了一些非常明顯的東西?

UPDATE

所以我想我發現了一個可能的軌道來解決它添加像這樣

compile(name: 'devicediscoverymanager-release', ext: 'aar') { 
    exclude module: 'snmp4j' 
} 

一個排除命令,但我不太知道確切的語法等等這也沒有奏效。我試過排除模塊,用snmp4j.jar,snmp4j,org.snmp4j等排除組。問題可能是這是依賴關係,並且據我所知snmp4j不是庫的依賴項,它只是正在建設。有沒有一種方法可以明確排除將jar包裝到apk中,並且jar包來自應用程序的外部庫?

更新2

所以根據這些傢伙: https://groups.google.com/forum/#!topic/adt-dev/g1AiJM7PeVs 它實際上不是我能夠從AAR文件中排除SNMP4J。看來,庫需要重建不包括SNMP4J

回答

0

我都面臨着同樣的問題,所以在你的android的應用程序部分的 文件的build.gradle只需添加的代碼塊它確實欺騙了我

packagingOptions { 
     exclude 'give file name which for which error is occuring' 

    } 
    for example- 

    packagingOptions { 
     exclude 'META-INF/ASL2.0' 

    } 
+0

我試着添加排除'snmp4j.jar'並排除'snmp4j',但那些不起作用,除非我的語法錯誤。 –

+0

@giant_raisens請確保你有正確的語法,並嘗試排除'罐子裏的文件的路徑' – Dhiraj