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

来源:互联网 发布:阿里云服务器中文乱码 编辑:程序博客网 时间:2024/05/30 23:35
64位ubuntu13.04配置java、eclipse、android源代码4.2.2和android内核2.6.29

配置java

1、下载http://www.oracle.com/technetwork/java/javase/downloads/index.html

2、解压到当前文件夹,在终端新建文件夹

sudo mkdir /usr/java

转到当前文件夹,复制到/usr/java文件夹:

cd /home/tempal/下载sudo cp -r jdk1.7.0_25 /usr/java

3、编辑环境变量

sudo gedit /etc/profile

在最后加入以下语句:

export JAVA_HOME=/usr/java/jdk1.7.0_25export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH

保存,退出。

执行

source /etc/profile

使环境变量生效

4、更改默认配置:

更改默认配置选项 ,依次执行如下命令

sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_25/bin/java 300sudo update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.7.0_25/bin/jar 300sudo update-alternatives --install /usr/bin/javah javah /usr/java/jdk1.7.0_25/bin/javah 300sudo update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.7.0_25/bin/javap 300sudo update-alternatives --config java

 检查版本:

安装eclipse

http://www.eclipse.org/downloads/

下载解压,放到/opt文件夹中

然后编辑

sudo gedit /usr/share/applications/eclipse.desktop

 输入:

复制代码
[Desktop Entry]Name=EclipseComment=Eclipse SDKEncoding=UTF-8Exec=/opt/eclipse/eclipseIcon=/opt/eclipse/icon.xpmTerminal=falseType=ApplicationCategories=Application;Development;
复制代码

 打开它,固定到左边栏。

编译android源码和sdk

1、修改host

sudo gedit /etc/hosts

 在最后添加

74.125.237.1 dl-ssl.google.com

2、下载git工具和repo,执行如下命令:

sudo apt-get install git-core gnupgwget https://dl-ssl.google.com/dl/googlesource/git-repo/repo

赋予权限:

chmod a+x repo

将repo拷贝到可执行目录下:

sudo mv repo /bin/

 3、下载Android源码

mkdir Android

转到该目录下

cd Android

 执行以下命令看有哪些版本:

repo init -u https://android.googlesource.com/platform/manifest

 截图如下:

下载版本4.2.2,先执行:

repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1

 再执行:

repo sync

这个命令可能要输入多次因为下载可能会出问题,出现问题就用repo sync命令,继续下就可以下载4.2.2版本

下载截图:

经过蛋疼的几个小时(不过网络还可以,有时显示25MB/S),终于下载完成:

 

4、编译Android源码

下载其他依赖工具:

sudo apt-get install flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev build-essential zip curl valgrind

64位还需要:

sudo apt-get install gcc-multilib g++-multilib libc6-i386 libc6-dev-i386 lib32z1-dev zlib-bin libxml2-utils libncurses5:i386

 我的是64位系统,要装的工具包挺多的。

配置环境:

source build/envsetup.sh //初始化构建环境lunch sdk-eng //选择目标,没有lunch的话就apt-get install python-lunch

注意,Android源码编译要JDK1.6,经过很多次的尝试,还是改不了用JDK1.7来编译,我的尝试如下:

编译时候要强制检查1.6的jdk,于是要更改/home/tempal/Android/build/core下的文件main.mk查找[ "]1\.6[\. "$$]改成[ "]1\.7[\. "$$],输出对象貌似也要强制检查1.5的jdk,/home/tempal/Android/build/core/combo/javac.mk 把所有的用到 -target 1.5 中的1.5改成1.7

最后我在官网下载了JDK1.6.0.45来编译。

直接输入make命令(强烈建议加上参数-j4,也就是输入命令:make -j4.后面的4表示用多少个线程来编译,一般是CPU核心×2,我的CPU是两核,故是4),然后看有没有什么错误,如果前几分钟没错误的话就可以让它慢慢编译(它编译很久的,我的CPU是E7400,内存4G),我是没遇到什么错误,如果遇到错误应该是两个原因造成的:1、相关的包没有装,2、系统版本不同(如32位和64位不同),所要的环境不同。

make的截图:

经过差不多5个小时(这是没加参数的,如果加上-j4参数绝对有惊喜),完成后的截图:

 

5、编译Android SDK

 

配置环境:

 

source build/envsetup.sh //初始化构建环境lunch sdk-eng //选择目标,没有lunch的话就apt-get install python-lunch

要不编译时会出现错误:

 

development/build/sdk.atree:250: couldn't locate source file: system/app/ConnectivityTest.apk

 

development/build/sdk.atree:251: couldn't locate source file: system/app/GpsLocationTest.apk

 

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

 

截图:

 

 

 

先执行下面指令:

 

 

cd frameworks/basegit revert 5f9922d7c3bce158e4c7a58929d4075e7c91e32e

 

 

执行后,截图:

 

 

 CTRL+X,直接退出。解释一下为什么要执行git revert 5f9922d7c3bce158e4c7a58929d4075e7c91e32e,因为sdk本身的bug,如果不先执行,则会出现下面的错误:

 

 

make: *** [out/target/common/docs/online-gcm-ref-timestamp] 错误 45

 

截图如下:

 

 

 

