天天看點

一個完整的Android項目打包成第三方庫

場景:将一個完整的Android項目,包含java代碼,以及res資源檔案,以及自身所依賴的jar包、jni等打包成一個第三方庫供别人使用。 前提需求是:不能作為library的形式;不能讓别人看到并修改代碼;代碼需要混淆。

當我們使用Android Studio開發的時候,這個問題變得很簡單。實際操作的時候,隻要根據實際情況考慮幾個細節即可。

  • 将你的項目轉化成Android Library形式。
一個完整的Android項目打包成第三方庫

Android Library.png

  • 按照正常方式,對這個Library進行代碼混淆。
    一個完整的Android項目打包成第三方庫
    混淆.png
  • 删除Android Manifest中的所有權限聲明,删除Application子節點,隻保留四大元件的子節點。
一個完整的Android項目打包成第三方庫

Android Manifest簡化.png

  • Library用到的第三方依賴庫,不能使用在build.gradle中直接compile方式,而要轉而使用jar包的形式。
    一個完整的Android項目打包成第三方庫
    jar包依賴.png
  • 一般來說,當你compile過一個第三方庫的時候,Android Stuido會把這個庫下載下傳到本地,裡面就含有他的jar包,你可以直接在本地找到它,而不需要重新去網上下載下傳。比如我依賴了Gson這個庫,我就可以在類似這個目錄找到它:
    一個完整的Android項目打包成第三方庫
    jar位址.png
  • 編譯完成之後,你可以在這個地方找到混淆過的aar檔案。這個aar包含了目前Library的所有java代碼及res資源檔案。這個aar就是我們需要送出給使用方的檔案。
一個完整的Android項目打包成第三方庫

aar包.png

  • 如何使用aar。建立一個測試項目,将aar放到lib目錄下。
一個完整的Android項目打包成第三方庫

lib目錄.png

  • 在測試項目的build.gradle中添加設定。
一個完整的Android項目打包成第三方庫

設定.png

  • 在測試項目的Android Manifest檔案中添加所有Library用到的權限。
  • 大功告成。根據實際項目需求需要注意的是,假如原項目使用到類似推送、地圖等第三方庫需要根據包名生成appKey的情況,則項目的包名已經變為使用者的包名而不是原Library項目的包名。此處需要使用者自行設定。