欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 编译流程解析03-手动编译Apk

程序员文章站 2022-03-10 23:03:33
Android编译流程通过之前两篇文章,我们已经大致了解了编译相关的Gradle,它们的编译流程如下图所示,这篇文章我们来通过手动编译的方式,来模拟Gradle 编译Android APK文件。手动编译APK从这里,我们就要开始手动编译Apk文件了。创建一个Android项目首先,我们要有一个Android项目,为了更简单,我去除了多余的代码,我们编译的时候,可以直接使用该项目。下载地址 Android 手动编译APK-代码资源下载创建build文件夹我们把下载好的项目解压,然后使用cmd...

Android编译流程

通过之前两篇文章,我们已经大致了解了编译相关的Gradle,它们的编译流程如下图所示,这篇文章我们来通过手动编译的方式,来模拟Gradle 编译Android APK文件。
Android 编译流程解析03-手动编译Apk

手动编译APK

创建一个Android项目

首先,我们要有一个Android项目,为了更简单,我去除了多余的代码,我们编译的时候,可以直接使用该项目。
下载地址 Android 手动编译APK-代码资源下载

创建build文件夹

我们把下载好的项目解压,然后使用cmd,进入其app目录下,然后创建build文件夹

mkdir build

编译资源

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

然后,会生成一个zip文件
Android 编译流程解析03-手动编译Apk
我们打开这个zip文件,可以看到所有资源已经被打包成了.flat格式
Android 编译流程解析03-手动编译Apk

对资源进行链接

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
Android 编译流程解析03-手动编译Apk
在com文件夹里,还有R.java文件
Android 编译流程解析03-手动编译Apk
来看下R.java
Android 编译流程解析03-手动编译Apk
然后,我们把R.java赋值到我们项目代码中,这样就不用再导包了。
Android 编译流程解析03-手动编译Apk

编译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 编译的
这里的 C:/Developer/Android/SDK 可以由 %ANDROID_HOME% 代替

Android 编译流程解析03-手动编译Apk

生成Dex文件

可以用老的dx编译器,也可以用新的d8编译器。
这里我们用d8编译器。

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

这样,我们就生成了dex文件
Android 编译流程解析03-手动编译Apk

将dex文件放入apk文件中

我们要调用zip命令,这里的zip也就是我们常用的解压缩软件,
由此也可以证明,apk文件实质上就是个压缩文件。
要通过命令行使用zip,我们需要先配置到环境变量中。
详见【终端】“zip不是内部或外部命令,也不是可执行程序”详细解决办法

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

可以看到,新的app-deblug.apk文件,比原来要大一点
Android 编译流程解析03-手动编译Apk
我们看下其内部,可以看到dex文件已经在里面了
Android 编译流程解析03-手动编译Apk

生成签名

这个时候,apk文件中的内容还少META-INF,也就是签名信息。
这里我们可以使用debug签名,密码是固定的android

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

我们再来看下app-debug.apk
Android 编译流程解析03-手动编译Apk
可以看到,已经有META-INF文件夹了。

安装apk

最后,我们把apk安装到手机上,可以看到,正常运行成功 !

Android 编译流程解析03-手动编译Apk
至此,我们手动编译APK就成功了 !

Android 编译流程解析系列
Android 编译流程解析01-AppPlugin初始化
Android 编译流程解析02-相关Task解析
Android 编译流程解析03-手动编译Apk

本文地址:https://blog.csdn.net/EthanCo/article/details/107172750