摘抄原文https://mp.weixin.qq.com/s/6UZhaI9cILJiPGYHkXd73gapi
No1:微信
Implementation架構
compile 指令被標註爲過期方法,而新增了兩個依賴指令,一個是implement 和api,api和之前的compile沒區別app
implementation形象的解釋一下:好比library裏依賴了某個庫,主工程依賴了這個library,可是不能使用那個依賴庫裏的內容。也就是說implementation把庫隱藏到library內部了,不給外面的其餘工程使用,很好的避免了jar衝突的問題eclipse
No2:ide
等同於provided,只在編譯時有效,不會參與打包,不會包含到apk文件中。能夠用來解決重複導入庫的衝突gradle
No3:ui
自定義插件https://blog.csdn.net/eclipsexys/article/details/50973205有點難google
No4:spa
一樣的配置下的版本衝突,會自動使用最新版;而不一樣配置下的版本衝突,gradle同步時會直接報錯。可以使用exclude、force解決衝突
No5:
若是本地同時存在兩個不一樣的jar包,或者本地已有jar包,再去遠程依賴不一樣版本的jar包,就會報錯。能夠將其中的一個採用compileOnly替換implementation
No6:
依賴本地aar包:aar包存放的路徑聲明和依賴引入是分開的
repositories { flatDir { dir "../${project.name}/libs" } } dependencies { implementation(name: 'aar名字', ext: 'aar') }
若是aar包有不少,也能夠同樣象jar包統一添加一個文件夾下的全部包:
def dir = new File('app/libs') dir.traverse( nameFilter: ~/.*\.aar/ ) { file -> def name = file.getName().replace('.aar', '') implementation(name: name, ext: 'aar') }
當其餘 Module引用此library的module時,也須要在他的build.gradle中加入以下配置,不然會提示找不到文件:
repositories { flatDir { dirs 'libs', '../包含aar包的模塊名/libs' } }
推薦在項目的根build.gradle中統一添加,將全部包含aar包的模塊名列出,這樣不管是本Module或其餘Module都不須要單獨配置路徑了:
allprojects { repositories { jcenter() google() flatDir { dirs "../moudle-A/libs,../moudle-B/libs,../moudle-C/libs".split(",") } } }
No7:
jniLibs目錄是so文件默認的放置目錄
No8:
全部的x86/x86_64/armeabi-v7a/arm64-v8a設備都支持armeabi架構的so文件。因此爲了減少包體積,爲了減少 apk 體積,能夠只保留 armeabi 一個文件夾。但若是你想引入多個平臺的,那麼須要保持 so 文件的數量一致,就是說 armeabi 文件下的每一個so文件都要在armeabi-v7a下找到對應的so文件,但這樣apk包的體積就會增大。
No9:
若是aar包中的資源文件重複了
packagingOptions { exclude 'META:-INF/LICENSE.txt' }
exclude包含重複文件
No10:
若是aar包的清單文件和咱們的app清單文件屬性衝突時:用tools:replace="屬性名"解決。
歡迎關注個人微信公衆號:安卓圈