背景知识
这几天接了一个需求,要把项目整个打包作为SDK给别的公司用
首先想到的就是采用jar包的形式把代码打包,再把资源文件拷进ja包r里,用反射的方式去获取资源id
但是由于时间紧迫,要求当天就要有产出,无奈只能先行百度下,看下有没有什么便捷的方案,无意当中就看到aar包,经过试验完美符合预期,所以写一篇博文用于记录,便于以后回忆
使用工具
Android Studio
使用说明
首先使用Android Studio建立一个lib项目
然后把你的项目代码和资源都移植到lib module里
然后配置项目属性,把你的项目里的签名(用于第三方分享或者登陆)还有混淆文件配置到lib module中
signingConfigs {
config1 {
keyAlias ''
keyPassword ''
storeFile file('')
storePassword ''
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config1
}
}
然后
点击assembleRelease脚本
你会在module目录下的build/outputs/aar下面找到一个release.aar
然后你把这个压缩包解压,把里面的classes.jar作为lib导入到一个项目中(Android Studio自带反编译功能)查看下项目代码是否已经混淆,混淆的程度是否满足你的预期(辛辛苦苦写的代码 随随便便给别人拿走可不好),记住你提供的入口API文件千万不要混淆,不然别人在引用的时候会找不到该类,确认无误了,可以写一个小demo,放一个button,点击事件里就填上你提供的API,看下是否能正确跳转或者调用
顺便补充一点,如果怕和别的项目在资源ID:比如string,dimen上产生冲突,可以写一个脚本,在你的资源名称前加上你公司或者项目特有的前缀
发布aar
把你要发布的aar,和该aar说依赖第三方的库整理好,一起给要新的项目,新的项目如果已经有依赖那些第三方的库,则无需重新依赖,对于没有依赖的,就要配置依赖关系,这个就是第一步剥离依赖的好处,避免多余的依赖,可以把你的jar包放在aar包里,也没有问题
在新的项目的application模块的libs文件夹下面放上该aar文件,同时在该模块对应的build.gralde中加上下面的配置
dependencies {
compile(name:'mylibrary-release', ext:'aar')
}
repositories{
flatDir{
dirs 'libs'
}
}
好了一个小时不到,你的完整项目已经可以被别的公司快捷使用,代码也混淆了,保持了应有的私密性
如果你觉得对你有帮助,需要转载,请注明出处