无源码修改android三方sdk并重新打包

1,934 阅读2分钟

@[toc]

一、背景

如下图所示,这里我需要修改三方sdk源码。

  1. 首先它的sdk是个aar包,解压得到依赖包classes.jar。
  2. 反编译classes.jar得到源码,将com.hdgq.locationlib.constant.Constants.ENVIRONMENT的值默认为“release"。
  3. 再重新打包测试。 在这里插入图片描述

这里的三方sdk修改,指的是修改java部分的。由于java是运行在虚拟机上的语言,且其编译后的字节码class文件比较容易破解,这种机制为所有java程序的破解提供了可能性。

二、unzip命令解压文件

所谓的wgt、jar、aar、apk、ipa其本质都为压缩格式,且遵循zip的压缩规范。这里我们MacOs(基于Unix)的zip命令处理,当然也可以直接使用window的那个天天打广告的压缩软件。

unzip -o -d /home/sunny myfile.zip

把myfile.zip文件解压到 /home/sunny/ -o:不提示的情况下覆盖文件; -d:-d /home/sunny指明将文件解压缩到/home/sunny目录下。

这里我们的得到解压缩文件夹如下 在这里插入图片描述 继续解压缩classes.jar,得到文件夹如下 在这里插入图片描述 这里我们打开目标文件Constants.class得到如下 在这里插入图片描述

二、编辑class文件

这里的class文件为java编译的机器字节码文件,直接打开并不能识别,这里我们需要使用编译工具,将文件拖到Idea、AndroidStudio等工具中。可以看到源码如图

在这里插入图片描述 注意这里的包名

package com.hdgq.locationlib.constant

由于我们并不能直接修改字节码文件,但是我们可以间接生成。使用androidStudio新建一个项目。并添加依赖module的包名与上面一致。如下图所示 在这里插入图片描述 点击重新编译,在build中得到修改后的class文件 在这里插入图片描述

三、zip命令重新打包sdk

这里我们将修改好的class文件替换到classess.jar解压缩文件夹中的文件,使用zip命令重新生成classess.jar包。然后再将classess.jar覆盖到locationsdk-1.0.0.aar解压缩文件夹下,重新生成locationsdk-1.0.0.aar包即可

cd到该文件夹
zip -r myfile.zip ./*

将当前目录下的所有文件和文件夹全部压缩成myfile.zip内联代码块文件,内联代码块-r表示递归压缩子目录下所有文件。

四、测试验证

此时我们把生成的sdk重新放到原工程目录下,使用androidStudio查看,如图 在这里插入图片描述 对其sdk功能测试到没问题即可。