android 依賴只編譯不打包到apk中
阿新 • • 發佈:2019-01-22
幾種依賴方式
具體每個什麼意思,大家谷歌一下就知道了,這裡不在陳述
區別和使用
implementation和api是取代之前的compile的,其中api和compile是一樣的效果,implementation有所不同,通過implementation依賴的庫只能自己庫本身訪問,舉個例子,A依賴B,B依賴C,如果B依賴C是使用的implementation依賴,那麼在A中是訪問不到C中的方法的,如果需要訪問,請使用api或compile依賴
開發中的注意事項
在實際開發中有些依賴在debug的時候需要參與編譯並使用,而打包的時候不想打包到apk中
1 怎樣檢視是否打進apk中了
Stetho是Facebook推出的一款使用Chrome來除錯Android Application的工具,就拿這個庫來實驗吧,首先採取正常的依賴方式打包apk,然後將apk拖進studio中,然後雙擊classes.dex
可以看到Facebook的包名,然後庫的大小為200多k,實際開發中打包的時候基本是不需要的,所以能少200k就少點吧
2 解決方法
- 在gradle裡面同時使用releaseCompileOnly和debugCompile即可
- 在程式碼中需要進行debug模式判斷,只有debug模式才會初始化Stetho或者只有在debug模式才會使用Stetho
if (BuildConfig.DEBUG) {
//初始化Facebook網路監測
Stetho.initializeWithDefaults(this);
}
在Okhttp裡面新增攔截器
前後對比
通過打包前後對比發現能減少很多k,呵呵能小點就小點,畢竟這只是一個測試庫,以後還有更多的測試庫都可以用這個方法
總結
如果單純的用debugCompile
一種依賴方式不能解決這個問題,因為在debug模式需要用到庫,那程式碼中就會出現相應的導包和初始化程式碼,程式碼可以用debug標誌位進行判斷,但是導包語句就沒辦法通過編譯了,所以在結合releaseCompileOnly
當然這幾種依賴也是有優先順序的,目前來看同一個依賴如果用Compile,releaseCompileOnly,debugCompile同時修飾一個依賴的話,最後以Compile為主,大概就是這樣,更深的沒有研究,有什麼問題希望打家一起探討.