1. 程式人生 > >史上最簡單教程:向第三方jar包注入自己的程式碼

史上最簡單教程:向第三方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新建一個工程,匯入這些檔案。

這裡寫圖片描述

沒錯,全是錯,因為沒有依賴包,下面將友盟sdk中的相關jar包匯入到工程下libs檔案中:

這裡寫圖片描述

這次世界清靜了!

然後我們就可以改改改了,先在ShareBoardConfig中新增mShareboardBgDrawable

這裡寫圖片描述

再新增介面:

這裡寫圖片描述

然後在UMActionFrame中新增具體實現:

這裡寫圖片描述

如此便完成了全部操作,我就說吧,沒有任何技術含量!

匯出jar包

接下來就是重新生成jar包了,右鍵工程–>Export,選擇jar:

這裡寫圖片描述

我們只需要java程式碼,所以勾掉多餘的檔案:

這裡寫圖片描述

確定,一個嶄新的被hack過的jar包誕生了,替換原來的jar包,現在是不是可以“為所欲為”了?

當然這裡不是教唆大家去侵犯別人的成果,只是說在我們工作當中,如果可以用最小的代價完成需求,何樂而不為呢?

最後再問一句:還有比這更簡單的操作嗎?