您的位置:首页 > 移动开发 > Android开发

64位ubuntu13.04配置java、eclipse、android源代码4.2.2和android内核2.6.29

2013-07-27 17:39 441 查看
配置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_25
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export 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 300
sudo update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.7.0_25/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/java/jdk1.7.0_25/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.7.0_25/bin/javap 300
sudo update-alternatives --config java


检查版本:





安装eclipse
http://www.eclipse.org/downloads/
下载解压,放到/opt文件夹中

然后编辑

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


输入:

[Desktop Entry]
Name=Eclipse
Comment=Eclipse SDK
Encoding=UTF-8
Exec=/opt/eclipse/eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=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 gnupg
wget

https://storage.googleapis.com/git-repo-downloads/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[/code] 
截图如下:



下载版本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 [code]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/base
git 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/bin
export 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 kernel
cd kernel


利用git命令下载:

git clone https://android.googlesource.com/kernel/goldfish.git[/code] 
查看支线代码:

cd goldfish
git branch -a


获取2.6.29内核:

git checkout remotes/origin/android-goldfish-2.6.29


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



2、修改Makefile文件

找到:

ARCH ?= $(SUBARCH)
CROSS_COMPILE  ?=


改成:

ARCH            ?= arm
CROSS_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[/code] 
下载后运行:


export PATH=$PATH:/home/tempal/下载/arm-eabi-4.6/bin  //如果是源码的话路径就是/home/tempal/Android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin
make 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 shell
cd proc
cat 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会安装很多没用的包[/code]

不过这个库我已经添加到上面的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命令,并选择“否”;


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: