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

背景:

对于某些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.mzph.cn/news/31566.shtml

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

相关文章

卡巴斯基为基于Linux的嵌入式设备推出专用解决方案

导读卡巴斯基在其卡巴斯基嵌入式系统安全产品中引入了对 Linux 的支持。这种适应性强的多层解决方案现在为基于Linux的嵌入式系统、设备和场景提供优化的安全,合通常适用于这些系统的严格监管标准。 卡巴斯基在其卡巴斯基嵌入式系统安全产品中引入了对 Linux 的支持…

js-7:javascript原型、原型链及其特点

1、原型 JavaScript常被描述为一种基于原型的语言-每个对象拥有一个原型对象。 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字…

Oracle 开发篇+Java通过HiKariCP访问Oracle数据库

标签:HikariCP、数据库连接池、JDBC连接池、释义:HikariCP 是一个高性能的 JDBC 连接池组件,号称性能最好的后起之秀,是一个基于BoneCP做了不少的改进和优化的高性能JDBC连接池。 ★ Java代码 import java.sql.Connection; impor…

品牌渠道控价常见问题有哪些

不管是哪个品牌在做控价时,会遇到的问题都是相通的,如果筛选低价、窜货链接,如何去治理这些链接,使其下架,或者是改价。也会有品牌需要针对渠道中的乱价问题进行提前预警或者规避,这些可以通过分析电商数据…

Chatgpt API调用报错:openai.error.RateLimitError

Chatgpt API 调用报错: openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 import openai import osopenai.api_key os.getenv("OPENAI_API_KEY")result openai.Chat…

linux onlyOffice docker 离线部署

文章目录 前言1. 安装Docker容器2. 拉取镜像3. 验证 前言 docker 离线安装onlyoffice,如在线安装可直接跳过导出导入镜像步骤,拉取后直接运行。 1. 安装Docker容器 下载文件 wget https://download.docker.com/linux/static/stable/x86_64/docker-19…

竞赛项目 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &#x…

文盘Rust -- Mutex解决并发写文件乱序问题 | 京东云技术团队

在实际开发过程中,我们可能会遇到并发写文件的场景,如果处理不当很可能出现文件内容乱序问题。下面我们通过一个示例程序描述这一过程并给出解决该问题的方法。 use std::{fs::{self, File, OpenOptions},io::{Write},sync::Arc,time::{SystemTime, UNI…

如何使用html,包括css,js 画思维导图?有哪些可用的方法?

首先&#xff0c;创建一个新的HTML文件&#xff0c;可以使用任何文本编辑器。在文件中添加必要的标签和结构来定义网页的内容和布局。 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>Mind Map</title><link re…

python中字符串内建函数之find / rfind 、index / rindex的区别

一、find(str, beg, end)/index(str, beg, end) 从左到右查找某个符号在字符串中第一次出现的位置&#xff0c;返回正向下标(从字符串左边开始查询字符串匹配到的第一个索引) 二、rfind(str, beg, end)/rindex(str, beg, end) 从右到左查找某个符号第一次出现的位置&#xff0c…

Redis_概述

1.redis概述 1.1 简介 截止到2021年12月 数据库排名https://db-engines.com/en/ranking redis(Remote Dictionary Server) 一个开源的key-value存储系统它支持存储的Value类型&#xff1a;包括String(字符串),list(链表),set(集合),zset(sorted set 有序集合),hash(哈希类型…

ad+硬件每日学习十个知识点(27)23.8.7 (DCDC的datasheet)

文章目录 1.DCDC拿到手册需要关注的参数2.MOS选型3.TPS54331的ECO模式&#xff08;跳跃模式&#xff0c;损耗小、纹波大&#xff09;4.TPS54331的引脚功能&#xff08;BOOT这里没太看懂&#xff0c;之后回来再看看&#xff09;5.TPS54331的额定值6.TPS54331在test条件下的电气特…

【Linux】【预】配置网络IP,挂载网络目录

【Linux】【预】配置网络IP&#xff0c;挂载网络目录 1. 配置查看IP2.配置Linux中的IP3. 串口连接开发板&#xff0c;配置 1. 配置查看IP a . 查看ipifconfig如下操作&#xff0c;其中的&#xff1a;192.168.252.140就是它的IP b . 使用xmodem 连接到虚拟机&#xff0c;最后点…

前端css + js +vue +element-ui 实现响应式布局,根据浏览器窗体大小自动响应

前端css js vue element-ui 实现响应式布局&#xff0c;根据浏览器窗体大小自动响应 1、环境2、js代码3、代码解释1、定义对象2、定义方法3、监听窗口变化&#xff0c;计算比例值&#xff0c;并赋值给transform 属性4、实现监听 3、html 代码4、特别注意 1、环境 我的环境是e…

c++ | this指针 和bind、function

个人理解&#xff1a; this 指针 可以简单理解为类 对象的 指针&#xff08;也是隐藏指针&#xff09;&#xff0c;注意&#xff0c;类的成员&#xff08;成员函数、成员变量&#xff09;是通过类的对象进行调用的。如果把函数充当成员函数是错误的&#xff0c;粗鲁的解释&…

对于企业:数字化的趋势不可阻挡.以无代码开发实现敏捷交付

在科技日新月异的今天&#xff0c;我们正处在一个由数据驱动的时代。为了在这个时代中占据一席之地&#xff0c;我们需要不断探索新的开发模式&#xff0c;以适应不断变化的市场需求。其中&#xff0c;无代码开发模式正逐渐成为引领未来科技的关键。 一、什么是无代码开发 无代…

判断时间段是否重叠

1、逻辑公式 时间段1&#xff1a;start1&#xff08;开始时间&#xff09;&#xff0c;end1&#xff08;结束时间&#xff09; 时间段2&#xff1a;start2&#xff08;开始时间&#xff09;&#xff0c;end2&#xff08;结束时间&#xff09; 重叠条件为&#xff1a;start1 <…

unity修改单个3D物体的重力的大小该怎么处理呢?

在Unity中修改单个3D物体的重力大小可以通过以下步骤实现&#xff1a; 创建一个新的C#脚本来控制重力&#xff1a; 首先&#xff0c;创建一个新的C#脚本&#xff08;例如&#xff1a;GravityModifier.cs&#xff09;并将其附加到需要修改重力的3D物体上。在脚本中&#xff0c…

SpringBoot整合多数据源

SpringBoot整合多数据源 在实际企业项目开发中&#xff0c;我们经常会在SpringBoot项目中配置多数据源&#xff0c;一方面可以减缓数据库压力&#xff0c;另一方面可以也是业务需求的场景 下面就来看看如何在SpringBoot项目中配置多数据源 POM 在配置多数据源之前&#xff…

reactNative跳转appstore链接报错:Redirection to URL with a scheme that is not HTTP(S)

在reactnative中webview跳转H5下载页面&#xff0c;包错Redirection to URL with a scheme that is not HTTP(S) 在webview中添加一下代码 const onShouldStartLoadWithRequest (event: any) > {const { url } event;console.log(url);if (url.startsWith(https://itune…