java生成apk工具_用Android SDK Build Tools手动构建APK

我们平时都是用Android Studio进行Android应用的开发,Android Studio构建APK是通过调用Gradle脚本实现的,而Gradle脚本最终是通过调用Android SDK Build Tools里的各种命令行工具实现的。

下面尝试直接用Build Tools构建一个极简的Hello World APK,了解一下这个过程和各个工具的基本用法。

整个构建过程大致分为以下几步:

用aapt2编译资源文件,生成中间二进制文件

用aapt2链接合并中间文件,生成不包含代码的APK,并生成R.java

用javac编译java源文件,得到.class java字节码文件

用d8将.class编译成DEX字节码文件

将DEX文件导入APK中

对APK进行签名

创建项目源文件

项目的目录结构及文件源码如下:

D:\helloworld>tree /F

│ AndroidManifest.xml

├─compiled

├─java

│ └─com

│ └─cdjtest

│ └─helloworld

│ MainActivity.java

└─res

├─drawable

│ ic_launcher.png

├─layout

│ activity_main.xml

└─values

strings.xml

复制代码

AndroidManifest.xml

package="com.cdjtest.helloworld">

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@android:style/Theme">

复制代码

MainActivity.java

package com.cdjtest.helloworld;

import android.app.Activity;

import android.os.Bundle;

public class MainActivity extends Activity{

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}

复制代码

activity_main.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:text="Hello World!"/>

复制代码

strings.xml

helloworld

复制代码

用aapt2编译资源文件

先设置一下环境变量,将Build Tools 28.0.3的路径加到PATH中,方便调用

D:\helloworld>set PATH=%PATH%;$ANDROID_HOME%\build-tools\28.0.3\

复制代码

编译res目录下的3个资源文件,生成.flat中间二进制文件

D:\helloworld>aapt2 compile res\values\strings.xml -o compiled\

D:\helloworld>aapt2 compile res\layout\activity_main.xml -o compiled\

D:\helloworld>aapt2 compile res\drawable\ic_launcher.png -o compiled\

复制代码

链接.flat文件,生成helloworld.unsigned.apk(还未包含DEX字节码),--java java参数指定在java目录生成R.java文件,和MainActivity.java在同一目录

D:\helloworld>aapt2 link -o helloworld.unsigned.apk ^

-I %ANDROID_HOME%\platforms\android-28\android.jar ^

compiled\values_strings.arsc.flat ^

compiled\layout_activity_main.xml.flat ^

compiled\drawable_ic_launcher.png.flat ^

--manifest AndroidManifest.xml --java java\

复制代码

用javac和d8编译源码

用javac将MainActivity.java和R.java编译成.class文件

D:\helloworld>javac java\com\cdjtest\helloworld\*.java -classpath %ANDROID_HOME%\platforms\android-28\android.jar

复制代码

用d8将.class编译成classes.dex,(d8和dx的对比可参考Jake大神的这篇文章)

D:\helloworld>d8 --lib %ANDROID_HOME%\platforms\android-28\android.jar --release --output . java\com\cdjtest\helloworld\*.class

复制代码

将classes.dex导入APK中

D:\helloworld>aapt add helloworld.unsigned.apk classes.dex

复制代码

APK签名

用zipalign优化APK,主要作用是内存对齐,提高运行时读取资源的效率

D:\helloworld>zipalign -p 4 helloworld.unsigned.apk helloworld.unsigned.aligned.apk

复制代码

用JDK自带的keytool工具生成keystore文件my-release-key.jks

D:\helloworld>keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

复制代码

用apksigner和my-release-key.jks签名APK,生成helloworld-release.apk

D:\helloworld>apksigner sign --ks my-release-key.jks --out helloworld-release.apk helloworld.unsigned.aligned.apk

Keystore password for signer #1:

复制代码

最终的目录结构:

D:\helloworld>tree /F

│ AndroidManifest.xml

│ classes.dex

│ helloworld-release.apk

│ helloworld.unsigned.aligned.apk

│ helloworld.unsigned.apk

│ my-release-key.jks

├─compiled

│ drawable_ic_launcher.png.flat

│ layout_activity_main.xml.flat

│ values_strings.arsc.flat

├─java

│ └─com

│ └─cdjtest

│ └─helloworld

│ MainActivity.class

│ MainActivity.java

│ R$drawable.class

│ R$layout.class

│ R$string.class

│ R.class

│ R.java

└─res

├─drawable

│ ic_launcher.png

├─layout

│ activity_main.xml

└─values

strings.xml

复制代码

安装APK

D:\helloworld>adb install helloworld-release.apk

Success

复制代码

成功运行屏幕中间可见"Hello World!"。

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android SDK Build Tools 30.0.3 是一个非常重要的工具集,用于构建和编译Android应用程序。它包含了一系列的命令行工具,帮助开发人员在开发过程中进行构建、打包和签名应用程序。 首先,Android SDK Build Tools 30.0.3 包括了 Android Debug Bridge(ADB)工具,这是用于通过USB调试设备的命令行工具。开发人员可以使用 ADB 命令来安装、卸载、调试和管理 Android 应用程序。这对于开发人员来说是非常重要的,因为它提供了与设备之间的连接和通信的方式。 其次,Android SDK Build Tools 30.0.3 还包括了 dex 工具,用于将 Java 字节码转换为 Dalvik 可执行文件格式。通过 dex 工具,开发人员可以将应用程序中的 Java 代码编译成 Dalvik 字节码,以便在 Android 设备上运行。 另外,Android SDK Build Tools 30.0.3 还包含了 zipalign 工具,用于优化和对齐应用程序的 APK 文件。通过对 APK 文件进行优化和对齐,可以提高应用程序的性能和运行效率。 最后,Android SDK Build Tools 30.0.3 还提供了一些其他的命令行工具,如 apksigner、aapt、aidl 等,这些工具用于对应用程序进行签名、资源编译和跨进程通信等。 总之,Android SDK Build Tools 30.0.3 是 Android 开发过程中必不可少的工具集,提供了构建、编译和优化应用程序的各种命令行工具,让开发人员能够更加高效地进行 Android 应用程序开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值