史上最简单教程:向第三方jar包注入自己的代码

注意:全文极短,适用于各种反编译小白,程序小白,读完仅需2分钟!

我们经常使用第三方库,但当我们遇到一些个性化需求,第三方库没有预留接口的时候,怎么办?

比如我们项目中用到友盟的社会化分享组件,但是友盟的分享对话框实在是丑!而他们又没有留下足够的接口支持我的个性化需求,比如我想给对话框加个圆角背景,库中并无该接口,怎么办?

修改第三方jar包,注入代码?但是我是一个反编译小白,唯一会用的反编译工具就是gui,怎么办?

下面以“给友盟分享对话框加圆角背景”为例,介绍 如何简单快速的将自己的代码注入第三方jar包中

代码定位

首先我们要看第三方jar包的源码,定位到具体需要修改的文件位置。

用gui看了看源码,对话框的构造过程在 umeng_social_shareboard.jarUMActionFrame文件的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新建一个工程,导入这些文件。

史上最简单教程:向第三方jar包注入自己的代码_第1张图片

没错,全是错,因为没有依赖包,下面将友盟sdk中的相关jar包导入到工程下libs文件中:

史上最简单教程:向第三方jar包注入自己的代码_第2张图片

这次世界清静了!

然后我们就可以改改改了,先在ShareBoardConfig中添加mShareboardBgDrawable

史上最简单教程:向第三方jar包注入自己的代码_第3张图片

再添加接口:

史上最简单教程:向第三方jar包注入自己的代码_第4张图片

然后在UMActionFrame中添加具体实现:

史上最简单教程:向第三方jar包注入自己的代码_第5张图片

如此便完成了全部操作,我就说吧,没有任何技术含量!

导出jar包

接下来就是重新生成jar包了,右键工程–>Export,选择jar:

史上最简单教程:向第三方jar包注入自己的代码_第6张图片

我们只需要java代码,所以勾掉多余的文件:

史上最简单教程:向第三方jar包注入自己的代码_第7张图片

确定,一个崭新的被hack过的jar包诞生了,替换原来的jar包,现在是不是可以“为所欲为”了?

当然这里不是教唆大家去侵犯别人的成果,只是说在我们工作当中,如果可以用最小的代价完成需求,何乐而不为呢?

最后再问一句:还有比这更简单的操作吗?

你可能感兴趣的:(Android开发技巧)