最近不知道怎麼回事,忽然把我那刷了氧OS的root了,而後就開始好奇起來氫OS所帶有的那些本地化的東西,好比通話錄音就是典型的一個之一。其中也作了不少的嘗試,XDA上有人說把/system/build.prop裏面的"persist.sys.oem.region"的值改爲「CN」,我嘗試了一下確實能夠,可是有的APP出現了崩潰卡死的問題,我發現改了後設置裏面系統版本變成了氫OS,而後三大金剛鍵都變成了又返回在右邊了,短信默認的都出現了氫的卡片效果,電話設置裏面也有了通話錄音,一切都成了氫OS的樣子,可是反作用是好多的第三方APP出新了不能運行崩潰等各類問題。
因而又把build.prop改爲了本來的樣子,而後開始了反編譯的探索之旅,因而就有了這篇博客,好多中文的博客寫的都過期了,真的是好幾天各類挖坑填坑爬坑的結果。本文的反編譯是在Android7.1.1環境下在mac操做系統下操做的
好了廢話說完了,一些概念諸如爲何有odex,odex之於apk裏面的dex,下面開始正文
***
修改這種系統預裝的app而後再打包理論上須要通過如下步驟html
odex -> smali files -> dex -> jar -> modify smali files -> dex -> apk(包括class.dex的apk)
一開始我就是按照這個步驟來的,由於odex依賴的系統版本比較高,好多中文博客介紹的都是過期的工具,致使中間遇到了太多太多的坑。由於我弄的這個apk是控制電話接通後的童話的那個邏輯的,因此每次弄好了還要把apk複製到手機裏面,而後再複製到/system/priv-app裏面,而後改權限,還要保存以前的備份等的東西而後再重啓手機,再撥打電話嘗試,因此操做步驟極其繁瑣。應該有更好的方法,只不過目前還懶的去發現。java
java -jar baksmali-2.2.1.jar deodex OPInCallUI.odex -b ./framework/arm64/boot.oat -o OPInCallUI
deodex參數,指定要操做的文件名爲「OPInCallUI.odex」
-b參數,指定bootclasspath,也就是要把手機rom的/system/framework裏面的文件直接拷貝到電腦上的當前工做目錄
-o參數,指定輸出的smali文件的目錄
java -jar smali-2.2.1.jar assemble OPInCallUI -o classes_o.dex
assemble參數,指定smali files的文件夾所在
-o參數,指定輸出的文件名爲「classes_o.dex」
./dex2jar-2.0/d2j-dex2jar.sh classes_o.dex -o classes_o.jar
意思是把「classes_o.dex」轉成「classes_o.jar」
java -jar smali-2.2.1.jar assemble OPInCallUI -o classes.dex
注意:android
boot.oat依賴的時候要拷貝全面,要否則就會報錯git
Error occurred while loading class path files. Aborting.
org.jf.dexlib2.analysis.ClassPathResolver$ResolveException: Error while loading oat file ./boot.oat
具體的有篇文章,介紹了boot.oat和boot.art等的關係。初探boot.art與boot.oatgithub
減小中間環節,我查過各類資料後總結出來流程應該是這個樣子的
app
odex -> smali files -> dex -> jar -> modify jar -> dex -> apk(包括class.dex的apk)
org.jf.dexlib2.analysis.AnalysisException: Could not resolve the method in class Ljava/lang/reflect/Method;
以此順延下去,確定打包的程序不能運行了。
而後步驟多了出錯的地方就更多了,定位起問題來就更麻煩了。編輯器
安利一個Google的工具吧android-classyshark,用來查看apk的包資源,類方法名等的工具,簡直利器。再加一個插件intellij-java2smali,很方便的把java轉成smali查看
***ide
其實此次反編譯的初衷來源於想讓個人一加3T手機的氧OS可以像氫同樣擁有通話錄音的功能。而後經歷的種種,還受oos-call-recording項目的影響,還問了厚臉皮的問了做者原理。如今我也自建了一個項目,會上傳我微改的系統的APP,使氧OS的系統APP擁有氫OS的功能,而又不失去氧OS更新快的特色。項目的地址爲https://github.com/ysk666666/OxygenOS-SystemAppModified工具