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

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