如何在Mac终端基于Android.bp构建Android 12 DNSResolver APEX模块
如何在Mac终端基于Android.bp构建DNSResolver APEX模块
我已经下载了适用于Android 12的DNSResolver APEX模块,模块所需的密钥和清单文件都已准备妥当,对应的Android.bp文件内容如下:
package { // See: http://go/android-license-faq // A large-scale-change added 'default_applicable_licenses' to import // all of the 'license_kinds' from "packages_modules_DnsResolver_license" // to get the below license kinds: // SPDX-license-identifier-Apache-2.0 default_applicable_licenses: ["packages_modules_DnsResolver_license"], } apex { name: "com.android.resolv", updatable: true, manifest: "manifest.json", multilib: { first: { native_shared_libs: ["libnetd_resolv"], }, }, key: "com.android.resolv.key", certificate: ":com.android.resolv.certificate", // Use a custom AndroidManifest.xml used for API targeting. androidManifest: "AndroidManifest.xml", // Indicates that pre-installed version of this apex can be compressed. // Whether it actually will be compressed is controlled on per-device basis. compressible: true, // IMPORTANT: For the APEX to be installed on Android 10, // min_sdk_version should be 29. This enables the build system to make // sure the package compatible to Android 10 in two ways: // - build the APEX package compatible to Android 10 // so that the package can be installed. // - build artifacts (lib/javalib/bin) against Android 10 SDK // so that the artifacts can run. min_sdk_version: "29", } apex_key { name: "com.android.resolv.key", public_key: "com.android.resolv.avbpubkey", private_key: "com.android.resolv.pem", } android_app_certificate { name: "com.android.resolv.certificate", // will use cert.pk8 and cert.x509.pem certificate: "testcert", }
根据官方文档,只需基于这个Android.bp文件构建*.apex二进制文件,但我不清楚具体执行的命令;我知道需要Soong工具来解析并构建Android.bp文件,但不知道如何在Mac终端操作,网上也没找到相关方案。
解决步骤
1. 搭建Android源码构建环境
Soong是Android构建系统的核心组件,无法单独运行,必须依赖完整的Android源码环境:
- 安装依赖:先安装Xcode Command Line Tools,再通过Homebrew安装
repo、git、python3、openjdk-11(Android 12构建需要JDK 11) - 同步Android 12源码:使用
repo init初始化源码仓库并指定Android 12分支,然后执行repo sync同步代码。如果已经单独下载了DNSResolver模块,将其放到源码路径的packages/modules/DnsResolver目录下即可。
2. 初始化构建环境
进入Android源码根目录,执行以下命令配置构建环境:
source build/envsetup.sh lunch
执行lunch后,选择一个Android 12的目标设备(比如aosp_x86_64-eng,eng版本适合开发构建场景)。
3. 构建APEX模块
直接执行以下命令触发构建:
m com.android.resolv
或者使用等效的make命令:
make com.android.resolv
这两个命令都会调用Soong解析Android.bp并完成整个模块的编译、打包与签名流程。
4. 获取构建产物
构建完成后,生成的APEX文件可以在以下路径找到:
- 主产物路径:
out/target/product/<你的设备名称>/system/apex/com.android.resolv.apex - 中间产物路径:
out/soong/.intermediates/packages/modules/DnsResolver/com.android.resolv/apex
注意事项
- 确保模块的所有配套文件(密钥文件
com.android.resolv.avbpubkey、com.android.resolv.pem,证书文件cert.pk8、cert.x509.pem,以及manifest.json、AndroidManifest.xml)都和Android.bp放在同一目录下。 - 不建议尝试单独使用Soong构建,因为需要手动处理大量系统依赖,效率极低,完整源码环境是最可靠的构建方式。
内容的提问来源于stack exchange,提问作者flopshot
相关产品推荐
相关产品推荐

