Android工程依賴:android中打包含有Activity以及資源文件的jar包在工程中調用

原文地址:http://xhmj12.iteye.com/blog/1988025


在開發java工程時,一個大的項目可能分爲多個模塊,爲了實現模塊間的解耦和獨立,提高模塊的複用性,通常將該項目按模塊分爲多個java工程進行開發,最後通過jar包等工程依賴的方式實現系統集成,提高模塊的解耦和複用。

        現在開發android項目,通過實踐開發的總結,發現這種方式特別有必要。比如,開發一個android端視頻應用,肯定有播放和下載模塊,之前放在一個工程裏,不斷添加新的功能,產品裏的每一個研發都不斷改動和添加功能,最後維護越來越難,bug越來越多,並相互推諉。這種方式能避免這種情況,此爲第一優點。

        其二,下載模塊是很多app都會用到的模塊,獨立出來,並不斷完善和優化,可以變成一個通用組件,給不同的app使用,這就是提高了模塊和代碼的解耦,提高了複用性,提高了工作效率。現在很多公司都是這樣做的。

        比如,下拉刷新,android沒有提供下拉刷新,很多項目爲了實現android的下拉刷新,爲集成開源的下拉刷新android項目。

        那麼,如果實現這種設計和需求呢?即已經有一個 Android工程 A 。  現在的工程 B 中 需要集成A工程作爲一個模塊?

         首先想到 B工程中能否直接  包含 A的apk文件, 發現不可行。然後又想着將其中一個項目(含有res資源)打包成jar包,另一個項目來引用。但是多次嘗試總是發現找不到資源。

         這是因爲android的特殊性,android不僅有java文件還有res文件,需要研究如何將資源以及activity文件打包成jar文件供其他項目調用,最終多方嘗試,找到如下兩種方案。方案二是從android的官方文檔中找到的完美解決方案。方案二更優,方案一要求兩個工程包名最好一樣,而方案二不需要包名一致。

 

        方法一:   

        1將A工程 的src文件夾下面所有的內容 導出 jar包。
        2保留  res下的  圖片,xml 等資源文件, 還有 AndroidManifest.xml 的內容。
        3將A工程的jar包  導入到B工程中,  res中的文件放到相應的文件夾下面。   AndroidManifest裏面的Activity複製到B的對應文件。
        這個時候存在兩個工程 包名 不相同的情況,  容易出錯, 最好兩個工程保持一致
        這樣完成了 B 工程 對 A工程的集成。    

        方法二:(android的官方文檔

        將其中一個項目設置爲引用的庫,在另一個項目中添加這個庫引用。

       簡單點的做法是

       在被引用項目A中的project-properties 中添加一行 android.library=true

       在引用的項目B 中添加android.library.reference.1=../A

       其中 1表示引用的包的序號,“../A”表示 引用的項目的路徑 

 

         具體做法如下:

    

    第一步,把普通的android project設置成庫項目

     庫項目也是一個標準的android項目,因此你先創建一個普通的android項目。 這個項目可以起任何的名稱,任何的包名,設置其他需要設置的字段等,如圖1所示。

接着把項目設置成庫項目,步驟如下

  1. Package Explorer中, 鼠標右鍵項目文件夾,點擊 Properties.
  2. Properties 窗口, 選擇"Android" ,Library屬性顯示在右下邊.
  3. 把"is Library" 單選框選擇上,再點擊 Apply.
  4. 點擊 OK 關閉Properties 窗口.

     這時,這個項目就變成庫項目了。

     當然,java項目也可以讓其變成一個庫項目,非常簡單,執行上面的四步。其他程序項目就可以引用庫項目了。

    圖 1.使一個項目爲庫項目

    創建manifest文件

    一個庫項目的manifest文件也和標準的android應用程序一樣,聲明所有共享的組件。

    比如APIDemo中的TicTacToeLib 這個例子,庫項目聲明瞭Activity GameActivity:

<manifest>
  ...
  <application>
    ...
    <activity android:name="GameActivity" />
    ...
  </application>
</manifest>

    第二步 引用庫項目

    如果你開發的應用程序想要包括庫項目中的代碼和資源,非常簡單,引用步驟如下

  1. Package Explorer中, 鼠標右鍵項目文件夾,點擊 Properties.
  2. Properties 窗口, 選擇"Android" ,Library屬性顯示在右下邊.
  3. 點擊Add ,打開了Project Selection對話框.
  4. 從可用庫項目列表選擇一個項目,然後點擊 OK.
  5. 對話框關閉之後點擊 Apply (在Properties窗口).
  6. 點擊 OK 關閉Properties 窗口.

    完成以上六步,Eclipse 會重建項目,把庫項目中的內容包含進去。 如圖2所示

      圖 2.讓項目引用一個庫項目

      如果你想增加多個庫項目的引用,使用up和down可以設置他們的相對的優先級和合並順序。工具在合併引用的庫的時候順序是從低優先級(列表的下面)到高優先級(列表的上面)。 如果不只一個庫定義了相同的資源ID,這個工具選擇資源時會選擇高優先級的資源。應用程序自身擁有最高的優先級,自身的資源zThe application itself has highest priority and its resources are always used in preference to identical resource IDs defined in libraries.

 

      在menifest文件中聲明庫中的組件

      在manifest文件中必須增加對在當前程序中用到的庫項目中的所有的組件。比如,你必須聲明任何用到的 <activity>, <service>, <receiver>, <provider>等,<permission>, <uses-library>,和其他類似的元素。

聲明庫項目中的組件時,必須使用包含包名的類全名。

      在TicTacToeMain例子中,聲明庫Activity GameActivity :

<manifest>
  ...
  <application>
    ...
    <activity android:name="com.example.android.tictactoe.library.GameActivity" />
    ...
  </application>
</manifest>

    需要了解更多關於androidManifest的信息請參閱 AndroidManifest.xml.

 

     例子參見android-SDK下的\android-sdk\samples\android-x下的兩個例子工程:TicTacToeLib和TicTacToeMain。可以看見兩個工程下的project.properties文件。

 

    庫工程TicTacToeLib的:

     android.library=true

     target=android-3

 

     主工程TicTacToeMain的:

  android.library.reference.1=../TicTacToeLib/

  target=android-8

 

  可以參考SDK下的自帶的例子,很好的學習庫::\android-sdk\samples\... 真是一個大的寶庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章