ubuntu12.04编译android

http://hi.baidu.com/hyemiletoe/item/0403f331f12017179cc65ed9


1.
You are attempting to build with the incorrect version
of java.
Your version is: java version "1.6.0_24".
The correct version is: Java SE 1.6.
build/core/main.mk:131: *** stop。
解决方法:安装Java SE 1.6.33
sudo   update-alternatives  --install  /usr/bin/java java /usr/lib/jvm/jdk1.6.0_33/bin/java  1
sudo   update-alternatives  --config java
sudo   update-alternatives  --config javac

2.
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1
解决方法:
gedit build/core/combo/HOST_linux-x86.mk
HOST_GLOBAL_CFLAGS+=-D_FORTTFY_SOURCE=0
改为:
HOST_GLOBAL_CFLAGS+=-U_FORTTFY_SOURCE -D_FORTTFY_SOURCE=0

3.
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o] 错误 1
make: *** 正在等待未完成的任务....
解决方法:
gedit external/mesa3d/src/glsl/linker.cpp
在头文件段中,添加#include<stddef.h>

4.
In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: 错误: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
解决办法: 
external/oprofile/libpp/format_output.h 
把: 
mutable counts_t & counts; 
改为: 
counts_t & counts; 
5.
host C++: liboprofile_pp <= external/oprofile/libpp/callgraph_container.cpp
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 错误 1
make: *** 正在等待未完成的任务....
解决办法:
使用gcc4.4.6版本进行编译
通 过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库 。在安装gcc 4.4前该目录下是没有4.4目录的,安装gcc 4.4后该目录下就会多出4.4这个目录,且该4.4目录下有各种相应库文件。
Ubuntu 32bit系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4

装完后在/usr/bin目录下
$ ls -l gcc*
lrwxrwxrwx 1 root root      7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
发现gcc 链接到gcc-4.6,  需要将它改为链接到gcc-4.4 :
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
同理
ls -l g++*
lrwxrwxrwx 1 root root      7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要将g++链接改为g++-4.4:
/usr/bin$ sudo mv g++ g++.bak
/usr/bin$sudo ln -s g++-4.4 g++


g++ selected multilib '32' not installed

安装相应的工具吧:sudo apt-get install g++-4.4-multilib


再查看gcc和g++版本号:
gcc -v
g++ -v
均显示gcc version 4.4.6 ,说明gcc 4.4安装成功。

6.
In file included from /usr/include/fcntl.h:252,
                 from frameworks/base/media/mtp/MtpDevice.cpp:33:
In function ‘int open(const char*, int, ...)’,
    inlined from ‘bool android::MtpDevice::readObject(android::MtpObjectHandle, const char*, int, int)’ at frameworks/base/media/mtp/MtpDevice.cpp:670:
/usr/include/i386-linux-gnu/bits/fcntl2.h:51: 错误: 调用‘__open_missing_mode’,声明有错误属性:open with O_CREAT in second argument needs 3 arguments
host C++: libmtp <= frameworks/base/media/mtp/MtpObjectInfo.cpp
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libmtp_intermediates/MtpDevice.o] 错误 1
make: *** 正在等待未完成的任务....
解决方法:
gcc 新版本编译器对语法检查严格,gedit frameworks/base/media/mtp/MtpDevice.cpp 里面:
open函数中增加一个参数:0777

int fd = ::open(destPath, O_RDWR | O_CREAT | O_TRUNC,0777);
7.
target Dex: android.core.tests.libcore.package.org.no-core-tests-res
make: *** [out/target/common/obj/APPS/android.core.tests.libcore.package.com.no-core-tests-res_intermediates/noproguard.classes-with-local.dex] 已杀死
make: *** 正在等待未完成的任务....
解决方法:主要原因是内存不够,解决办法可以是增加虚拟机的内存,或者是增加swap的大小。
sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304
sudo mkswap -v1 /boot/swapfile
sudo swapon /boot/swapfile
free
sudo vi /etc/fstab
/boot/swapfile swap swap defaults 1 1

# sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304
记录了4194304+0 的读入
记录了4194304+0 的写出
4294967296字节(4.3 GB)已复制,779.381 秒,5.5 MB/秒
# sudo mkswap -v1 /boot/swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=defdb7d7-aa80-4777-b1d3-4e9f6d5d4103

8.out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o

In file included from /usr/include/stdlib.h:25,
 



                              from build/tools/acp/acp.c:11:
/usr/include/features.h:323: 致命错误: bits/predefs.h:没有那个文件或目录
编译中断。
make: ***[out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o] 错误1