编译完成后make sdk(强烈建议加上参数-j4,也就是输入命令:make sdk -j4.后面的4表示用多少个线程来编译,一般是CPU核心×2,我的CPU是两核,故是4,两个我都试过,发现加上-j4,编译的时间大大地减少),截图:

完成之后截图

6、运行模拟器

先添加环境变量,我是添加到/etc/profile中:

export PATH=$PATH:/home/tempal/Android/out/host/linux-x86/binexport ANDROID_PRODUCT_OUT=/home/tempal/Android/out/target/product/generic

 其中第一个是emulator等工具,第二个是指定android变量为emulator专设的,因为android启动要4个文件:zImage(位于out/host/linux-x86/bin中)、kernel-qemu、system.img、userdata.img(后三个位于ramdisk.img中),如果不设置第二个环境变量,则要启动模拟器时要指定参数来设置。

直接启动截图:

 编译Android内核源码

1、在Android文件夹中新建kernel文件夹存放内核源码

mkdir kernelcd kernel

利用git命令下载:

git clone https://android.googlesource.com/kernel/goldfish.git

 查看支线代码:

cd goldfishgit branch -a

获取2.6.29内核:

git checkout remotes/origin/android-goldfish-2.6.29

之后文件夹多了以下内容:

2、修改Makefile文件

找到:

ARCH ?= $(SUBARCH)CROSS_COMPILE  ?= 

改成:

ARCH            ?= armCROSS_COMPILE   ?= arm-eabi-

 第一个是由于linux内核适用于arm体系结构,第二个是表示交叉编译工具以“arm-eabi-”作为前缀,改完之后截图:

在android源码中配置环境:

source build/envsetup.sh //初始化构建环境lunch sdk-eng //选择目标,没有lunch的话就apt-get install python-lunch

 要不会出错,可能会导致无法启动模块器,系统报无法找到AVD,并要求你创建AVD。我第一次就是没有执行该命令,结果系统死都要我建立AVD,建立了还说文件路径错误。

3、交叉编译

可下载的源码中找到prebuilt/linux-X86/toolchain中,可以自己下载:

git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
下载后运行:
export PATH=$PATH:/home/tempal/下载/arm-eabi-4.6/bin  //如果是源码的话路径就是/home/tempal/Android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/binmake goldfish_deficonfig        //不行的话就执行make goldfish_armv7_defconfig 
截图如下:

执行make强烈建议加上参数-j4,也就是输入命令:make -j4.后面的4表示用多少个线程来编译,一般是CPU核心×2,我的CPU是两核,故是4,两个我都试过,发现加上-j4,编译的时间大大地减少

make
成功后,截图如下:

内核映像就在/home/tempal/Android/kernel/goldfish/arch/arm/boot中

启动模拟器:

emulator -kernel /home/tempal/Android/kernel/goldfish/arch/arm/boot/zImage &

加上&是为了后台启动,以便可以在同一终端运行adb,等模拟器运行起来再开始输入命令:

adb shellcd proccat version

截图如下:

显示了编译其版本是4.6,内核是2.6.29

 

插曲,adb执行是出错,libncurses.so.5没有找到,截图:

又百度了以下原来是64位系统的问题,adb是32位系统的工具,所以还要装一些依赖包,直接

sudo apt-get install libncurses5:i386   //sudo apt-get install ia32-libs会安装很多没用的包

  不过这个库我已经添加到上面的64为系统要下载的库中了。

 

最后如果执行emulator失败时,显示失败信息:

emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.

截图:

应该在emulator命令之前执行:

source build/envsetup.sh lunch sdk-eng 

这样每次启动模拟器时不用-avd参数指明哪个模拟器,但是每次都要输入两个命令,比较麻烦,可以自己建立一个模拟器,故有以下方法:

创建一个avd

但是创建avd的命令android前,应该添加路径,否则会有错误:

export ANDROID_SWT=/home/tempal/Android/out/host/linux-x86/framework

不过添加后还是会出现错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM

这是因为它默认的是32位的swt包。解决方法下载兼容64位系统的swt包替换掉,注意备份之前的awt.jar。

http://download.eclipse.org/eclipse/downloads/drops4/R-4.3-201306052000/#SWT

选择linux(x86_64/GTK 2)版本下载,然后把下载到的压缩文件里面的swt.jar替换/home/tempal/Android/out/host/linux-x86/framework目录下的swt.jar就可以了。

这样到/home/tempal/Android/out/host/linux-x86/sdk/android-sdk_eng.tempal_linux-x86/tools文件夹(如果直接用android命令是在/home/tempal/Android/out/host/linux-x86/bin下的android命令,因为之前添加到了环境变量中,这个没有补充4.2.2的参数)下面,打开终端,执行:

./android create avd -n tempal -t 1

其中tempal为avd名字,-t后面为第几个avd。执行完成之后可以执行

./android list avd

查看建立的avd。

运行

emulator -kernel /home/tempal/Android/kernel/goldfish/arch/arm/boot/zImage -avd tempal &

具体截图:

 

如果是出现错误:build/envsetup.sh: 1: Syntax error: "(" unexpected

执行$sudo dpkg-reconfigure dash命令,并选择“否”;

0 0
原创粉丝点击