我正在开发android开源项目。我从android.googlesource.com下载了最新版本。
现在,git存储库同步已完成。但是,当我尝试设置编译android源代码的环境时,命令:source 'build/envsetup.sh'
抛出这个错误:
bash:build / envsetup.sh:第1行:意外令牌$'{\r''
'ash: build/envsetup.sh: line 1:
附近的语法错误hmm(){
我尝试过在线解决方案,但没有成功。如果有人知道如何修复此错误,那将会有所帮助。
答案 0 :(得分:2)
编辑:问题的根本原因是由于Git autocrlf
设置为true
。在Linux下,它应设置为input
:
git config --global core.autocrlf input
(原始答案)
问题来自Windows行尾(EOL),因此您必须通过dos2unix
(在Ubuntu上运行apt-get install dos2unix
)将所有脚本转换为unix样式的EOL,然后转换你的脚本:
dos2unix build/envsetup.sh sdk/bash_completion/adb.bash
然后所有vendorsetup.sh
(这将阻止找不到"命令"你得到错误):
find device/ -name vendorsetup.sh -exec dos2unix {} \;
最后一个运行choosecombo
脚本:
dos2unix build/core/find-jdk-tools-jar.sh
编辑:为了完成整体编译,详尽的转换:
find . -name '*.sh' -exec dos2unix {} \;
find . -name '*.py' -exec dos2unix {} \;
find . -name '*.c' -exec dos2unix {} \;
find . -name '*.h' -exec dos2unix {} \;
find . -name '*.cpp' -exec dos2unix {} \;
find . -name '*.hpp' -exec dos2unix {} \;
find . -name '*.txt' -exec dos2unix {} \;
find . -name 'Config.in' -exec dos2unix {} \;
find . -name 'Config.src' -exec dos2unix {} \;
find . -name 'Makefile' -exec dos2unix {} \;
find . -name 'mkmakefile' -exec dos2unix {} \;
find . -name 'Kconfig*' -exec dos2unix {} \;
find . -name rmtypedefs -exec dos2unix {} \;
find . -name apicheck -exec dos2unix {} \;
find . -name seapp_contexts -exec dos2unix {} \;
dos2unix external/busybox/scripts/* external/busybox/applets/* kernel/scripts/* dalvik/dx/etc/* prebuilts/sdk/tools/*
所有shell脚本的*.sh
和所有python脚本的*.py
(在make
编译期间使用),以及.c
和.cpp
文件(显然)和makefile使用的其他文件。
当然,您可以过度使用find . -type f -exec dos2unix -s -k -o {} \;
并让dos2unix
决定哪些文件是文本,哪些文件是二进制文件。
可能还有其他的。当我找到新答案时,我会编辑这个答案......
答案 1 :(得分:0)
将example.sh文件转换为unix的简便方法是使用NotePad ++(编辑> EOL转换> UNIX / OSX格式)
您还可以在记事本++中设置默认EOL(设置>偏好设置>新文档/默认目录>在格式框下选择Unix / OSX)
参考 - syntax error near unexpected token `$'in\r''
它也解决了这个问题:android_build.sh gives error while building ffmpeg library
我用过这个。它早些解决了我的问题。