開發Android應用sdk

最近在開發Android應用sdk,主要是抽取一些通用的功能模塊,比如升級更新下載、設備配網等。
組件化開發
考慮到多個sdk模塊開發,會有很多共同的地方,有些可以抽出來形成base模塊,其他sdk都集成該模塊。但是Android的lib模塊打包jar或者aar,只會打包該模塊下的代碼,不會打包依賴模塊的代碼,這就導致出現了一個問題,sdk的組件化開發使用依賴模塊可以,但打包之後沒有依賴包。
這裏提供一個簡單的解決方法,就是可以在sdk模塊的build.gradle裏面依賴base模塊的jar包,不要直接依賴base模塊工程,例如 implementation fileTree(include: ['*.jar'], dir: '../base-plugin/build/intermediates/aar_main_jar/debug')就可以把base模塊的代碼打包進入目標sdk包中。
這樣使用就沒有問題了,依賴包的代碼也可以找到。但是這樣會在sdk包中出現兩個classes.jar文件,不怎麼好看。我們可以使用jar命令把兩個jar都解壓出來,然後合併成一個jar包。例如 解壓 :jar -xvf jar包名字.jar 。合併 :jar cvf classes.jar * 。把要解壓的幾個jar包放在一個新建的目錄下,都解壓,然後刪除jar包,再使用合併命令,就可以合成一個新的jar包了。
混淆代碼
如果是內部使用,那sdk包不用混淆,可以直接打包,傳到私服供大家下載使用。
如果是面向外部三方,那麼自己的sdk包需要啓用混淆避免代碼外泄,需做一些混淆配置,避免sdk所有的API都被混淆,無法正常使用。
首先做build.gradle裏面,使用minifyEnabled true開啓混淆,然後在proguard-rules.pro文件裏面,做混淆保留配置,決定哪些類不被混淆。
比如 -keep public class com.aiiot.base.remote.**{*;} 就是保持com.aiiot.base.remote包下所有的類不被混淆。
-keep public class * extends android.app.Activity就是保持繼承android.app.Activity的所有的類不被混淆。
混淆規則可以參考混淆規則 另一種方法是使用註解,androidx.annotation.Keep,在類上加@Keep註解,也可以保持不被混淆,適用於小範圍單個類配置。

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