背景
需求:解决安全漏洞之避免恶意可执行程序感染漏洞
原因:项目中,我们使用了openvpn模块,开启了另一个进程去做一些需求。但是,打包成某些app的时候,并不需要改模块。
而代码反编译之后,可以检测到这些模块。因此,需要做出一些优化。
方案一:针对某一客户打包的app中,独立出一个分支,去掉相关代码和依赖。经过实践,工程量很大,而且容易存留潜在问题。
方案二:将该模块的module依赖改成aar依赖。
正题:
首先是先这么操作:
将原本的依赖去掉:
1.修改app下的gradle中的依赖:
2.注释掉:setting.gradle的相关代码
好了,前戏完成,开始操作:
以下借鉴了:将module模块变成aar文件
将mudle变成aar的步骤如下:
第一步:创建完module模块以后,写完功能逻辑,使用Build -> Make Module "common"
第二步:我们就可以到moudle模块中的build/outputs/aar/ 文件下,看到生成的aar文件了。
第三步:我们就可以将common.aar文件复制到项目的libs包下
第四步:在gradle中就可以引用aar文件了。
但是,依旧不行。会报错误。
于是,通过在stackoverflow游水之后,发现,还有一种写法,改成了这样。
这里借鉴了:Adding local .aar files to Gradle build using “flatDirs” is not working
以及Android: How to Include an External .aar File Using Gradle?
dependencies {
compile(name:'file_name', ext:'aar')
}
问题初步解决。
还有另外的问题:我根据上面操作得到的aar文件,其实是debug环境的。那么问题来了,怎么得到release的呢?
于是,有了以下操作:
进入android studio 的terminal界面,输入gradlew assembleRelease生成打包文件
但是,经过这一步操作之后,我并没有得到我想要的release包,可能哪里缺少操作了。但是,无关大雅。
在解决问题的时候,看到的比较不错的文章:
在上文中,其实还抛出了一个问题,为什么打包成aar文件之后,就可以解决安全漏洞问题(其实这一块本来就没有安全问题,主要是代码检测反馈出有安全问题)?
原因如下:aar包中包含了类似APP的res下的一切资源,实际上相当于一个module直接依赖了一个工程module库,只是我们将这个工程module库打包成为了一个aar文件方便直接引用,而不是提供真正的源代码,而我们在进行开发aar的目的是为了将其作为一个库提供给真正的application使用。