(轉)Android 公共庫的創建方法

本文主要介紹在android工程中如何將共用代碼建成公共包方便其餘工程引用、引用後的工程結構分析、library引入方式的優缺點java

 

個人公共庫已開源,可見TrineaAndroidCommon@Github ,包含圖片緩存下拉刷新靜默安裝及其餘Android開發經常使用工具類,歡迎star和fork^_^。示例APK地址:TrineaAndroidDemoandroid

 

一、java中公共庫的建立和引入git

熟悉java的朋友都知道在java中能夠將公用代碼提取出來新建工程,打包成jar包,而後經過外部依賴或是maven依賴加入其餘工程使用。github

 

二、android中公共庫的建立和引入緩存

使用android提供的is library功能建立公共庫,android adt提供了公共庫的建立方法,下面逐一介紹app

a. 新建android工程maven

這一步同通常的android工程建立方法,以下模塊化

 

b. 設置工程屬性爲library工具

右擊工程->properties->Android,將工程設置爲是library,以下google

 

c. android公共庫的引入方法

右擊須要引入library的工程->properties->Android,在library中添加以前新建的common,以下

這樣咱們就成功引入library了,對於引入後的工程結構分析能夠參見本文下面第三部分介紹。引入後咱們能夠正常的引入java類,對於資源能夠像在同一個工程中引入便可,由於library的資源被併入了工程中。

 

PS:若是這個時候工程編譯出錯,則多是由於工程和公用library中資源的衝突問題,在後面的分析中咱們能夠知道引入library後,對於工程的資源會進行合併。好比library中如今含有icon.png的drawable資源,若調用者資源中也含有icon.png則會編譯報錯,這個時候咱們能夠將library中的icon資源刪除,對於library來講儘可能不要放這些drawable資源,咱們甚至能夠以下圖紅圈所示刪除全部drawable資源文件夾,防止衝突發生。

固然刪除icon後同時須要修改相應的引用資源的文件,如這裏AndroidManifest.xml中的android:icon

 

三、引用後的工程結構分析

引入library的工程目錄結構以下

從上圖三個黃色標記的地方咱們能夠發現library的資源被併入了工程中,同時生成了兩個同樣的資源文件R.java。這樣作的話,對於工程來講能夠方便的調用library中的資源,跟在同一個工程中調用資源無甚區別。

a、library的資源被併入調用者工程中,而且相同資源值被覆蓋

library中存在strings.xml內容以下

Xml代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <resources>  

  3.     <string name="hello">Hello World, AndroidCommon!</string>  

  4.     <string name="app_name">AndroidCommon</string>  

  5. </resources>  

調用者一樣存在strings.xml,內容以下

Java代碼  收藏代碼

  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <resources>  

  3.     <string name="app_name">TESTPROJECT</string>  

  4.     <string name="string2">testString</string>  

  5. </resources>  

最終R.java中的string咱們能夠看到同時存在hello、app_name、string2三個變量,即資源被合併。而且app_name的值爲TESTPROJECT,即資源值被覆蓋。

b. 資源一致性

修改上面紅色標記的AndroidCommon_src中的AndroidCommon的內容,會發現library中的內容也會被相應修改

c. 編譯一致性

修改library的資源進行編譯會發現調用者工程也會同時被編譯。 

 

 

4. library引入方式的優缺點

經過library方式成功引入了公用庫

a. 提升了代碼的複用率減小了開發量

b. 可使得項目模塊化以及更好的擴展

 

同時對於這種工程方式的引入仍是以爲有一些不妥的地方

a. 經過源碼引入,而不是經過相似jar包引入,從而對於library的修改致使全部引入該library都須要同時編譯過於麻煩

相關文章
相關標籤/搜索