SDK開發使用Maven釋出解決多Library巢狀問題
前言:
最近在開發sdk專案時,發現本地靜態依賴了4個子包。在主包構建出aar後發現不包含其他子包的資原始檔(雖然看構建日誌有合併每個資源包的輸出)。
google,度娘良久,沒有獲取到優秀的解決方案,尤其是針對現在android studio 3.1+ 版本。
稍微有一點收穫吧,在google issue中,大概4月份,google收錄這個問題(本地多module巢狀後打包),但是到目前為止,還沒有解決方案,相信不久就會有官方的,便利的解決方案。
之前釋出過自己的多module依賴的開源庫,所以知道將所有包都通過遠端依賴,最終將主包也釋出上去是可以保證 所有依賴都可合併一個包中。
省略: 線上持續整合,jitpack,maven 介紹,自行度娘~
下面列一下任務清單
-
- 構建本地基於檔案系統的maven倉庫
- 釋出到本地,並在主包中引用打包
- 解壓aar,檢視檔案是否合併
-
- 利用Nexus 在伺服器搭建私有maven倉庫
- 釋出到伺服器私有maven倉庫,並在主包引用打包
- 解壓aar,檢視檔案是否合併
這裡構建本地maven倉庫,是為了方便開發中使用,檢查aar包檔案,和反編譯後檢查混淆。
上傳指令碼
這裡使用全域性配置MAVEN_URL,上傳地址和引用庫地址相同
uploadArchives{ repositories{ mavenDeployer{ repository(url:MAVEN_URL) { //上傳至伺服器私有庫,新增下面這行身份認證 authentication(userName:LOGIN_NAME,password:LOGIN_PW) } pom.project{ packaging 'aar' description '我的sdk aar 包' pom.groupId = 'com.xx.sdk'//唯一標識 pom.artifactId = 'xxSdk'//名稱 pom.version = '1.0'//版本 } } } }
以上述配置為例,最後我們新增依賴規則如下:
implementation 'com.xx.sdk:xxSdk:1.0'
在實踐中,將後兩個變數都做了全域性變數控制和全域性函式引用
配置後效果如下:
implementation 'com.xx.sdk:xxSdk-channel:v1.0-181022-beta'
本地maven地址
無需其他步驟,直接給出路徑即可(如果需要協作,再考慮使用區域網nexus)
這裡直接貼地址格式,使用和伺服器maven地址一樣
MAVEN_URL = file:///D:/mavenRes
伺服器私有maven地址
MAVEN_URL = http://xx.xx/mavenRes
根目錄build.gradle 中引用庫地址
all projects{ repositories{ maven{url MAVEN_URL} } }
切換時選擇釋放的全域性變數 MAVEN_URL即可
END
題外話,工作幾年,心性已大變,以前寫文章總有些王婆賣瓜自賣自誇的意思。
和之前釋出文章不太一樣,本篇省略了一些細節步驟。只記錄了關鍵程式碼和小技巧。筆記嘛,當然是記錄自己的盲區和發現更重要