Android 編譯流程解析03-手動編譯Apk

Android編譯流程

通過之前兩篇文章,我們已經大致瞭解了編譯相關的Gradle,它們的編譯流程如下圖所示,這篇文章我們來通過手動編譯的方式,來模擬Gradle 編譯Android APK文件。
在這裏插入圖片描述

手動編譯APK

從這裏,我們就要開始手動編譯Apk文件了。

創建一個Android項目

首先,我們要有一個Android項目,爲了更簡單,我去除了多餘的代碼,我們編譯的時候,可以直接使用該項目。
下載地址 Android 手動編譯APK-代碼資源下載

創建build文件夾

我們把下載好的項目解壓,然後使用cmd,進入其app目錄下,然後創建build文件夾

mkdir build

編譯資源

aapt2 compile -o build/res.zip --dir src/main/res

然後,會生成一個zip文件
在這裏插入圖片描述
我們打開這個zip文件,可以看到所有資源已經被打包成了.flat格式
在這裏插入圖片描述

對資源進行鏈接

aapt2 link build/res.zip -I C:\Developer\Android\SDK\platforms\android-29\android.jar --java build --manifest src\main\AndroidManifest.xml -o build\app-debug.apk

執行後,可以看到生成了app-debug.apk
在這裏插入圖片描述
在com文件夾裏,還有R.java文件
在這裏插入圖片描述
來看下R.java
在這裏插入圖片描述
然後,我們把R.java賦值到我們項目代碼中,這樣就不用再導包了。
在這裏插入圖片描述

編譯java文件

javac -d build -cp C:/Developer/Android/SDK/platforms/android-29/android.jar src/main/java/com/heiko/mytest/*.java

這樣我們就得到了class字節碼文件

Java 代碼是由 javac 編譯的,Kotlin 代碼是由 kotlinc 編譯的

在這裏插入圖片描述

生成Dex文件

可以用老的dx編譯器,也可以用新的d8編譯器。
這裏我們用d8編譯器。

d8 --output build --lib C:/Developer/Android/SDK/platforms/android-29/android.jar build/com/heiko/mytest/*.class

這樣,我們就生成了dex文件
在這裏插入圖片描述

將dex文件放入apk文件中

我們要調用zip命令,這裏的zip也就是我們常用的解壓縮軟件,不過要通過命令行使用,我們需要先配置到環境變量中。
詳見【終端】“zip不是內部或外部命令,也不是可執行程序”詳細解決辦法

zip -j build/app-debug.apk build/classes.dex

可以看到,新的app-deblug.apk文件,比原來要大一點
在這裏插入圖片描述
我們看下其內部,可以看到dex文件已經在裏面了
在這裏插入圖片描述

生成簽名

這個時候,apk文件中的內容還少META-INF,也就是簽名信息。
這裏我們可以使用debug簽名,密碼是固定的android

apksigner sign -ks C:\Users\Heiko\.android\debug.keystore build/app-debug.apk

我們再來看下app-debug.apk
在這裏插入圖片描述
可以看到,已經有META-INF文件夾了。

安裝apk

最後,我們把apk安裝到手機上,可以看到,正常運行成功 !

在這裏插入圖片描述
至此,我們手動編譯APK就成功了 !

Android 編譯流程解析系列
Android 編譯流程解析01-AppPlugin初始化
Android 編譯流程解析02-相關Task解析
Android 編譯流程解析03-手動編譯Apk

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