如何使用aapt2构建可运行的apk?

ill*_*zor 5 android aapt2

我有一个简单的android项目。此命令编译资源并构建不带 dex 的 apk:

aapt2 compile project/res/values/strings.xml project/res/layout/activity_main.xml -o project/compiled_res

aapt2 link -o project/apk/unsigned_app.apk -I sdk/platforms/android-28/android.jar --manifest project/src/AndroidManifest.xml -R project/compiled_res/*.flat --java project/src --auto-add-overlay
Run Code Online (Sandbox Code Playgroud)

引用自文档

但是,生成的 APK 不包含 DEX 字节码并且未签名
...
您可以使用其他命令行工具,例如 d8 将 Java 字节码编译为 DEX 字节码,并使用 apksigner 对 APK 进行签名。

好的。我可以:

d8 project/compiled_classes/com/illuzor/buildtest/*.class --output project/dex
Run Code Online (Sandbox Code Playgroud)

但是如何将这个dex打包成apk呢?aapt2 无法识别classes.dex:

在此输入图像描述

我可以通过压缩将classes.dex 添加到我的apk 中:

zip -uj project/apk/unsigned_app.apk project/dex/classes.dex
Run Code Online (Sandbox Code Playgroud)

对齐并签名后即可运行。但一定是另一种方式,更合适。

小智 2

我也在寻找合适的方法。但现在已经2019年了,我还是没有运气,我到处找,找了好几天。

我想aapt add会完成工作,但你的解决方案zip还不错。

希望aapt不会很快被弃用,或者aapt2应该在此之前得到增强。