将开源库转为私有库
背景描述
这里项目中使用的WebView是使用的第三库(com.github.lzyzsd.jsbridge),但是在这个这个库中使用的代码存在webView的安全漏洞
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// WebView.setWebContentsDebuggingEnabled(true);
// }
当版本高于19就会开启WebView.setWebContentsDebuggingEnabled(true),这个有安全问题的,那么我们需要将其注释掉,不让他开启,避免这个漏洞。
而我们的项目是在sdk层中使用了这个第三方库中的代码,那么如何解决呢?
方案1:找到这个使用这个类的地方,让后重写这个第三方库中的这个类,修改掉这个地方,然后让我们的SDK中使用webView的地方,选择使用我们的重写的类,这样也可以解决这个问题,但是这么做就会改动SDK里面的代码,那么就需要重新测试和发版这个sdk了,很麻烦,有没有更好的办法呢?
方案2:在demo层的gradle中排除掉这个给依赖库,然后我们下载这个第三方开源库的代码,进行修改,然后将其重新打包成aar包,然后再在demo层中使用我们这个新的aar包
详细过程
这里我将会阐述方案2的方法,这里我先介绍一下gradle的依赖原理,首先在我们依赖了某个开源库或是SDK或是本地库,然后我们项目的源码中是使用了这些库的代码,例如在A.java中使用了这个com.github.lzyzsd.jsbridge库的代码(使用了CallBackFunction类),那么他就会在import中引入了这个这个类的包和类名
import com.github.lzyzsd.jsbridge.CallBackFunction;
然后在编译的时候会将这个类编译成字节码,他是会把包名、类名编译成字节码,然后给其他类使用,所以只要类名和包名相同就可以了,所以这里的包名和类名一定要相同
先去github上下载这个库的源码
首先排除掉有问题的依赖,在使用的了SDK的module中
api ('xxxx'){
exclude group:'com.github.lzyzsd',module:'jsbridge'
}
然后sync后,项目应该会爆红,提示找不到这个类
然后修改下来的源码,将有问题的地方改了,然后重新打包成aar包
然后在outPuts中就有这个aar包了
把这个给aar包放入到原来的项目中,然后依赖这个新的aar包
(这里我将aar包改名为JsBridge-1.0.4)
在原来的项目中的build.gradle依赖这个aar包(注意这里是你使用这个依赖的模块)
dependencies{
api ('xxxx'){
exclude group:'com.github.lzyzsd',module:'jsbridge'
}
api files('libs/JsBridge-1.0.4.aar')
}
然后sync项目就可以了
如何检验是否有替换成功呢?可以点击去用到这个库的地方,点击修改过的类,可以比对一下修改的地方,就能看出有没有修改后的变化,也可以点击左边Select open file看一下这个类所在位置是不是在自己aar包
重新依赖aar包引起的问题,sync项目没问题,但是跑以来就提示下面的错误
Could not find :JsBridge:. Required by: project :demo > project :xxxA > project :xxxB
这是可能是你的项目中有多个模块,然后你放到某个模块中,他识别不了,如何解决
在下面添加
repositories {
flatDir {
dirs project(':xxx').file('libs')//xxx是你存放的模块,libs就是你放到xxx模块的libs中
}
}
dependencies{
api files('libs/JsBridge-1.0.4.aar')
}
注意你有可能导入aar后会发现找不到类的问题,其实就是依赖的问题,可以在Project Structure中观察一下这个模块的依赖关系,查看这个给模块是否把aar包依赖进去,没有就依赖进去
基本上上面一套下来,就能更换成功了
闲聊: 最近真的太忙了,刚进了新的公司,一直在熟悉公司的业务代码,没有时间写文章,看看后面能不能整个大活吧,虽然感觉时间有点紧张(不一定能弄出来???),但是人总是要逼一自己的,按照广东这边一句老话说:正所谓阿婆爬梯--有点暴力不敢发出来,后面我发评论区吧。 这里算是一点废话。
参考:
如何打包aar包 https://www.jianshu.com/p/71058db2e429
Android——如何制作自己的开源项目
https://www.jianshu.com/p/434911cd8732
https://www.jianshu.com/p/f391d0a6691e
依赖aar包
https://www.cnblogs.com/yongdaimi/p/15192865.html