最近想看一下华为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版本。暂时没有找到解决办法。