怎樣將自己的工程改造成庫,並上傳到Github作爲依賴

  在Eclipse時代,也許你會在工程中依賴本地的另一個工程,或者把一個工程打成jar包並引入到另一個工程,又或者你公司的後臺架構師會把通用的代碼(比如bean)打成jar包後放到中央倉庫,然後需要使用時配置Maven的pom.xml文件把它拿下來。這一切在Android Studio時代並沒有太大改變,只是方式略有不同。這個題目有點長,顧名思義,它分爲三個步驟:

  1. 在Android Studio中將普通工程改造成庫
  2. 將改造後的庫上傳到Github
  3. 將庫作爲依賴被自己的其他項目或別人使用

1.1 工程中創建Module

  最開始你可能自己寫了個工程,感覺不錯,進行了一定的封裝和優化,想留作開發下一個App時用或者給別人用。但是每次複製粘貼代碼顯得繁瑣,還要處理一堆的package name和import錯誤。於是你想着把它改造成獨立的工程,每次整個工程複製進去,設置引用就可以了。這就要使用Android Studio的module了。以前,你的工程只有一個Module,就是(Module: app)。現在你需要新建一個Module,如圖所示:

在工程名上右鍵–>New–>Module,
  在工程名上右鍵-->New-->Module
  
選擇Android Library–>Next,  
    選擇Android Library

給庫取名,比如xxxLibrary,我這裏叫OrangeRetrofit。
    給庫取名

1.2 將核心代碼移植到Module

  接下來要做的是,把原先在工程的(Module: app)中的核心代碼移到(Module:OrangeRetrofit)中。比如這裏將網絡請求框架的封裝全部移到(Module:OrangeRetrofit)中,(Module: app)中只剩下UI相關以及封裝後的網絡請求框架的使用。移植過程中尤其要注意的一點是,不要把Application移過去。那麼之前很多寫在Application中的通用方法怎麼辦?比如在Application中定義了這樣一個方法。

public static void runOnUiThreadDelayed(Runnable task, long miliis) {
    mainHandler.postDelayed(task, miliis);
}

  解決辦法是,在Module中新增一個靜態類,我這裏就叫OrangeRetrofit,用於完成Application的職責。OrangeRetrofit靜態類中有一個init方法,要求使用這個庫的人必須在Application的onCreate方法中調用一次OrangeRetrofit.init(this),把context傳進來。

public static void init(Context context) {
    if (null != context) {
        appContext = context;
}

  是不是有種似曾相識的感覺?使用友盟SDK時,要求你在Application的onCreate方法中調用一次PushAgent.getInstance(this); 使用百度地圖SDK時,要求你在Application的onCreate中調用一次SDKInitializer.initialize(this)。這些都是爲了實現類似的功能,那就是傳遞app context。這樣你在庫中,沒有Application,也可以隨意得Toast,隨意地getVersionName()。又因爲OrangeRetrofit是個靜態類,所以在調用OrangeRetrofit.init(this)時就會加載這個類,也就是在Application初始化時,app context就會傳進去,OrangeRetrofit類裏的靜態塊會比別的類和方法先執行。這樣,OrangeRetrofit之於庫(Module:OrangeRetrofit)就非常類似Application之於工程(Module: app)

1.3 導入Module

  上述步驟都完成了,並且調試通過後,你可能想在另一個工程中使用它。在工程中導入Module很簡單:

  1. 把整個module文件夾複製到工程的根目錄
  2. 在工程的settings.gradle中增加對module的引用。
      由include ‘:app’變成include ‘:app’, ‘:orangeretrofit’
  3. 在工程的主module (Module: app)中增加對庫module的引用
      compile project(path: ‘:orangeretrofit’)

  配置好後,gradle synchronize一下就可以使用了。

2.1 把自己的庫上傳到Github開源

  這個就和上傳普通的代碼到Github一摸一樣了,在我的例子中,我上傳的是包含(Module: app)(Module:OrangeRetrofit)的整個工程。

  1. 在github上新建一個repository,然後你會得到一個類似https://github.com/xxxx/xxxx.git這樣的URL
  2. 在Android Studio的命令行中執行git init,或者打開windows的命令行,cd到要上傳的工程根目錄下,或者在工程根目錄右鍵Git Bash here(如果你安裝了GitExtension的話)執行相同的命令;
  3. 執行git remote add origin https://github.com/xxxx/xxxx.git,記得改成你自己的URL

  這樣你就把本地工程和Github上的repository關聯起來了,就可以愉快地pull和push了。這裏省略了很多細節,比如,建議寫一個Markdown格式的自述文件README.md;再如,上述第2、3步可以在Android Studio的圖形界面完成,這裏不再贅述。對Git命令操作不熟悉的可閱讀這篇翻譯貼Git詳解之三 Git分支

3.1 Release Github project

  在2.1中上傳到Github上的項目別人可以看到、下載、仿照、修改、整合到自己項目中,但是依然需要複製粘貼,並不能直接依賴。繼續

點擊releases
  create new release
  
按照右邊的英文提示填寫版本信息和描述,然後點擊Publish Release一鍵發佈。
  一鍵發佈

看到這樣的頁面表示發佈成功。

這裏寫圖片描述

3.2 添加到JitPack

  打開JitPack官網https://jitpack.io/,在輸入框中粘貼剛剛在Github上Release的項目的地址。
  點擊Look up然後在彈出的輸入框中點擊Get it 完成庫的生成。我上傳的是整個工程,但是這裏它可以自動識別出工程中的庫module。
這裏寫圖片描述
  然後就看到我們熟悉的添加依賴的指導了,把Gradle和Maven的添加依賴的指導複製到Github上庫項目的自述文件README.md中,告訴別人怎麼用你的庫。
這裏寫圖片描述

3.3 測試庫依賴

  自己新建一個工程,在主module的build.gradle中的dependencies節點中加入依賴

dependencies{
    ...//其他依賴
    compile 'com.github.ashima0512:OrangeRetrofitDemo:v1.0.0'
}

  gradle synchronize一下,在工程中調用庫中的任意一個API,如果只提示導包,而不是報錯,則表示添加依賴成功。記得實際使用時,在Application的onCreate方法中調用OrangeRetrofit.init(this)。文中示例庫OrangeRetrofit的源碼可在Github上查看。

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