开发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注解,也可以保持不被混淆,适用于小范围单个类配置。

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