AOSP之修改系統App

DroidMind發表於2019-03-24

如何編譯APK

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

mm -B:強制重新編譯,相當於clean後再編譯。

Dalvik與ART的區別

Dalvik

JIT(Just-in-time)實時編譯,執行的時候將位元組碼翻譯成機器碼,所執行的目標(dex)與硬體平臺無關,APP執行效率低。

ART

AOT(Ahead-Of-Time,預先編譯),執行前將位元組碼翻譯成機器碼,所執行的目標檔案(oat)與硬體平臺相關。APP執行效率高,但是會佔用空間,APK安裝所需時間增加。

odex是幹什麼的

dalvik時代:apk執行的時候,會把Apk中的classes.dex解壓出來並通過dexopt優化為.odex檔案。快取在/data/dalvick-cache目錄下,提高後續執行的效率。

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

編譯APK的過程

1、進入AOSP系統App目錄,下面以Calculator為例

cd android6.0/packages/apps/Calculator複製程式碼

2、在sublime中開啟該專案

subl .複製程式碼

3、查詢需要修改的檔案,這裡以Calculator.java為例

Ctrl+P複製程式碼

然後輸入Calculator.java

4、查詢需要修改的方法,這裡以onCreate方法為例

Ctrl+P複製程式碼

然後在輸入@onCreate

5、進行程式碼的修改並且儲存該檔案,在onCreate方法中加一個log

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

6、進行命令執行下面命令編譯該專案

mm複製程式碼

7、編譯完成之後,通過Install:關鍵字定位編譯輸出的檔案

我們可以看到生成了一個Calculator.apk 和 一個Calculator.odex

進入這兩個檔案所在的目錄

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

我們會發現Calculator.apk檔案中只有資原始檔沒有程式碼,程式碼其實就是這個單獨的Calculator.odex。

為什麼在原始碼環境下編譯會單獨得到odex檔案

優點:

1、降低系統更新後啟動的時間

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

2、減少在裝置上進行odex操作所造成的空間浪費

編譯時,dexopt/dex2oat,會直接將APK的資源與程式碼拆開,如果在裝置上安裝時dexopt/dex2oat,apk的大小不會減少,但又會多一個odex檔案佔據磁碟空間。

缺點:

1、增加開發時編譯的時間

2、不能直接執行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


相關文章