关于安卓jar包修改并且重新发布

news2025/1/19 20:26:46

背景:

对于某些jar包,其内部是存在bug的,解决的方法无外乎就有以下几种方法:
(1)通过反射,修改其赋值逻辑
(2)通过继承,重写其方法
(3)修改jar包的源码,从根源上修复问题
对于改动量,难易程度,(1)和(2)都是比较适合的,但是,有些情况下,不能满足修改条件,所以就有了方案3,要不就乖乖等官方jar包版本更新。

环境:

(1)win10
(2)jdk11
(3)jd查看工具下载(版本jd-gui-1.6.6.jar)

实战

举个例子,以aliyun-vod-upload-android-sdk-1.6.5.jar为例。其中
类:AliyunVodAuth,181行,有个空指针判断没有做,导致了程序报错,报错信息如下:

com.alibaba.sdk.android.vod.upload.auth.AliyunVodAuth$2$1.onFailure(AliyunVodAuth.java:181)
com.aliyun.vod.qupaiokhttp.OkHttpTask.onPostExecute(OkHttpTask.java:279)
com.aliyun.vod.qupaiokhttp.OkHttpTask$2.run(OkHttpTask.java:228)
android.os.Handler.handleCallback(Handler.java:942)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loopOnce(Looper.java:211)
android.os.Looper.loop(Looper.java:300)
android.app.ActivityThread.main(ActivityThread.java:8152)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)

因为这个包目前位置,已经是官方最新的jar包了,所以等官方更新,也不知道要等到什么时候,因此,就需要手动修改jar包里面的内容了。

(一)提取文件,修改,保存

报错代码实际源码如下:

if (var1x == 1003) {
	AliyunVodAuth.this.vodAuthCallBack.onError(AliyunVodErrorCode.VODERRORCODE_HTTP_ABNORMAL, "http error response unknown.");
 }

可见是vodAuthCallBack没有判空导致的。因为,我们修改的过程中,只需要加上一个判空即可。

确定报错的类,源码如下图:
在这里插入图片描述
然后选中该类,点击FIle–Save。保存该类到本地。然后在对应保存的目录下,就会有一个保存后的java文件,然后修改文件中的判断,如下图:
在这里插入图片描述
修改后保存

(一)通过java c编译,生成class文件

找出类中,对应的依赖jar包,这个类中,依赖的jar包为:
gson.jar,okhttp.jar,所以需要这两个包才能执行javac
可执行目录的依赖如下:
在这里插入图片描述
然后在dos指令窗口输入以下指令

执行指令如下:
javac -cp aliyun-vod-upload-android-sdk-1.6.5.jar;E:\Android\sdk\platforms\android-30\android.jar;okhttp-4.5.0.jar;gson-2.10.1.jar *.java

其中,cp代表编译的时候,涉及到哪些依赖文件,window中用;分割,而*.java代表目录下的所有.java格式的文件,也可以指定某个java类。

最后执行命令,生成以下文件:
在这里插入图片描述
然后,赋值对应生成的.class文件,覆盖原有文件,即可使用。

that‘s all------------------------------------------------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/843056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL-每日一题【1164. 指定日期的产品价格】

题目 产品数据表: Products 写一段 SQL来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格,假设所…

【Kubernetes】Kubernetes之Kubeadm部署

Kubeadm 一、Kubeadm 部署1. 环境准备2. 所有节点安装 docker3. 所有节点安装 kubeadm,kubelet 和 kubectl4. 部署 K8S 集群4.1 配置 master01 节点4.2 配置 node 节点 二、Kubeadm 高可用部署1. 环境准备2. 所有节点安装 docker2. 所有节点安装kubeadm,…

【大数据】Flink 详解(一):基础篇

Flink 详解(一):基础篇 1、什么是 Flink ? Flink 是一个以 流 为核心的高可用、高性能的分布式计算引擎。具备 流批一体,高吞吐、低延迟,容错能力,大规模复杂计算等特点,在数据流上提…

如何搭建一个成功的酒店小程序?

随着移动互联网的发展,小程序成为了不可忽视的商业工具之一。对于酒店行业来说,开发一个酒店预订小程序可以为客户提供更加便捷的预订方式,同时也带来了更多的商机。下面,我们将介绍一个简单的搭建流程,帮助新手快速上…

公会发展计划 (GAP) 第 4 季:塑造 YGG 的成就版图

