最近想看一下華為EMUI里面的某些系統APK是如何實現的。
那如何獲取系統APK呢?
有兩種方式:
1.安裝豌豆莢,豌豆莢里有一個應用管理的功能,可以查看手機里的所有應用,包括系統應用。
可以使用該功能導出系統應用APK。
2.解包華為UPDATE.APP
(1)到華為EMUI官網下載相應的系統安裝包UPDATE.APP
(2)到華為花粉俱樂部論壇中,搜索HuaweiUpdateExtractor,當前能找到的最新版本是0.9.9.3,
目前使用該版本一般都能解包成功。
解包成功后,得到很多img文件。
系統源碼主要在SYSTEM.img中,下一步就是如何解包img文件。
(3)用蘑菇ROM助手解包img
通過蘑菇ROM助手的IMG提取功能,但是有些img無法解包,比如RECOVERY.img,不知道是什么原因。
----------------------------------------------------分割線--------------------------------------------------------------------------
解包SYSTEM.img成功后,就可以看到系統的內容。
在app路徑下有所有系統應用,找到相應的APK,進行反編譯即可看到源碼。
APK反編譯方法有很多,此篇不進行贅述。
APK第一步反編譯后只能得到smali文件,若要查看java文件,可以借助Smali2Java工具,但是這個工具已經很久沒有提供支持,不一定能轉換成功。
懂Smali語法后,可以直接查看Smali文件,也能理解APK的實現細節。
--------------------------------------------------分割線----------------------------------------------------------------------------
今天解包EMUI5.1的安裝包后發現,所有系統應用都進行了odex化,即每個應用都分為odex和apk文件,如果直接反編譯apk文件,只能得到資源文件,
為什么odex化?可以參考這篇文章:揭秘ODEX——有ODEX版ROM與無ODEX版ROM區別
據說這樣系統升級時第一次啟動速度會加快。
反編譯odex可以用baksmali,但是很遺憾,今天下載最新版本baksmali-2.1.2,使用時出現:Unsupported oat version:45錯誤,
反編譯無法進行,到官網查看后發現:
也就是說目前不支持45版本。暫時沒有找到解決辦法。