史上最简单教程:向第三方jar包注入自己的代码
2017-11-02 16:01
281 查看
注意:全文极短,适用于各种反编译小白,程序小白,读完仅需2分钟!
我们经常使用第三方库,但当我们遇到一些个性化需求,第三方库没有预留接口的时候,怎么办?
比如我们项目中用到友盟的社会化分享组件,但是友盟的分享对话框实在是丑!而他们又没有留下足够的接口支持我的个性化需求,比如我想给对话框加个圆角背景,库中并无该接口,怎么办?
修改第三方jar包,注入代码?但是我是一个反编译小白,唯一会用的反编译工具就是gui,怎么办?
下面以“给友盟分享对话框加圆角背景”为例,介绍 如何简单快速的将自己的代码注入第三方jar包中
用gui看了看源码,对话框的构造过程在
而UI的个性化配置,是在
我们可以看到,只有按钮的drawable,其中并没有背景drawable。
也就是说,我只需要在
好,下面开始干!
用
没错,全是错,因为没有依赖包,下面将友盟sdk中的相关jar包导入到工程下libs文件中:
这次世界清静了!
然后我们就可以改改改了,先在
再添加接口:
然后在
如此便完成了全部操作,我就说吧,没有任何技术含量!
我们只需要java代码,所以勾掉多余的文件:
确定,一个崭新的被hack过的jar包诞生了,替换原来的jar包,现在是不是可以“为所欲为”了?
当然这里不是教唆大家去侵犯别人的成果,只是说在我们工作当中,如果可以用最小的代价完成需求,何乐而不为呢?
最后再问一句:还有比这更简单的操作吗?
我们经常使用第三方库,但当我们遇到一些个性化需求,第三方库没有预留接口的时候,怎么办?
比如我们项目中用到友盟的社会化分享组件,但是友盟的分享对话框实在是丑!而他们又没有留下足够的接口支持我的个性化需求,比如我想给对话框加个圆角背景,库中并无该接口,怎么办?
修改第三方jar包,注入代码?但是我是一个反编译小白,唯一会用的反编译工具就是gui,怎么办?
下面以“给友盟分享对话框加圆角背景”为例,介绍 如何简单快速的将自己的代码注入第三方jar包中
代码定位
首先我们要看第三方jar包的源码,定位到具体需要修改的文件位置。用gui看了看源码,对话框的构造过程在
umeng_social_shareboard.jar中
UMActionFrame文件的
createShareboardLayout方法里,整个过程都是代码编写。
而UI的个性化配置,是在
ShareBoardConfig文件中:
boolean mTitleVisibility; String mTitleText; int mTitleTextColor; boolean mCancelBtnVisibility; String mCancelBtnText; int mCancelBtnColor; int mCancelBtnBgColor; int mCancelBtnBgPressedColor; int mShareboardPosition; int mShareboardBgColor; Drawable mCancelButtonBgDrawable; int mMenuBgShape; int mMenuBgShapeAngle; int mMenuBgColor; int mMenuBgPressedColor; int mMenuTextColor; int mMenuIconPressedColor; int mTopMargin;
我们可以看到,只有按钮的drawable,其中并没有背景drawable。
也就是说,我只需要在
ShareBoardConfig中添加新的成员变量—
Drawable mShareboardBgDrawable,然后添加接口,再在
UMActionFrame中完成添加背景的操作就行了。
好,下面开始干!
注入代码
接下来的操作,真的真的没有技术含量!用
gui打开
umeng_social_shareboard.jar包,然后
File --> Save All Sources保存反编译后的文件,得到一个压缩包
umeng_social_shareboard.src.zip,将文件解压出来后,用eclipse新建一个工程,导入这些文件。
没错,全是错,因为没有依赖包,下面将友盟sdk中的相关jar包导入到工程下libs文件中:
这次世界清静了!
然后我们就可以改改改了,先在
ShareBoardConfig中添加
mShareboardBgDrawable:
再添加接口:
然后在
UMActionFrame中添加具体实现:
如此便完成了全部操作,我就说吧,没有任何技术含量!
导出jar包
接下来就是重新生成jar包了,右键工程–>Export,选择jar:我们只需要java代码,所以勾掉多余的文件:
确定,一个崭新的被hack过的jar包诞生了,替换原来的jar包,现在是不是可以“为所欲为”了?
当然这里不是教唆大家去侵犯别人的成果,只是说在我们工作当中,如果可以用最小的代价完成需求,何乐而不为呢?
最后再问一句:还有比这更简单的操作吗?
相关文章推荐
- canvas元素简易教程(8)(大部分转自火狐,自己只写了简单的代码分析)
- canvas元素简易教程(9)(大部分转自火狐,自己只写了简单的代码分析)
- canvas元素简易教程(10)(转自火狐,自己只写了简单的代码分析)
- canvas元素简易教程(7)(大部分转自火狐,自己只写了简单的代码分析)
- 简单好用的Nhibernate代码自动生成工具,自己写的基于动软代码生成器Nhibernate代码自动生成模板及图文教程
- 简单使用Git和Github来管理自己的代码和读书笔记
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- eoLinker-AMS接口管理系统 代码注入教程
- ios在系统代码中注入自己的代码
- 简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。
- 从0开始搭建自己的个人网站教程(三)如何把代码部署到虚拟主机
- Model to Text工具Acceleo使用教程(三)——一个简单的代码生成模块
- 向一个运行中的进程注入自己的代码
- 【HACK】破解APK并注入自己的代码
- html制作简单框架网页二 实现自己的影音驿站 操作步骤及源文件下载 (可播放mp4、avi、mpg、asx、swf各种文件的视频播放代码)
- 也发一个自己实现的android简单文件选择器代码。支持多卡,排序
- SQL之自己还没来得及看的提纲(以及sqlmap的使用教程简单)
- ::自己写的一个超简单的ASP分页代码::
- 简单使用Git和Github来管理自己的代码和读书笔记