管理Android庫項目

來源:互聯網
上載者:User

摘自寶馬部落格:http://hi.baidu.com/xfzhoupan/item/20d98b053a0e7be0ff240dc3

管理Android項目(官網原文翻譯)

原文地址:http://developer.android.com/guide/developing/projects/index.html

庫項目

    Android庫項目是儲存共用的Android原始碼和資源的開發項目。其它的Android應用項目可以引用庫項目,並在構建時,將庫項目編譯後的源包含進.apk檔案。多個應用項目可以引用同一個庫項目,並且一個應用項目可以引用多個庫項目。

 注意:你需要SDK工具r8或者更高的版本來完全支援所有Android平台版本的庫項目。你可以使用Android SDK或者AVD管理器下載工具和平台,詳細描述參見添加SDK組件。

    如果你的多重專案有公用的原始碼和資源,你可以移動它們到一個庫項目,這樣一來維護交叉的應用和版本就更容易。下面是一些使用庫項目的公用情境:

        •  如果你正在開發多個相關的應用,它們使用一些相同的組件。你可以從每個應用項目中移出冗餘的組件到一個庫項目,來建立一個單一的可重複使用的組件。

        •  如果你建立一個應用有免費和付費兩個版本,你可以移動這兩個版本的共同部分到一個庫項目。這兩個依賴庫項目的項目,有它們各自不同的包名稱,它們引用庫項目,並且只提供兩個應用版本之間不同的部分。

    在結構上,庫項目和標準的Android應用項目相似。例如,在它的根目錄下包含一個資訊清單檔,/src,/res等目錄。庫項目能包含和標準Android項目相同類型的原始碼和資源,並且儲存在相同的位置。例如,在庫項目中,原始碼也能通過R類訪問它擁有的資源。

    但是,庫項目和標準的Android應用項目的不同之處在於,你不能直接編譯它到它自己的.apk檔案,也不能在Android裝置上運行它。同樣地,你不能匯出庫項目到獨立的JAR檔案。做為替代,你必須直接地編譯庫項目,通過引用它的應用。

    當你構建依賴庫項目的應用時,SDK工具編譯庫,並且合并源碼到主專案,然後用合并的結果產生.apk檔案。那些在應用和庫中都有定義的資源ID,工具會確保在應用中定義的資源有優先權,在庫項目中的資源不會被編譯到應用的.apk檔案中。這使項目可以靈活的使用和重定義那些在庫中定義的資源的行為和值。

    為了進一步的組織你的代碼,你的應用可以引用多個庫項目,然後指定每個庫中資源的相對優先權。這讓應用中實際使用的資源建立在累積的方式上。當兩個被引用的庫中定義了相同的資源ID時,工具會選擇優先權高的資源並丟棄其它的。

    一旦你添加庫項目到Android項目,你就可以設定它們的相對優先權。在構建時,這些庫會按優先權從低到高一個一個的與應用合并。

    注意,一個庫項目不能引用其它的庫項目,並且,庫項目與應用合并之前不相互合并。但是,庫項目可以正常的匯入外部JAR包。

開發注意事項

    當你開發庫項目和相關的應用時,請記住以下幾點:

        •  資源衝突

           由於工具會合并庫項目和相關應用項目的資源,一個給定的資源ID可能被定義在這兩個項目中,因此,工具從應用或者優先權高的庫中選擇資源並丟棄其它的資源。當你開發應用時,應該意識到共同的資源ID可能會在多重專案中定義,並且會選擇應用中的資源或者高優先權的庫資源合并。

        •  使用首碼來避免資源衝突

           為避免公用資源ID的資源衝突,可以考慮使用首碼或其它一致的命名方案來保證資源在項目中的唯一(或者在所有項目中的唯一)。

        •  不能匯出庫項目到JAR檔案

           庫不能做為二進位檔案分布(如:JAR檔案)。因為庫項目會被主專案以正確的資源ID編譯。

        •  庫項目可以包含JAR包

           你可以開發包含JAR包的庫項目,但是,你要手動的編輯依賴它的應用項目的構建路徑來添加JAR檔案。

        •  庫項目可以依賴JAR包

           你可以開發依賴外部包(如:地圖外部包)的庫項目。這樣,相關的應用必須建立對應的目標來包含外部包(如:Google APIs組件)。還要注意庫項目和相關的應用都必須在它們的資訊清單檔的<uses-library>元素中聲明外部包。

        •  庫項目不能包含原始資產

           SDK工具不支援在庫項目中作用原始資產(儲存在assets/目錄中的檔案)。應用使用的所有資產資源必須儲存在應用項目自身的assets/目錄中。但是,儲存在res/目錄中的資源檔可以支援。

        •  平台版本必須低於或等於Android項目

           庫被做為相關應用項目的一部分被編譯,所以庫項目中使用的API必須相容Android庫的版本來編譯應用項目。總之,庫項目使用的API等級應該等於或者低於應用中的。如果庫項目比應用使用的API等級高,那麼這個應用項目將不能編譯。例如:一個使用Android API 1.5(API等級3)的庫項目和使用Android
1.6(API等級4)或者2.1(API等級7)的項目在一起是完全可以的。

        •  庫包名沒有限制

           不要求庫中包名稱和應用中的包名稱相同。

        •  每個庫項目建立自己的R類

           當構建相關的應用項目時,庫項目被編譯並與應用項目合并。每個庫都有自己的R類,根據庫的包名稱命名。R類由主專案產生,在庫項目中,它被建立在所有需要的包中,包含主專案包和庫包。

        •  庫項目的儲存位置

           對於相關應用項目來說,沒有具體要求庫項目儲存在哪裡,只要應用項目能通過一個相對的連結來引用庫項目。最重要的就是,主專案能通過一個相對的連結來引用庫項目。

 

註:庫工程裡不能用switch(view.getId())來判斷元素的ID,因為R.id在庫工程裡是變數,解決方案參見:http://tools.android.com/tips/non-constant-fields

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.