华为EMUI9.0升到9.1后系统UI的响应有一定的提升, 但没官方说的那么快,方舟编译器重新编译过的是系统应用, 结合新的文件系统EROFS, 硬把虚拟机跑的UI优化成这样,不简单了。顺路吐槽下月亮模式,这样搞拍摄都没乐趣了。
华为的修炼了深厚的内功,但营销也是炸天。鸿蒙昨天发布,方舟还不见踪影,有点吊人胃口的造势。
今天先谈下方舟,百度了下,JIT, AOT之类,说是跳过虚拟机,直接转成机器码,具体是怎样,没个定论。既然EMUI9.1都有方舟编译过的系统应用,去反编译去看下就好了。
网上有说华为市场的微博极速版是方舟编译的,我用jadx轻松反编译过, dex也在是正常不过的android apk。顺路扯下, 微博为了快可能没加壳, 就混淆了下, 通信串行化可能用的thrift, 应该蛮快。推送标准的集成了各大厂商的推送服务,统一推送联盟的推必达看来也是雷声大雨点小。
那就尝试找找官方的应用, 到华为应用华为下载时钟, 华为市场的apk, 能顺路反编译的多数都不是了。
最后只能尝试从手机去找系统级的应用,设置或者相机可能是。USB连接, 开发者模式, 打开debug, 用adb通过包名去找应该可以。百度现学现卖。
找到手机所有的应用
D:Project>adb shell pm list packagespackage:com.huawei.scenepackpackage:com.android.cts.priv.ctsshimpackage:com.huawei.camerapackage:com.hpbr.bosszhipinpackage:com.huawei.android.tipspackage:com.google.android.ext.servicespackage:com.huawei.synergypackage:com.huawei.android.launcherpackage:com.android.gallery3d.overlaypackage:com.android.mediacenterpackage:com.android.providers.telephonypackage:com.unionpay.tsmservicepackage:com.huawei.androidx......
com.huawei开头的包可能是系统应用, 以相机为例,
查找包的安装路径
D:Project>adb shell pm path com.huawei.camerapackage:/product/app/HwCamera2/HwCamera2.apk
拷贝apk
D:Project>adb pull /product/app/HwCamera2/HwCamera2.apk/product/app/HwCamera2/HwCamera2.apk: 1 file pulled. 30.2 MB/s (49544076 bytes in 1.565s)
反编译一看, 悲催了, 相机app为撒不用方舟build下。40多MB蛮大的apk, okhttp和glide看来是主流了。至于为什么叫camera2, 或者用的是android camera2接口?
依葫芦画瓢,继续找啊,终于找到两个特殊点的。这些应用的路径在/system/app下, 应该都是系统级的应用。
package:com.huawei.synergypackage:com.huawei.android.launcher
jadx反编译为空, 估计是了。 用解压工具看下apk结构.
这下干净了, dex找不到了, 出去assets,res这些资源类的东西,最大的都集中在了resources.arsc里面。我们找最新的apktool 2.4.0看能不能解压出来。
E:>apktool.bat d HwLauncher6.apkI: Using Apktool 2.4.0 on HwLauncher6.apkI: Loading resource table...I: Decoding Shared Library (androidhwext), pkgId: 2W: Unknown data detected. Skipping: 1920 byte(s)......I: Decoding values */* XMLs...Exception in thread "main" java.lang.NullPointerException at brut.androlib.res.data.value.ResEnumAttr.serializeBody(ResEnumAttr.java:56) at brut.androlib.res.data.value.ResAttr.serializeToResValuesXml(ResAttr.java:64) at brut.androlib.res.AndrolibResources.generateValuesFile(AndrolibResources.java:704) at brut.androlib.res.AndrolibResources.decode(AndrolibResources.java:263) at brut.androlib.Androlib.decodeResourcesFull(Androlib.java:131) at brut.androlib.ApkDecoder.decode(ApkDecoder.java:124) at brut.apktool.Main.cmdDecode(Main.java:167) at brut.apktool.Main.main(Main.java:76)
一堆报警和错误。
感觉resources.arsc不是符合android标准的格式了。 至于是不是AOT的规范, 笔者只是业余玩下android不确定, 方舟编译出来的东西估计需要厂商的ROM去做支撑吧。 所以这个生态,兼容性, 硬件厂商,手机厂商,app厂商的利益,不烧钱怎么摆得平, 技术再好也只是个工具,没有资本的支撑也是假的。
所谓的技术和开源现在慢慢是有国界的,华为我们必须是要支持的,尽量不大喜欢华为的营销风格。师夷长技以制夷, 闭关是没出路的。
后面有空我们再聊聊鸿蒙, Fuchsia, Flutter, 宏内核/微内核, LiteOS, Little Kernel。