天天看點

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

前言:

在實際開發中,手機适配是一個大問題,特别是适配各大手機廠商的系統,也是操碎了心。為了攻克一些難題,适當反編譯系統是必不可少的。

擷取各大手機廠商的系統源碼,有以下幾種方式:

  • 有指定系統的手機:手機USB連接配接,adb pull 拷貝出system檔案夾的檔案。
  • 沒有指定系統的手機:去官網或者各大rom網站,下載下傳各大手機廠商的rom系統包。

1. 通過Rom包擷取手機廠商的系統源碼:

找rom網站或者對應需要系統的官網,下載下傳rom包。這裡以Oppo A33為例子,下載下傳好對應rom包,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

通過解壓工具,打開可以看到rom包中system.img ,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

安裝rom助手,且打開解壓後擷取到的system.img,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

解析後看到system檔案下的全部檔案,包含系統app和framework層的源碼,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

編譯framework層中源碼,在5.0以下,找到framework.jar和service.jar。而在5.0以上通常找到boot.oat和service.odex檔案,需要進一步反編譯。

2. 通過adb pulll方式擷取手機中系統源碼:

用手機通過USB連接配接到電腦,打開開發者模式後,找到androidstudio 中sdk,再找到到adb.exe所在的檔案夾,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

在該檔案夾上最頂端輸入cmd,打開指令行。為了檢視system檔案夾下的檔案,依次輸入以下指令:

adb shell

cd system

ls -a

,就可以看到對應的檔案,最後輸入

exit

關閉本次操作。效果如下:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

這裡可以看到system檔案夾下,包含了很多的檔案,有framwork層源碼,有系統app,有字型等等。

接下來,拷貝system中的framework源碼,指定電腦存放路徑,輸入以下指令

adb pull system/framework D:/system/jingli

。這裡,存放在d盤中system檔案夾下的jingli檔案中。效果如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

拷貝成功後,打開jinglin檔案夾,可以看到對應的源碼,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

若是想檢視系統app的源碼,也可以通過adb pull方式拷貝。系統app一般存在system的app和pri-app檔案夾下。

找到boot.oat和service.odex檔案,如下圖所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)
Android反編譯之各大手機廠商的系統(adb pull和Rom包)

3. oat2dex反編譯系統,jadx檢視編譯後的系統源碼:

oat2dex是一個非常強大系統源碼反編譯的工具,輸入以下指令行可以檢視到具體如何使用,如下所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

這裡可以看到,oat2dex工具可以生成odex檔案,smali檔案,dex檔案。

接下來,将boot.oat和service.odex拷貝到oat2dex工具同一個檔案下,輸入指令進行反編譯。

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

反編譯boot.oat,擷取framework層的源碼,輸入指令行

java -jar oat2dex.jar boot boot.oat

,如下所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

檢視編譯成功的dex檔案如下所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

反編譯service.odex,擷取service層的源碼,輸入指令行

java -jar oat2dex.jar odex services.odex

,如下所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

檢視編譯成功的dex檔案如下所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

通過jadx工具打開對應的dex檔案,如下所示:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

若是對某個手機上的launcher感興趣,也可以反編譯,這裡以小辣椒的launcher為例子,打開如下:

Android反編譯之各大手機廠商的系統(adb pull和Rom包)

若是感興趣,可以點選下載下傳,Android反編譯工具包。

關于Android反編譯的教程:

  • Android反編譯之APK(apktool、dex2jar、jd、jadx)

繼續閱讀