1. 程式人生 > >Android原始碼APK剝離到eclipse除錯執行教程

Android原始碼APK剝離到eclipse除錯執行教程

轉載請註明出處多謝

廢話不多說,簡單介紹下流程有問題歡迎提問

1.首先把原始碼匯入eclipse。

例如email,原始碼目錄是package/app/email 這個資料夾拿出來,然後在eclipse中使用 file,import,existing Android code into workspace匯入

這樣工程匯入了eclipse,會有很多錯誤,莫慌

2.觀察Android.mk檔案

原始碼中,app的src同級資料夾都會有Android.mk檔案指導編譯,開啟觀察

類似這樣的,是需要一些資原始檔,這樣你就需要在原始碼找到對應的目錄把src 刪除,只保留res,然後作為Android library匯入即可。

chips_dir := ../../../frameworks/ex/chips/res
unified_email_dir := UnifiedEmail
photo_dir := ../../../frameworks/opt/photoviewer/res ../../../frameworks/opt/photoviewer/appcompat/res

如何把一個工程作為Android library呢,如下,右鍵工程的property:


然後在需要除錯的主工程右鍵property


這樣之後需要的RES資原始檔基本就沒問題了。

接下來是需要的jar包。需要注意的是jar包中是不包含res 檔案的所以需要上面的步驟。

需要匯入哪些jar包也是在Android.mk檔案:

Android.mk中如下的則是需要匯入的jar包

LOCAL_STATIC_JAVA_LIBRARIES := android-common com.android.emailcommon guava
LOCAL_STATIC_JAVA_LIBRARIES += libphotoviewer_appcompat
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-gridlayout
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
LOCAL_STATIC_JAVA_LIBRARIES += android-opt-bitmap
LOCAL_STATIC_JAVA_LIBRARIES += android-opt-datetimepicker
LOCAL_STATIC_JAVA_LIBRARIES += owasp-html-sanitizer

那麼這些jar包可以到哪裡找到呢,在原始碼的\out\target\common\obj\JAVA_LIBRARIES這裡面找到對應的如android-support-v7-appcompat資料夾,進去的class.jar就是。

注意,原始碼需要編譯過才有out目錄

我們可以把他提取出來,重新命名為android-support-v7-appcompat.jar

3.關聯jar包及遇到問題

依舊右鍵工程,property 如下選擇jar包存放的路徑


問題:

把所有jar包都匯入後,有可能會執行崩潰。這是因為有的包需要打包到APK裡,不光編譯時需要這些包,執行時也要。如下打鉤,並且順序也有影響,framework的包一般都要在最上面,包也不能隨便打鉤,需要具體自己試試。像framework是不需要打鉤的。


另外還有可能遇到報錯

Multiple dex files define 這種錯誤如下


這是因為有兩個包都有 報錯的Landorid/support/annotation/Animres,因此重複了。

可以直接在壓縮的情況下開啟jar包,看看哪些包有這個報錯的檔案,直接在壓縮的狀態下刪除重複的包即可。

最後有一些系統APK,剝離出來也需要進行簽名才能正常執行,這個要根據每個平臺來了。

基本上就是這樣,歡迎大家留言討論,轉載請註明出處