AOSP之修改系統App

如何編譯APK

在源碼環境下,使用mm命令編譯module,APK會輸出到out/target/product/product_name目錄下。java

mm -B:強制從新編譯,至關於clean後再編譯。android

Dalvik與ART的區別

Dalvik緩存

JIT(Just-in-time)實時編譯,運行的時候將字節碼翻譯成機器碼,所運行的目標(dex)與硬件平臺無關,APP運行效率低。
bash

ARTapp

AOT(Ahead-Of-Time,預先編譯),運行前將字節碼翻譯成機器碼,所運行的目標文件(oat)與硬件平臺相關。APP運行效率高,可是會佔用空間,APK安裝所需時間增長。
工具

odex是幹什麼的優化

dalvik時代:apk運行的時候,會把Apk中的classes.dex解壓出來並經過dexopt優化爲.odex文件。緩存在/data/dalvick-cache目錄下,提升後續執行的效率。ui

ART時代:APK安裝的時候,會把APK中的classes.dex解壓後,經過dex2oat工具轉換爲.odex文件(ELF格式),存儲在apk所在的目錄的oat目錄下。this

編譯APK的過程

一、進入AOSP系統App目錄,下面以Calculator爲例spa

cd android6.0/packages/apps/Calculator複製代碼

二、在sublime中打開該項目

subl .複製代碼

三、查找須要修改的文件,這裏以Calculator.java爲例

Ctrl+P複製代碼

而後輸入Calculator.java

四、查找須要修改的方法,這裏以onCreate方法爲例

Ctrl+P複製代碼

而後在輸入@onCreate

五、進行代碼的修改而且保存該文件,在onCreate方法中加一個log

Log.wtf("hpp", "this is my first log");複製代碼

六、進行命令執行下面命令編譯該項目

mm複製代碼

七、編譯完成以後,經過Install:關鍵字定位編譯輸出的文件

咱們能夠看到生成了一個Calculator.apk 和 一個Calculator.odex

進入這兩個文件所在的目錄

nautilus $(gettop)/out/target/product/generic/system/app/Calculator/Calculator.apk複製代碼

咱們會發現Calculator.apk文件中只有資源文件沒有代碼,代碼其實就是這個單獨的Calculator.odex。

爲何在源碼環境下編譯會單獨獲得odex文件

優勢:

一、下降系統更新後啓動的時間

爲odex的Rom。首次開機的過程會執行odex操做,編譯時作,開機的時候就不用作了。

二、減小在設備上進行odex操做所形成的空間浪費

編譯時,dexopt/dex2oat,會直接將APK的資源與代碼拆開,若是在設備上安裝時dexopt/dex2oat,apk的大小不會減小,但又會多一個odex文件佔據磁盤空間。

缺點:

一、增長開發時編譯的時間

二、不能直接執行APK的install操做,須要將APK和odex都sync到設備上。

如何在開發階段關閉dex2oat

  • 在當前的module的Android.mk裏面關閉,在inclue $(BUILD_PACKAGE)以前加上下面代碼
LOCAL_DEX_PREOPT = false複製代碼
  • 在buid/core/main.mk中關閉全部module的dex優化
## eng ##

ifeq ($(TARGET_BUILD_VARIANT), eng)

tags_to_install := debug eng

# 關閉odex優化

WITH_DEXPREOPT := false複製代碼

安裝編譯後的APK

adb install -r $(gettop)/out/target/product/generic/system/app/Calculator/Calculator.apk複製代碼

查看修改是否生效

運行Calculator應用,過濾log

adb logcat -s 'hpp'複製代碼


參考視頻:

https://www.365yg.com/i6436850885292196353#mid=1565254704995330

https://www.365yg.com/i6436851843262841346/#mid=1565254704995330

https://www.365yg.com/i6436852898566504962/#mid=1565254704995330

https://www.365yg.com/i6436853799767245314/#mid=1565254704995330

相關文章
相關標籤/搜索