1. 程式人生 > >Android打包,如何打包時不包含依賴包

Android打包,如何打包時不包含依賴包

Eclipse中的實現是非常簡單的。

Eclipse如上圖去掉勾選就可以打出所需的包了!

AndroidStudio

相比較而言,AndroidStudio 就比較麻煩一點。鑑於gradle提供的一體化功能,很多規則已經給你定好了。

AndroidStudio 的依賴改成如下
dependencies {
provided fileTree(dir: 'libs', include: ['*.jar'])
provided 'com.android.support:support-v4:21.0.3'
provided project(':main-host')
}

採用provided的方式,在編譯開發的時候,會被引用,但是在打包帶的時候,就不會打進來。這種方式也是 library scope.

Compile

compile是對所有的build type以及favlors都會參與編譯並且打包到最終的apk檔案中。

Provided

Provided是對所有的build type以及favlors只在編譯時使用,類似eclipse中的external-libs,只參與編譯,不打包到最終apk。

APK

只會打包到apk檔案中,而不參與編譯,所以不能再程式碼中直接呼叫jar中的類或方法,否則在編譯時會報錯

Test compile

Test compile 僅僅是針對單元測試程式碼的編譯編譯以及最終打包測試apk時有效,而對正常的debug或者release apk包不起作用。

Debug compile

Debug compile 僅僅針對debug模式的編譯和最終的debug apk打包。

Release compile

Release compile 僅僅針對Release 模式的編譯和最終的Release apk打包。

除了這6種方式,還有一種,就是 flavr名稱配合編譯型別。

你以為,這樣就能解決自己遇到的問題了,太幼稚了,問題總比答案多。在庫依賴的過程中,有庫依賴庫的,有應用依賴庫的。

這個庫,有的是jar包形式,有的是aar形式,有的就是module形式。問題來了,上面的規則,對於這三種形式,是有限制的。

這個時候,你可能就需要純手動,去自己編寫 gradle 指令碼,或者採用別的方式,繞開問題。首先,把編譯關給通過了。

當然,如果你是手動編譯大神,請忽略所有這些 IDE 工具依賴的毛病。

這裡,我就不提供指令碼了。請自行github或者google,千萬不要百度,你會浪費時間的。

現在又來問題了,如果不想把 jdk_src 和 android sdk 的原始碼打進來,怎麼辦?

當然,這個問題在 Eclipse 這個萬能通用IDE裡面,依然灰常簡單,點選一下就能解決問題。但是在 Android Studio 裡面,可就沒有這麼簡單了。

首先JDK這個不用擔心,這個是執行時環境,預設,也是沒有的。

而sdk就不一樣了。真正的虛擬機器,不會想著只執行android的。

這個問題,留著我研究研究。有結果,會貼出來。提醒一下,在網上,我沒找到直接有效的回答,都他媽是浪費時間的回答。