Android源码编译(9)---已知问题

Known Issues

Even with our best care, small problems sometimes slip in. This page keeps track of the known issues around using the Android source code.

Build issues


Missing CellBroadcastReceiver in toro builds

Symptom

On AOSP builds for toro (up to Jelly Bean 4.2.1), CellBroadcastReceiver doesn't get included in the system.

Cause:

There's a typo in  vendor/samsung/toro/device-partial.mk, where PRODUCT_PACKAGES has the K replaced by an H.

Fix: Use the latest packages for 4.2.2, or manually fix the typo.

Missing CTS Native XML Generator

Symptom: On some builds of IceCreamSandwich and later, the following warning is printed early during the build: /bin/bash: line 0: cd: cts/tools/cts-native-xml-generator/src/res: No such file or directory

Cause: Some makefile references that path, which doesn't exist.

Fix: None. This is a harmless warning.

Black Gingerbread Emulator

Symptom: The emulator built directly from the gingerbread branch doesn't start and stays stuck on a black screen.

Cause: The gingerbread branch uses version R7 of the emulator, which doesn't have all the features necessary to run recent versions of gingerbread.

Fix: Use version R12 of the emulator, and a newer kernel that matches those tools. No need to do a clean build.

$ repo forall platform/external/qemu -c git checkout aosp/tools_r12
$ make
$ emulator -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7

Emulator built on MacOS 10.7 Lion doesn't work.

Symptom: The emulator (any version) built on MacOS 10.7 Lion and/or on XCode 4.x doesn't start.

Cause: Some change in the development environment causes the emulator to be compiled in a way that prevents it from working.

Fix: Use an emulator binary from the SDK, which is built on MacOS 10.6 with XCode 3 and works on MacOS 10.7.

WITH_DEXPREOPT=true and emulator builds.

Symptom: When conducting partial builds or syncs (make system no dependencies) on emulator builds, the resulting build doesn't work.

Cause: All emulator builds now run Dex optimization at build time by default, which requires to follow all dependencies to re-optimize the applications each time the framework changes.

Fix: Locally disable Dex optimizations with export WITH_DEXPREOPT=false, delete the existing optimized versions with make installclean and run a full build to re-generate non-optimized versions. After that, partial builds will work.

"Permission Denied" during builds.

Symptom: All builds fail with "Permission Denied", possibly along with anti-virus warnings.

Cause: Some anti-virus programs mistakenly recognize some source files in the Android source tree as if they contained viruses.

Fix: After verifying that there are no actual viruses involved, disable anti-virus on the Android tree. This has the added benefit of reducing build times.

Symptom: The build fails with various symptoms. One such symptom is cc1: error: unrecognized command line option "-m32"

Cause: The Android build system uses the default compiler in the PATH, assuming it's a suitable compiler to generate binaries that run on the host. Other situations (e.g. using the Android NDK or building the kernel) cause the default compiler to not be a host compiler.

Fix: Use a "clean" shell, in which no previous actions could have swapped the default compiler.

Build errors caused by non-default tool settings.

Symptom: The build fails with various symptoms, possibly complaining about missing files or files that have the wrong format. One such symptom is member [...] in archive is not an object.

Cause: The Android build system tends to use many host tools and to rely on their default behaviors. Some settings change those tools' behaviors and make them behave in ways that confuse the build system. Variables known to cause such issues are CDPATH and GREP_OPTIONS.

Fix: Build Android in an environment that has as few customizations as possible.

Build error with 4.0.x and earlier on MacOS 10.7.

Symptom: Building IceCreamSandwich 4.0.x (and older versions) fails on MacOS 10.7 with errors similar to this:Undefined symbols for architecture i386: "_SDL_Init"

Cause: 4.0.x is not compatible with MacOS 10.7.

Fix: Either downgrade to MacOS 10.6, or use the master branch, which can be built on MacOS 10.7.

$ repo init -b master
$ repo sync

Build error on MacOS with XCode 4.3.

Symptom: All builds fail when using XCode 4.3.

Cause: XCode 4.3 switched the default compiler from gcc to llvm, and llvm rejects code that used to be accepted by gcc.

Fix: Use XCode 4.2.

Build error with 4.0.x and earlier on Ubuntu 11.10.

Symptom: Building IceCreamSandwich 4.0.x (and older versions) on Ubuntu 11.10 and newer fails with errors similar to this: <command-line>:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]

Cause: Ubuntu 11.10 uses a version of gcc where that symbol is defined by default, and Android also defines that symbol, which causes a conflict.

Fix: Either downgrade to Ubuntu 10.04, or use the master branch, which can be compiled on Ubuntu 11.10 and newer.

$ repo init -b master
$ repo sync

Source sync issues



Difficulties syncing the source code (proxy issues).

Symptomrepo init or repo sync fail with http errors, typically 403 or 500.

Cause: There are quite a few possible causes, most often related to http proxies, which have difficulties handling the large amounts of data getting transfered.

Fix: While there's no general solution, using python 2.7 and explicitly using repo sync -j1 have been reported to improve the situation for some users.

Difficulties syncing the source tree (VirtualBox Ethernet issues).

Symptom: When running repo sync in some VirtualBox installations, the process hangs or fails with a variety of possible symptoms. One such symptom is DownloadError: HTTP 500 (Internal Server Error: Server got itself in trouble).

Cause: The default network behavior of VirtualBox is to use NAT (Network Address Translation) to connect the guest system to the network. The heavy network activity of repo sync triggers some corner cases in the NAT code.

Fix: Configure VirtualBox to use bridged network instead of NAT.

Difficulties syncing the source tree (DNS issues).

Symptom: When running repo sync, the process fails with various errors related to not recognizing the hostname. One such error is <urlopen error [Errno -2] Name or service not known>.

Cause: Some DNS systems have a hard time coping with the high number of queries involved in syncing the source tree (there can be several hundred requests in a worst-case scenario).

Fix: Manually resolve the relevant hostnames, and hard-code those results locally.

You can resolve them with the nslookup command, which will give you one numerical IP address for each of those (typically in the "Address" part of the output).

$ nslookup googlesource.com
$ nslookup android.googlesource.com

You can then hard-code them locally by editing /etc/hosts, and adding two lines in that file, of the form:

aaa.bbb.ccc.ddd googlesource.com
eee.fff.ggg.hhh android.googlesource.com

Note that this will only work as long as the servers' addresses don't change, and if they do and you can't connect you'll have to resolve those hostnames again and edit etc/hosts accordingly.

Difficulties syncing the source tree (TCP issues).

Symptomrepo sync hangs while syncing, often when it's completed 99% of the sync.

Cause: Some settings in the TCP/IP stack cause difficulties in some network environments, such that repo syncneither completes nor fails.

Fix: On linux, sysctl -w net.ipv4.tcp_window_scaling=0. On MacOS, disable the rfc1323 extension in the network settings.

Runtime issues


Camera and GPS don't work on Galaxy Nexus.

Symptom: Camera and GPS don't work on Galaxy Nexus. As an example, the Camera application crashes as soon as it's launched.

Cause: Those hardware peripherals require proprietary libraries that aren't available in the Android Open Source Project.

Fix: None.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值