库冲突处理-aar移除某些类重新打包成aar

799 阅读2分钟

比如某个库中包含了一些so、一些class文件,这时候项目中其他库也有这些文件,我们就需要讲某个库中这些重复的so、class文件删除,再重新打包。

一、解压aar

通过unzip命令将aar解压到指定的tmpDir文件夹中

unzip dest.aar -d tmpDir

如果windows电脑没有安装unzip,可能会报错,此时只需要安装下unzip工具即可。

windows安装unzip

去unzip官网:gnuwin32.sourceforge.net/packages/un…

选择binary下载:

image.png

下载完成后解压:

image.png

再将unzip.exe可执行文件放到C盘windows/System32中即可。

image.png

现在再执行unzip命令,发现可以正常识别了。

二、删除多余的so文件

将jni\arm64-v8a和armeabi-v7a下多余的so删除。

三、修改jar文件

通过jd-gui打开jar包后,file-保存即可将class文件保存到本地。然后可以编辑该class,修改。

修改的过程参考:juejin.cn/post/708971…

如果此时不需要修改代码那么此步骤可以省略。

一般aar中解压后jar文件的名称如下图所示: image.png 要想修改jar,需要先解压,我们还是通过unzip命令:

unzip classes.jar -d classes

然后我们会得到一个包含jar中所有源码(即class文件的)文件夹classes:

image.png

然后我们此处可以删除一个文件,来模拟修改aar中的某个class的操作。

四、重新打包修改后的jar

在解压jar后的classes目录中(注意是要进入到解压jar后的文件目录中,此处为classes目录),运行下面的命令,即可打包代码为新的classes.jar文件:

jar cvf classes.jar .  (注意最后有个.)

此处生成的就是我们删除class文件后新的jar包,将tmpDir中原本的classes.jar用新生成的classes.jar替换掉。

五、重新打包aar

回到tmpDir的上层目录中,通过下面的命令会打包一个名为dest.aar的文件:

jar cvf dest.aar -C tmpDir/ .

反编译中dex转为jar

1.0将准备好的XXX.apk  重命名 XXX.zip 文件 
    1.1XXX.zip 解压得到 classes.dex  
    1.2 将classes.dex 导入到 dex2jar-2.0 目录下 ,按住shift+鼠标右键 打开运行命令界面,
        输入 d2j-dex2jar classes.dex  得到classes-dex2jar.jar
2.0 用jd-gui 打开 classes-dex2jar.jar 文件  即可拿到源码