基于前三个赛季所取得的成果,Yield Guild Games(YGG)自豪地宣布推出 公会发展计划(GAP)第 4 季。公会最近的一些精英成员将在本季加入公会,公会成员将在全新的任务中磨练自己的技能,建立自己在 …

HOT80-划分字母区间

leetcode原题链接:划分字母区间 题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。返回…

ArcGIS Pro简介下载安装地址

ArcGIS Pro简介 ArcGIS Pro是一款功能强大的地理信息系统(GIS)软件,由Esri开发。它为用户提供了一种直观、灵活且高效的方式来处理、分析和可视化地理数据。ArcGIS Pro具有现代化的用户界面和工作流程,使用户能够更好地利用地理信…

修改k8s pod的挂载目录

1、找到挂载的服务 kubectl get service2、编辑pod的环境配置 kubectl edit deployment vendor-basic-bill-executor3、找到需要挂载的目录

Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群

Kubernetes K8s从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群 一、etcd高可用拓扑选项1.堆叠(Stacked)etcd 拓扑2.外部 etcd 拓扑 二、准备工作三、建立集群1.将 kubelet 配置为 etcd 的服务管理器。2.为 kubeadm 创建配置文件…

【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型)

【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型) 版本更新: 2023/8/5: 1.因BP作为代理模型不稳定,经过测试,libsvm比rf /bp 效果稳定且精…

MSF恶意程序利用——CS上线

Msfvenom是一个Metasploit独立的有效负载生成器,也是msfpayload和msfencode的替代品。是用来生成后门的软件。 申明:本篇文章的用意仅做学习使用! 网络搭建环境: 软件:Vmware Workstation 17 攻击机:Ka…

【手撕C语言】多线程

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤🤔&…

Qt-QSlider样式

文章目录 QSliderQSS 代码QSlider 分析QSlider The slider is the classic widget for controlling a bounded value.It lets the user move a slider handle along a horizontal or vertical groove and translates the handles position into an integer value within the l…

Java课题笔记~ AspectJ 的开发环境(掌握)

AspectJ 的开发环境(掌握) &#xff08;1&#xff09; maven 依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></depe…

简单动态字符串 sds

Redis 设计了简单动态字符串&#xff08;Simple Dynamic String&#xff0c;SDS&#xff09;的结构&#xff0c;用来表示 字符串。相比于 C 语言中的字符串实现&#xff0c;SDS 这种字符串的实现方式&#xff0c;会提升字符串的操 作效率&#xff0c;并且可以用来保存二进制数据…

Element-Plus DatePicker获取时间戳

文章目录 0、先上答案1、渔&#xff1f;1-1 Element-Plus 官网1-2 溯源 Day.js 0、先上答案 <!-- 秒 --><el-date-pickerv-model"timeStamp"type"datetime"value-format"X"/><!-- 毫秒 --><el-date-pickerv-model"tim…

Spring Boot 最佳实践

本文翻译自国外论坛 medium&#xff0c;原文地址&#xff1a;https://medium.com/raviyasas/spring-boot-best-practices-for-developers-3f3bdffa0090 Spring Boot 是一种广泛使用且非常流行的企业级高性能框架。以下是一些最佳实践和一些技巧&#xff0c;我们可以使用它们来…

【Git分布式版本控制系统一】你还不会用Git进行项目管理?

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; 前言 众所周知&#xff0c;分布式版本控制系统git是工作以后进行项目管理必不可少的工具&#xff0c;我将繁杂的命令进行了归类整理和总结&#xff0c;供大家参考学习…

springboot+vue真实项目部署详细步骤

sprinbootvue项目详细部署步骤 文章目录 sprinbootvue项目详细部署步骤1、准备部署文件2、安装mysql2.1、配置mysql2.2、用navicat远程连接mysql导入数据2.3、导入mysql数据 3、安装jdk4、安装nginx5、安装redis6、创建对应的目录层级和启动6.1 构建启动脚本6.2 、修改两个后台…

数据库索引的使用

1、MySQL的基本架构 架构图 左边的client可以看成是客户端&#xff0c;客户端有很多&#xff0c;像我们经常你使用的CMD黑窗口&#xff0c;像我们经常用于学习的WorkBench&#xff0c;像企业经常使用的Navicat工具&#xff0c;它们都是一个客户端。右边的这一大堆都可以看成是…