將.apk 和.odex 合併的簡單記錄

新買的手機裏面的收音機的軟體總覺得不好用,而舊手機裏的不錯,但因為是廠商原來內建在系統內的,網上好像沒看到單獨下載,就只能自己動手了,不少APP轉移的工具都只能轉移後來裝的,內建的不會幫你選,那內建的APP位於/system/app下面,只拷貝apk出來是不行的,因為還有一個odex的文件,為什麼要這樣子,可以自己谷歌或者百度一下,我們要做的就是把這2個文件合併起來再簽名

 

工作步驟,首先電腦裏要裝java,打開CMD後,輸入java能顯示相關訊息就說明OK了,當然如果有安裝但是不顯示,說明沒加到系統的PATH裏面

下載smali.jar和baksmali.jar,地址為https://bitbucket.org/JesusFreke/smali/downloads

該項目的地址為:https://github.com/JesusFreke/smali

簽名的jar:signapk.jar及一些證書等,項目地址為:https://github.com/appium/sign

手機里root/system/framework整個資料夾及你需要合併的apk和odex文件

 

首先做文件的合併,文件位置可以參考這個圖

image.png

system下面是framework資料夾,也就是手機原本整個資料夾

然後我們先在cmd裏切換到圖中的資料夾位置,執行

java -jar baksmali-2.1.3.jar -d ./system/framework -x FM.odex

如果上面的位置沒有放好,則執行上面的指令時候可能會看到類似下面的錯誤訊息

Error occurred while loading boot class path files. Aborting.
org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/core.odex
        at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:277)
        at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:182)
        at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:67)
        at org.jf.baksmali.main.run(main.java:113)
        at org.jf.baksmali.main.main(main.java:322)

執行完後在當前的資料夾下會增加一個out的資料夾,然後再執行

java -Xmx512M -jar smali-2.1.3.jar out -o classes.dex

就會在當前資料夾增加一個classes.dex文件,然後使用winrar或者7zip打開fm.apk,把classes.dex文件添加進去,保存即可。

因為apk我們修改過了,所以此apk在手機裏會因為安全問題不讓你安裝,你需要重新簽名,把新的fm.apk拷貝到下面的資料夾當中,拖到auto_signapk.bat上後,在當前目錄下就會增加一個FM-new.apk文件,這個FM-new.apk就可以複製到手機中來安裝了,只是因為硬體不同的原因吧,我的手機還是無法使用舊款手機的收音機軟體

 

image.png

 

最後附上述的文件下載,不包含framework资料夹下的內容,這個需要你自己手機裏面的

apk