解决方法:
确定你的系统是x86_64 GNU/Linux
      
root@mm-desktop:/home/mm/android#uname -a
      Linux mm-desktop 2.6.27-9-generic #1 SMP Thu Nov 20 22:15:32 UTC2008 x86_64 GNU/Linux
安装libc6-dev-i386
    sudo apt-get install libc6-dev-i386
sudo apt-get install libncurses5-dev:i386



make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

解决:
sudo apt-get install lib32z1-dev





  四. 编译SDK,这一步是可选的。

     1. 编译。执行以下命令:
     USER-NAME@MACHINE-NAME:~/Android$ make sdk
     2. 编译过程中可能会遇到的问题。
     问题一:找不到bios.bin和vgabios-cirrus.bin文件
     couldn't locate source file: usr/share/pc-bios/bios.bin
     couldn't locate source file: usr/share/pc-bios/vgabios-cirrus.bin
     注意,这里的usr/share目录指的是~/Android/out/host/linux-x86目录下的usr/share目录,修改办法是复制~/Android/prebuilt/common下的pc-bios文件夹到~/Android/out/host/linux-x86/usr/share即可:
      USER-NAME@MACHINE-NAME:~/Android$ cp ~/Android/prebuilt/common/pc-bios ~/Android/out/host/linux-x86/usr/share
    问题二:找不到ddmlib-tests.jar、 ninepath-tests.jar 、common-tests.jar 和sdkuilib-tests.jar文件
    在~/Android/out/host/linux-x86/framework这个目录下,可以找到以下几个文件common.jar、ddmlib.jar、ninepatch.jar、sdkuilib.jar这四个文件,然后将它们分别复制一份,并重命名,命名的原则很简单,就是在原有的名字后面跟上-tests即可。
    五. 安装编译好的Android镜像到模拟器上。
    1. 设置环境变量:
     USER-NAME@MACHINE-NAME:~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin  
     USER-NAME@MACHINE-NAME:~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
    其中, ~/Android/out/host/linux-x86/bin有我们要执行的emulator命令,而 ~/Android/out/target/product/generic是Android镜像存放目录,下面执行emulator命令时会用到。
    2. 运行模拟器。
     USER-NAME@MACHINE-NAME:~/Android$ emulator
    模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用~/Android/prebuilt/android-arm/kernel目录下的kernel-qemu文件,而Android镜像文件则默认使用 ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img,也就是我们刚刚编译出来的镜像问题。
    当然,我们也可以以指定的镜像文件来运行模拟器,即运行emulator时,即:
    USER-NAME@MACHINE-NAME:~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
    到这里,我们就可以在模拟器上运行我们自己编译的Android镜像文件了,是不是很酷呢?但是注意,这里说的Android镜像文件,只是包括system.img、userdata.img和ramdisk.img这三个文件,而Linux Kernel镜像用的是Android为我们预编译好的kernel-qemu镜像。那么,有没有办法使用我们自己编译的Linux Kernel镜像呢?答案上肯定的,这样我们就可以完全DIY自己的Android系统了!我将在下一篇文章描述如果编译自己的Linux Kernel镜像,敬请期待~


Package SDK: out/host/linux-x86/sdk/android-sdk_eng.wangwei_linux-x86.zip

development/build/sdk.atree:229: couldn't locate source file: framework/layoutlib-tests.jar
development/build/sdk.atree:230: couldn't locate source file: system/app/ConnectivityTest.apk
development/build/sdk.atree:231: couldn't locate source file: system/app/GpsLocationTest.apk
sdk/build/tools.atree:47: couldn't locate source file: usr/share/pc-bios/bios.bin
sdk/build/tools.atree:48: couldn't locate source file: usr/share/pc-bios/vgabios-cirrus.bin
sdk/build/tools.atree:146: couldn't locate source file: framework/ddmlib-tests.jar
sdk/build/tools.atree:147: couldn't locate source file: framework/ninepatch-tests.jar
sdk/build/tools.atree:148: couldn't locate source file: framework/common-tests.jar
sdk/build/tools.atree:149: couldn't locate source file: framework/sdklib-tests.jar
sdk/build/tools.atree:150: couldn't locate source file: framework/sdkuilib-tests.jar

make: *** [out/host/linux-x86/sdk/android-sdk_eng.wangwei_linux-x86.zip] 错误 44

解决方法如下:

$ source build/envsetup.sh

initialize some commands for android compile system

$lunch sdk-eng

The item have not been listed in the printed console list, but it still support the function

$make sdk





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值