快捷修改jar包代码

Java基础

浏览数:265

2019-4-15

背景:最近团队维护项目,涉及到文件下载,之前使用aliyun-oss-sdk-android-2.3.0.jar下载OSS的文件,现在添加文件服务器,参考了aliyun-oss的断点续传下载机制,后来发现aliyun-oss的库默认就写死了80端口,但是我们的文件服务器不是80端口。所以想到改一下里面的代码。

目的:仅分享这种修改jar包的方法。

思路一:直接写下载代码

  1. 一大堆续传逻辑,需要编写调试验证;
  2. 临发布才发现有这种问题。

最终因为时间紧迫,考虑其他方案。

思路二:拉源代码修改

这种思路还是比较科学的,只是在此时想到了思路三,然后就尝试了一番。

思路三:部分修改,编译

  1. 用JD-GUI(反编译)打开aliyun-oss-sdk-android-2.3.0.jar包,拷贝com.alibaba.sdk.android.oss.internal.RequestMessage代码。
  2. 用7z打开aliyun-oss-sdk-android-2.3.0.jar包,删掉com.alibaba.sdk.android.oss.internal.RequestMessage.class。
  3. 新建工程,导入修改后的aliyun-oss-sdk-android-2.3.0.jar,新建com.alibaba.sdk.android.oss.internal包,新建RequestMessage.java,把第一步的代码拷贝过来,修改代码:

    int originPort = this.endpoint.getPort();
    String baseURL = scheme + "://" + urlHost + (originPort <= 0 ? "" : ":" + originPort);

    注意:包名类名要一样。

  4. 编译。
  5. 把target下com.alibaba.sdk.android.oss.internal.RequestMessage.class用7z拉回jar包的com.alibaba.sdk.android.oss.internal。
  6. 完成。

总结:拷贝代码,删掉jar包里的class,修改代码,编译生成class,拉回jar包。