Android 類庫打包、發布方法


  開發Android應用的時候,對於可用於多個應用的公用的部分,或是打算發布給第三方進行應用集成的部分,要把這部分打包成類庫怎么做呢?
  Android應用使用ADT打包成apk,apk中包含了運行程序所需要的一切,包括:class、asset、res、AndroidManifest.xml等。而對於類庫項目(library project),ADT生成的jar包里只包含編譯生成的class文件,不包含res資源文件,res只能在應用項目打包apk的時候打進apk包。

  那考慮自行導出jar如何? 針對類庫項目(library project)執行導出(export),導出時把res打上勾,這樣導出的jar包里確實包含了res下的資源文件。很不幸,經反復試驗得知,即使在jar包里包含了res,目標應用項目在編譯時仍然不會對jar包里的res進行處理,打成apk包時是不會包含jar里的res的。這樣一來,通過在jar包里包含res以供目標應用項目使用的路走不通了。

先做個總結:
  1. android類庫(library project)能支持打包成jar,並且jar里的字節碼類文件能夠成功被打進目標應用項目的apk包里。如果類庫中不包含activity等需要界面資源的內容,或者在類庫中手工讀取資源,而不使用ADT的從res下讀取資源的機制,這個類庫jar的使用完全沒問題,不需特別關注。
  2. res下的資源文件打進jar包沒有意義,目標應用項目在打apk包時不會從jar中讀取res打進apk。猜測不支持從jar中讀res的可能的原因是擔心資源名與目標應用項目中重復(純屬個人猜測)。

打不成jar包,直接把源碼給出去又不合適,怎么辦?

  下面是一個辦法:
  1. 開發類庫項目(library project,即Project -> Properties -> Android -> Check "Is Library"),正常編譯,生成jar包(在bin下,jar中只包含src下的類生成的字節碼,不包含gen下自動生成的類,也不包含res)。假設這個類庫叫做mylib,生成的jar名稱為mylib.jar。
  2. 新建一個類庫項目(library project,同樣設置 Project -> Properties -> Android -> Check "Is Library" ),假設這個類庫叫做mylibdeploy,設置其命名空間與mylib相同。在mylibdeploy下新建一個libs目錄,把mylib.jar導入到libs目錄下。再將mylib項目下的assets、res目錄復制到mylibdeploy下。
  3. 開發目標應用(常規Android project,不勾選“Is Library”),在這個目標應用項目中設置對mylibdeploy的引用。引用方法如下: 打開android應用設置 Project -> Properties -> Android , 點“Add...”按鈕選擇mylibdeploy。經如此設置后,在目標應用項目中就可以引用mylib中的類了。

  4.    最后編譯、導出成apk,這個apk里會包含mylibdeploy下的res,也會包含相應的gen下自動生成的類編譯后的文件。

  對於需要向外發布的類庫,將mylibdeploy直接發出。可以將其壓縮打包成zip或者其它的什么格式,只要使用方能解開就行。使用方(目標應用開發方)按照第3步的方式引用mylibdeploy,就能正常使用mylib.jar,正常打包apk。

  當然,在打包jar(上例中的mylib.jar)時,可以根據需要對其進行部分混淆生成不易被反編譯的jar包。

  這種發布包的辦法並不完美,期待ADT的改進,未來也許可以直接發布JAR。

參考:
[1]. Managing Projects from Eclipse with ADT
  http://developer.android.com/tools/projects/projects-eclipse.html

[2]. Android Developer Tools
  http://developer.android.com/tools/help/adt.html

[3]. How to export the project as a JAR file
  http://groups.google.com/group/android-developers/browse_thread/thread/bc4b509765bd1956

[4]. How to create Android library in Eclipse?
  http://groups.google.com/group/android-developers/browse_thread/thread/ce546a393cbb8bcf

[5]. Android類庫打包方法探究

  http://www.cnblogs.com/wangchuanju/articles/android_lib_jar.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM