方舟編譯器處理第一款APP發佈嚐鮮以及簡要分析

一、華爲EMUI10.1系統更新說明:

二、華爲應用市場下載到的最新的3.6.1版本的新浪新聞極速版本說明:

三、測試一下:

3.1性能

我也做了對比在同一個level的非華爲手機上,發現冷啓動在某些時候快,熱啓動差不多,雖然性能沒有想象的那麼大,但是這是一個方舟正式對外產品開始的信號,期待後面對於性能的優化。

3.2運行測試

觀察安裝包發現一個不一樣的地方:

很明顯,因爲maple就是方舟編譯器處理完以後的中間文件名稱,打開以後發現:

在分析之前測試一下看有沒有脫離安卓的java虛擬機:

右邊是我刪除了幾乎所有的dex類和方法,只保留一個dex的殼,避免系統的檢測,沒有的話可能安裝不上,然後重新打包,在華爲EMUI10.1上運行完全沒問題,說明方舟編譯處理以後的APP完全脫離了dalvik/art,真的是NB。

由於手機沒辦法root,簡單運行時候觀察日誌也可以看到啓動時候的一個基本maple流程:

四、簡要分析:

maple文件夾中:

apk.info:是關於這個APK在編譯的時候一些信息的記錄;

另一個mapleclasses.so就是方舟處理以上的dex文件所生成的so文件,初看有點大,20多M,APK整個包比之前大了10M左右,這個可能是方舟未來要解決的一個問題,但是在這裏不重要。

libmaplecore-all.so文件就是APP運行過程中依賴的toolchain,由於手機沒root拿不到;

看節可以看到,.java_text是整個so文件核心,應該是對dex文件翻譯完以後的主要體現。

這個是RC機制的管理以及引用的一些函數,和對於函數之間的調用處理的一些接口函數等,對於so文件中也有大量的字符串,是未來逆向分析的主要點,大致分析觀察了了一下

下面拿一個方法:Setvideolist簡單的看一下:

java層對應的方法:

方舟處理完以後在so文件中:

可以看到通過傳遞對應的參數"setVideoList|(Lcom/sina/sinavideo/sdk/data/VDVideoListInfo;)V",0"給.MCC_getFuncPtrFromItab進行調用處理,邏輯上還算清晰。

五、總結:

大致看了一下,發現有以下這幾個點:

1.華爲確實利用方舟脫離了安卓虛擬機,並且能夠在這個時間內解決掉所有的轉化性能兼容等以及熱更等等問題,鑽研精神確實值得學習。

2.對於性能沒有顯著的提升可能是在那個異常處理以及GC/RC那塊需要進一步優化,相信他們能夠做好,還是非常的期待;

繼續改進的地方:

1.華爲爲了兼容其他的手機繼續保留了dex文件,不過編譯出的so文件比較大,體積是一個優化的地方,如果是一個大的APP的話dex文件很多很大的話,可能就會很大。

2.編譯出來的so文件,字符串以及邏輯什麼的太明顯跟J2C轉換出來效果類同,需要第三方的保護處理;當然能夠拋棄dex文件已經安全性上提升了一大截。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章