前言:
在實際開發中,手機适配是一個大問題,特别是适配各大手機廠商的系統,也是操碎了心。為了攻克一些難題,适當反編譯系統是必不可少的。
擷取各大手機廠商的系統源碼,有以下幾種方式:
- 有指定系統的手機:手機USB連接配接,adb pull 拷貝出system檔案夾的檔案。
- 沒有指定系統的手機:去官網或者各大rom網站,下載下傳各大手機廠商的rom系統包。
1. 通過Rom包擷取手機廠商的系統源碼:
找rom網站或者對應需要系統的官網,下載下傳rom包。這裡以Oppo A33為例子,下載下傳好對應rom包,如下圖所示:
通過解壓工具,打開可以看到rom包中system.img ,如下圖所示:
安裝rom助手,且打開解壓後擷取到的system.img,如下圖所示:
解析後看到system檔案下的全部檔案,包含系統app和framework層的源碼,如下圖所示:
編譯framework層中源碼,在5.0以下,找到framework.jar和service.jar。而在5.0以上通常找到boot.oat和service.odex檔案,需要進一步反編譯。
2. 通過adb pulll方式擷取手機中系統源碼:
用手機通過USB連接配接到電腦,打開開發者模式後,找到androidstudio 中sdk,再找到到adb.exe所在的檔案夾,如下圖所示:
在該檔案夾上最頂端輸入cmd,打開指令行。為了檢視system檔案夾下的檔案,依次輸入以下指令:
adb shell
、
cd system
、
ls -a
,就可以看到對應的檔案,最後輸入
exit
關閉本次操作。效果如下:
這裡可以看到system檔案夾下,包含了很多的檔案,有framwork層源碼,有系統app,有字型等等。
接下來,拷貝system中的framework源碼,指定電腦存放路徑,輸入以下指令
adb pull system/framework D:/system/jingli
。這裡,存放在d盤中system檔案夾下的jingli檔案中。效果如下圖所示:
拷貝成功後,打開jinglin檔案夾,可以看到對應的源碼,如下圖所示:
若是想檢視系統app的源碼,也可以通過adb pull方式拷貝。系統app一般存在system的app和pri-app檔案夾下。
找到boot.oat和service.odex檔案,如下圖所示:
3. oat2dex反編譯系統,jadx檢視編譯後的系統源碼:
oat2dex是一個非常強大系統源碼反編譯的工具,輸入以下指令行可以檢視到具體如何使用,如下所示:
這裡可以看到,oat2dex工具可以生成odex檔案,smali檔案,dex檔案。
接下來,将boot.oat和service.odex拷貝到oat2dex工具同一個檔案下,輸入指令進行反編譯。
反編譯boot.oat,擷取framework層的源碼,輸入指令行
java -jar oat2dex.jar boot boot.oat
,如下所示:
檢視編譯成功的dex檔案如下所示:
反編譯service.odex,擷取service層的源碼,輸入指令行
java -jar oat2dex.jar odex services.odex
,如下所示:
檢視編譯成功的dex檔案如下所示:
通過jadx工具打開對應的dex檔案,如下所示:
若是對某個手機上的launcher感興趣,也可以反編譯,這裡以小辣椒的launcher為例子,打開如下:
若是感興趣,可以點選下載下傳,Android反編譯工具包。
關于Android反編譯的教程:
- Android反編譯之APK(apktool、dex2jar、jd、jadx)