1. 程式人生 > >android 依賴只編譯不打包到apk中

android 依賴只編譯不打包到apk中

幾種依賴方式

image.png

具體每個什麼意思,大家谷歌一下就知道了,這裡不在陳述

區別和使用

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

image.png

可以看到Facebook的包名,然後庫的大小為200多k,實際開發中打包的時候基本是不需要的,所以能少200k就少點吧
image.png

2 解決方法

  1. 在gradle裡面同時使用releaseCompileOnly和debugCompile即可

image.png

  1. 在程式碼中需要進行debug模式判斷,只有debug模式才會初始化Stetho或者只有在debug模式才會使用Stetho
    if (BuildConfig.DEBUG) {
        //初始化Facebook網路監測
        Stetho.initializeWithDefaults(this);
    }

在Okhttp裡面新增攔截器

image.png

前後對比

通過打包前後對比發現能減少很多k,呵呵能小點就小點,畢竟這只是一個測試庫,以後還有更多的測試庫都可以用這個方法
image.png

總結

如果單純的用debugCompile一種依賴方式不能解決這個問題,因為在debug模式需要用到庫,那程式碼中就會出現相應的導包和初始化程式碼,程式碼可以用debug標誌位進行判斷,但是導包語句就沒辦法通過編譯了,所以在結合releaseCompileOnly

就可以解決打包apk的時候報錯問題了,只要編譯器的時候沒有錯誤就沒問題了,因為Stetho的初始化在release版本不會執行,整體就是這樣,思路很簡單就是根據不同的依賴型別和不同的編譯模式來進行選擇性的新增依賴.

當然這幾種依賴也是有優先順序的,目前來看同一個依賴如果用Compile,releaseCompileOnly,debugCompile同時修飾一個依賴的話,最後以Compile為主,大概就是這樣,更深的沒有研究,有什麼問題希望打家一起探討.