2017-09-04 91 views
1

我有使用com.android.ide.common.process.ProcessException:多DEX文件定義(...)BuildConfig

compile   "com.library1:library1:2.0.4" 
compile    "com.library2:library2:3.0.0" 

而這兩個LIBRARY1原始項目:2.0.4和library2: 3.0.0共享相同的命名空間(具有相同的包名稱)。有沒有乾淨的方式,讓他們在一個項目中共存,而不喜歡編譯時錯誤:

Execution failed for task ':app:transformClassesWithDexForDebug'. 
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define (...)/BuildConfig; 
+0

你爲什麼試圖使用同一個庫的不同版本? –

+0

沒錯,但遷移必須在一段 – hhg

+0

更長的時間來完成。然後棄用,在新版本的方法,取出舊的依賴 –

回答

1

你需要的是Gradle Shadow plugin。我沒有使用它,所以我不能給你更具體的建議,而只能指向docs,但我認爲這是一條路,因爲有些同事告訴我他們已經成功地將它用於類似的情況。

注意,這個過程重命名庫包的名字之一,你將最終獲得類似於:

  • LIBRARY1 - > com.library1
  • library2 - > com.newlibrary1(而不是com.library1也是)

因此,如果您重命名第二個庫,在進程結束時(在刪除舊庫之後),您必須禁用第二個庫的重命名並執行「Find in文件「來更改對重命名的packag的所有引用Ë;或者永遠啓用重命名。對我而言,第一選擇將是最好的選擇。

另請參閱此問題Repackaging .jar-s in Android .aar library,但我不確定它是否已過時。

+0

你也可以從依賴 –

+0

@ cricket_007是的,在其他情況下,這將是一個解決方案排除組/工件ID,但我明白,他願意遷移從一個版本到另一個逐漸顯現。 –

+0

就像Android SDK一樣,爲什麼不把它標記爲已棄用? –

相關問題