配置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://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/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
查看支线代码:
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
下载后运行:
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会安装很多没用的包
不过这个库我已经添加到上面的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命令,并选择“否”;