编译AOSP源码时遇“LUNCH_MENU_CHOICES[@]:未绑定变量”错误的解决方法
我之前也碰到过这个问题,刚好能帮你理清报错的原因和解决办法:
问题还原
你在Ubuntu 16.04上编译AOSP 7.1.1_r6源码时,执行了以下命令:
curl https://storage.googleapis.com/git-repo-downloads/repo > repo chmod a+x repo ./repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.1_r6 ./repo sync . build/envsetup.sh
结果在执行. build/envsetup.sh时触发报错:
build/envsetup.sh: line 508: LUNCH_MENU_CHOICES[@]: unbound variable
错误原因
这个问题本质是bash的set -u(即nounset)选项导致的:当该选项开启时,引用未初始化的变量或数组会直接抛出错误。AOSP的envsetup.sh脚本中,LUNCH_MENU_CHOICES数组需要加载完设备/product配置后才会初始化,如果你的shell默认开启了set -u,或者repo同步不完整导致配置未正常加载,就会触发这个报错。
解决方案
给你两个靠谱的解决途径,任选其一即可:
方法1:临时关闭nounset选项
在执行envsetup.sh前先关掉严格变量检查,执行完成后可按需恢复:
set +u . build/envsetup.sh set -u # 如果你之前默认开启了这个选项,执行完脚本后可以重新开启
方法2:确保同步完整并使用bash执行
- 先确认
repo sync是否完整完成——网络不稳定时容易出现同步中断,重新执行同步并利用多核加速:./repo sync -j$(nproc) - 切换到bash再执行脚本(Ubuntu 16.04默认是bash,但zsh等其他shell可能存在兼容性问题):
bash . build/envsetup.sh
额外提示
解决报错后,就可以正常使用lunch命令选择编译目标了,比如:
lunch aosp_arm-eng
内容的提问来源于stack exchange,提问作者Ciro Santilli OurBigBook.com
相关产品推荐
相关产品推荐

