Mac 通过 Homebrew 一键配置 bundletool 工具指南
1. 为什么你需要bundletool如果你是一名Android开发者肯定对APK文件再熟悉不过了。但自从Google Play开始推广AABAndroid App Bundle格式后很多开发者都遇到了一个头疼的问题怎么在本地测试AAB文件这就是bundletool大显身手的时候了。bundletool是Google官方提供的命令行工具专门用来处理AAB文件。它能帮你做三件特别重要的事把AAB转换成可安装的APK集合APKS文件直接把AAB安装到连接的设备上生成设备专属的APK组合我刚开始接触AAB时每次测试都要先上传到Google Play后台等它处理完再下载整个过程至少要20分钟。后来发现用bundletool本地处理30秒就能搞定效率提升不是一点半点。2. Homebrew安装指南2.1 为什么要用Homebrew在Mac上装开发工具Homebrew绝对是首选。它就像Mac界的应用商店但比App Store更懂开发者。我用了5年Homebrew最大的感受就是再也不用到处找下载链接自动解决依赖问题更新升级特别方便举个例子以前装Java环境要自己配PATH现在brew install openjdk一条命令全搞定。bundletool也是Java写的工具用Homebrew安装会自动处理好Java环境依赖。2.2 安装Homebrew详细步骤打开你的终端Terminal输入/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)这里有几个常见问题需要注意如果提示command not found: curl说明你的命令行工具没装全需要先装Xcode命令行工具xcode-select --install安装过程中如果卡在Press RETURN to continue记得按回车键继续安装完成后可能会提示你把Homebrew添加到PATH类似这样echo eval $(/opt/homebrew/bin/brew shellenv) ~/.zshrc source ~/.zshrc验证安装是否成功brew --version应该能看到类似Homebrew 3.6.0这样的版本号。3. bundletool安装实战3.1 一键安装命令装好Homebrew后安装bundletool就简单了brew install bundletool这个命令会自动完成下载最新版bundletool设置好可执行权限创建必要的符号链接安装完成后验证bundletool --version正常应该输出类似2.1.0的版本号。3.2 可能遇到的坑我遇到过最典型的问题是权限错误Error: Cant create update lock in /usr/local/var/homebrew/locks!解决方法很简单sudo chown -R $(whoami) /usr/local/var/homebrew这个问题的原因是Homebrew需要写权限但默认安装时某些目录可能属于root用户。执行上面命令后再重新运行brew install bundletool就可以了。4. bundletool使用全攻略4.1 基础用法AAB转APKS假设你有一个game.aab文件想转换成APKSbundletool build-apks \ --bundle/path/to/game.aab \ --output/path/to/games.apks这里有几个实用技巧如果aab文件在当前目录可以直接用./game.aab输出文件后缀必须是.apks转换过程通常只需要10-30秒4.2 安装APKS到设备转换完成后安装到已连接的Android设备bundletool install-apks \ --apks/path/to/games.apks确保设备已开启USB调试电脑已授权该设备最好只用一台设备连接4.3 带签名的专业用法如果是正式版AAB需要指定签名信息bundletool build-apks \ --bundlegame.aab \ --outputgame.apks \ --ksmykeystore.jks \ --ks-passpass:yourpassword \ --ks-key-aliasyouralias \ --key-passpass:yourkeypassword签名参数说明--ks密钥库路径--ks-pass密钥库密码--ks-key-alias密钥别名--key-pass密钥密码如果和密钥库密码不同5. 高级技巧与自动化5.1 查看APK内容有时候需要检查APKS包里有什么bundletool get-size total \ --apksgame.apks这会列出所有APK的尺寸信息对优化包体积很有帮助。5.2 设备特定配置如果你只想为特定设备生成APKbundletool build-apks \ --connected-device \ --bundlegame.aab \ --outputgame.apks这样生成的APKS只包含当前连接设备需要的配置文件会小很多。5.3 自动化脚本示例我常用的测试脚本模板#!/bin/bash # 定义路径 AAB_PATH./app-release.aab APKS_PATH./app.apks KEYSTORE_PATH./my.keystore # 构建APKS bundletool build-apks \ --bundle$AAB_PATH \ --output$APKS_PATH \ --ks$KEYSTORE_PATH \ --ks-passpass:123456 \ --ks-key-aliaskey0 \ --key-passpass:123456 # 安装到设备 bundletool install-apks --apks$APKS_PATH echo 安装完成把这个保存为test_aab.sh每次只需修改路径和密码就能一键测试。6. 常见问题解决方案6.1 版本兼容性问题如果遇到奇怪的错误首先检查版本bundletool --version建议保持最新版更新方法brew upgrade bundletool6.2 设备连接问题确保设备能被adb识别adb devices如果看不到设备尝试重新插拔USB线重启adb服务adb kill-server adb start-server6.3 内存不足错误处理大型AAB时可能遇到java.lang.OutOfMemoryError: Java heap space解决方法是指定更大内存export JAVA_OPTS-Xmx4G bundletool build-apks ...7. 性能优化建议经过上百次测试我总结出几个提速技巧使用SSD硬盘存放AAB文件速度能快2-3倍关闭其他占用内存的程序给bundletool留至少4GB内存开发调试时可以用--connected-device参数只生成当前设备需要的APK定期清理旧的APKS文件find . -name *.apks -mtime 7 -delete8. 与其他工具集成8.1 结合Gradle使用在build.gradle中添加任务task installAab(type: Exec) { commandLine bundletool, install-apks, --apks, output.apks }然后就可以用./gradlew assembleRelease installAab8.2 与CI/CD集成在GitHub Actions中的配置示例- name: Test AAB run: | brew install bundletool bundletool build-apks --bundleapp.aab --outputapp.apks bundletool install-apks --apksapp.apks9. 安全注意事项密钥库密码不要硬编码在脚本中可以用环境变量export KEYSTORE_PASSyourpass bundletool ... --ks-passpass:$KEYSTORE_PASS测试完成后记得删除临时APKS文件不要将签名密钥提交到版本控制10. 替代方案比较虽然bundletool是官方推荐但也有其他选择Android Studio的Build Build Bundle(s)可以直接生成AABGoogle Play Console的内部测试可以上传AAB命令行直接使用java -jar bundletool.jar但综合来看Homebrewbundletool的组合仍然是安装最简单使用最方便功能最完整我在实际项目中测试过从AAB到安装完成最快只要15秒。特别是需要频繁测试的时候这个效率提升真的能节省大量时间。刚开始可能会遇到一些权限问题但只要按照上面的解决方案处理一次后面就一马平川了。