史上最簡單教程:向第三方jar包注入自己的程式碼
注意:全文極短,適用於各種反編譯小白,程式小白,讀完僅需2分鐘!
我們經常使用第三方庫,但當我們遇到一些個性化需求,第三方庫沒有預留介面的時候,怎麼辦?
比如我們專案中用到友盟的社會化分享元件,但是友盟的分享對話方塊實在是醜!而他們又沒有留下足夠的介面支援我的個性化需求,比如我想給對話方塊加個圓角背景,庫中並無該介面,怎麼辦?
修改第三方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包,現在是不是可以“為所欲為”了?
當然這裡不是教唆大家去侵犯別人的成果,只是說在我們工作當中,如果可以用最小的代價完成需求,何樂而不為呢?
最後再問一句:還有比這更簡單的操作嗎?