天天看點

android apk拷貝檔案,Android Studio:編譯時在APK META-INF/DEPENDENCIES中複制的重複檔案

Scott Barta..

39

在Android Gradle建構中,不允許在輸出中多次包含具有相同路徑的相同檔案.在您的建構中,有兩個META-INF/DEPENDENCIES檔案來自不同的地方.由于您的應用程式根本不需要此檔案,是以最簡單的方法是告訴建構系統完全忽略它,這就是該exclude指令的作用.

還有一個pickFirst指令告訴建構系統保留其中一個副本; 在Android Gradle插件0.7.0中有一些細節:"在打包APK期間重複檔案".

Gradle中的Android版本對重複檔案非常嚴格,這會讓生活變得困難.如果您多次包含相同的Java類,則會出現類似的問題,其中您會收到"多個dex檔案定義"錯誤(請參閱多個dex檔案定義Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat)以擷取典型示例).

其他建構系統更寬松.例如,如果你在類路徑中多次包含同一個類,那麼它在Java中是典型的,它看到的第一個副本是使用的副本; 之後重複的内容将被忽略.這在大多數情況下更容易處理,但它有幾個問題.最大的問題是,如果檔案的多個不同版本在您不知情的情況下蔓延到建構中,則可能存在細微的錯誤 - 很難弄清楚正在發生的事情.當你搞清楚時,你通常可以通過調整包含事物的順序來解決它,以確定你想要的那個使它成為最終輸出,但是在非常複雜的建構中,這可能很難實作,

出于這個原因,Gradle的理念是不依賴于事物的排序來确定解決重複的遊戲中的"赢家",并且它迫使開發人員明确所有依賴關系.Android在Gradle之上實作其建構系統遵循了這一理念.