即使我们再小心,小问题在一些时候冒出。这页保持追踪已知问题,围绕用 Android 源代码。
症状:在一些 IceCreamSandwich 的构建和后来的,下面的警告在构建期间被先打印:/bin/bash: line 0: cd: cts/tools/cts-native-xml-generator/src/res: Nosuch file or directory
原因:一些 makefile 引用不存在的路径。
修理:无。这是一个无害的警告。
症状:仿真器构建直接从 gingerbread 分支不开始和停留卡住在一个黑色的屏幕。
原因:gingerbread 分支用 R7 版本的仿真器,没有所有运行 gingerbread 最近版本必要的所有功能。
修理:用 R12 版本的仿真器,和一个新的匹配这些工具。不需要清除构建。
$ repo forall platform/external/qemu -c git checkout aosp/tools_r12
$ make
$ emulator -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7
症状:仿真器(任何版本)构建在 MacOS 10.7 Lion 和/或 XCode 4.x 上不开始。
原因:一些在开发环境选择的原因,仿真器被编译成一种防止它工作的方式。
修理:用一个仿真器二进制文件从 SDK,构建在 MacOS 10.6 用 XCode 3 并且工作在 MacOS 10.7上
症状:repo init
or repo sync
失败同 http 错误一起,通常 403 或 500。
原因:这些是相当一点可能的原因,最常见的 http 代理关系,处理大量数据传输困难。
修理:这不是一般的解决方法,用 python 2.7 和明确的用 repo sync -j1
已经据报告为一些用户改善这个情况。
症状:当运行 repo sync
在一些 VirtualBox 安装,过程挂起或失败同一个可能症状的变种。一种变种是 DownloadError: HTTP 500 (Internal Server Error: Server got itself in trouble)
.
原因:VirtualBox 的默认网络行为是用 NAT (网络地址转换)连接客户系统到网络。沉重的网络活动 repo sync 触发一些边角情况在 NAT 码。
修理:配置 VirtualBox 用网桥替代 NAT。
症状:当运行 repo sync
,这个过程失败和各个有关不承认主机名的错误。一个这样的错误是 <urlopen error [Errno -2] Name or service not known>
。
原因:一些 DNS 系统有很难复制大量查询参与到同步源树(可以是几百个请求在一个最差情况的场景)。
修理:手动解决有关的主机名,和本地硬编码这些结果。
你能解决它们用 nslookup
命令,将给你一个那些每个 IP 地址的数值(通常在"地址"部分"输出)。
$ nslookup googlesource.com
$ nslookup android.googlesource.com
你能接着本地硬编码它们通过编辑 /etc/hosts
,并且添加两行到这个文件,形式:
aaa.bbb.ccc.ddd googlesource.com
eee.fff.ggg.hhh android.googlesource.com
注意,这仅仅工作,只要服务器地址不改变,并且假如它们工作和你不能连接,你将不得不解决这些主机名从而再一次并且编辑 etc/hosts
。
症状:repo sync
挂起当同步时,常常当它完成同步 99% 。
原因:一些网络环境的 TCP/IP 堆设置导致困难,例如 repo sync
不完成也不失败。
修理:在 linux 上,sysctl -w net.ipv4.tcp_window_scaling=0
。在 MacOS 上,禁用 rfc1323 扩展在网络设置。
make snod
和模拟器构建。症状:当用 make snod
(让系统没有依赖)在模拟器构建上,结构构建不工作。
原因:所有模拟器默认构建现在运行 Dex 优化,在构建时,应用每次框架选择要求跟着所有依赖丢弃优化。
修理:本地禁用 Dex 优化用 export WITH_DEXPREOPT=false,删除现有的优化版本用
make installclean
和运行一个全构建丢弃生成非优化版本。随后,make snod
将工作。
症状:所有构建失败同 "权限被拒绝",可能跟着反病毒警告。
原因:一些反病毒程序误辨认一些源文件在 Android 源树,作为假如它们包含驱动。
修理:这些不是实际病毒参与验证之后,禁用反病毒在 Android 树,这个添加得益于减少构建时间。
症状:相机,GPS 和 NFC 在 Galaxy Nexus 上不工作,作为一个例子,相机应用崩溃在它运行不久。
原因:这些硬件外围要求所有权库,这些在 Android 开源工程是无效的。
修理:无。
症状:构建失败同各个症状,这样一个症状是 cc1: error: unrecognized command line option "-m32"
原因: Android 构建系统用 PATH 中的默认编译器,假设它生成二进制文件是一个合适的编译器,运行在主机上。其它情况(例如,用 Android NDK 或构建内核)导致默认编译器不是一个主编译器。
修理:用一个 "clean" shell,在没有之前前动作,能够交换默认编译器。
症状:构建失败同各种症状,可能抱怨(译者注:原词complinaing)错误的文件或文件格式错误。一个这样的症状是 member [...] in archive is not an object
.
原因:Android 构建系统趋向用一些主机工具和依靠它们的默认行为。一些设置选择这些工具的行为和使它们表现在一些方式,混淆构建系统。已知的变量导致这样的问题是 CDPATH
和GREP_OPTIONS
。
修理:构建 Android 在一个尽可能少定制的环境。
症状:构建 IceCreamSandwich 4.0.x (和旧版本) 失败在 MacOS 10.7 上,并且错误类似这样:Undefined symbols for architecture i386: "_SDL_Init"
原因:4.0.x 是不兼容 MacOS 10.7。
修理:两者,降级到 MacOS 10.6,或用主分支,能被构建在 MacOS 10.7上。
$ repo init -b master
$ repo sync
症状:所有构建失败,当用 XCode 4.3。
原因:XCode 4.3 切换默认编译器从 gcc 到 llvm,并且 llvm 拒绝编码,用公认的 gcc。
修理:用 XCode 4.2。
症状:构建 IceCreamSandwich 4.0.x (和旧版本)在 Ubuntu 11.10 上和新的失败同错误类似这样:<command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]
原因:Ubuntu 11.10 用一个版本的 gcc ,符号是默认定义的,并且 Android 页定义了这些符号,导致冲突。
修理:两者,降级到 Ubuntu 10.04,或用主分支,能被并以在 Ubuntu 11.10 和新的上面。
$ repo init -b master
$ repo sync