sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
用于apt-get install之后的锁死情况
====================
====================
====================
====================
====================
三、源码运行
在编译完整个项目后,如果我们需要观看编译后的运行效果,那么就需要在系统中安装模拟器android-sdk-linux_x86-1.1_r1,这个SDK的下载地址为:
linux: http://dl.google.com/android/android-sdk-linux_x86-1.1_r1.zip
mac: http://dl.google.com/android/android-sdk-mac_x86-1.1_r1.zip
windows: http://dl.google.com/android/android-sdk-windows-1.1_r1.zip
解压后需要把/usr/local/src/android-sdk-linux_x86-1.1_r1/tools目录加入到系统环境变量/etc/profile中。
然后找到编译后android的目录文件out,我们发现在android/out/host/linux-x86/bin下多了很多应用程序,这些应用程序就是android得以运行的基础,所以我们需要把这个目录也添加到系统PATH下,在$HOME/.profile文件中加入如下内容:
PATH=”$PATH:$HOME/android/out/host/linux-x86/bin”
接下来我们需要把android的镜像文件加载到emulator中,使得emulator可以看到android运行的实际效果,在$HOME/.profile文件中加入如下内容:
ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
export ANDROID_PRODUCT_OUT
然后重新启动机器。
下面就可以进入到模拟器目录中并启动模拟器
cd $HOME/android/out/target/product/generic
emulator -image system.img -data userdata.img -ramdisk ramdisk.img
总结一下安装过程中的关键点:
1:JDK版本必须安装
2:利用下面的命令确保所需软件都被正确安装
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential python valgrind curl git
3:内存及虚拟内存保证在2GB以上,可以采用命令行free -m查看内存是否足够,如果内存不够终端停滞
====================
====================
====================
====================
====================
第一次编译Android源码时,使用Jdk6没有编译通过,可能需要用Jdk5。
直接使用命令:apt-get install无法获取jdk5包,可能已从源库中移走。
所以需要到SUN网站上手动下载。
1 首先从网上搜索下载:jdk-1_5_0_22-linux-i586.bin(47M)
2 下载到本地后(假如将jdk5下载到了目录/home/yvon/download下),进行安装:
cd /home/yvon/download
chmod 777 jdk-1_5_0_22-linux-i586.bin
sudo -s ./jdk-1_5_0_22-linux-i586.bin
然后会出现大篇幅的协议内容,一路回车即可,知道问你要不要安装,选择yes.
安装成功后,会在当前目录下生成一个目录: jdk1.5.0_22
3 安装好后,还必须配置环境变量
sudo gedit/etc/profile.d/java.sh
这样可以在所有的用户中使用
在新的java.sh中输入以下内容:
#set java environment
export JAVA_HOME=/home/yvon/download/jdk1.5.0_22
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
保存。
重启机器。
4 重启机器后,使用如下命令查看
1)查看安装成功与否
java -version
显示信息:
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Server VM (build 1.5.0_22-b03, mixed mode)
则安装成功。
2)查看环境变量修改成功与否
echo $JAVA_HMOE
echo $CLASSPATH
5 最后,就可以编译Android源码了,具体编译过程可参考本空间中的另一篇文章:
Build the Android work environment in Ubuntu Linux
安装Jdk5后编译通过!
repo安装之后,在.bashrc中export一下path, 之后最好重进一下bash或者是source一下PATH
192.168.174.132
文件夹映射驱动器 --- 创建共享文件
http://wenku.baidu.com/view/c130b16648d7c1c708a14551.html
http://www.360doc.com/content/10/0222/16/155970_16459284.shtml
http://blog.sina.com.cn/s/blog_40b025790100lsg0.html
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
http://hi.baidu.com/huleyin/blog/item/d1fec00bd9b7033de8248816.html
http://spaceflysky-163-com.javaeye.com/blog/377589
http://www.cnblogs.com/kaixuan/archive/2009/03/18/1415431.html
全部同步完毕后,进入到Android目录下,使用make命令编译,你会发现出现如下错误提示:
host C: libneo_cgi <= external/clearsilver/cgi/cgi.c
external/clearsilver/cgi/cgi.c:22:18: error: zlib.h: No such file or directory
这个错误是因为我们缺少zliblg-dev,需要使用apt-get命令从软件仓库中安装,如下:
sudo apt-get install zliblg-dev
同理,我们还需要依次安装如下软件
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install libsdl-dev
sudo apt-get install libesd0-dev
sudo apt-get install libncurses5-dev
sudo apt-get install libx11-dev
以上软件全部安装完毕后,运行make命令再次编译Android源码。
这个时候你会发现出现很多java文件无法编译的错误,打开Android的源码我们可以看到在android/dalvik/libcore/dom/src/test/java/org/w3c/domts下有很多java源文件,这意味着编译Android之前需要先安装JDK。
首先从sun官方网站下载jdk-6u16-linux-i586.bin文件并安装它。
在Ubuntu 10.04中,/etc/profile文件是全局的环境变量配置文件,它适用于所有的shell。在我们登陆Linux系统时,首先启动/etc/profile文件,然后再启动用户目录下的~/.bash_profile、~/.bash_login或~/.profile文件中的其中一个,执行的顺序和上面的排序一样。如果~/.bash_profile文件存在的话,一般还会执行~/.bashrc文件。
- 7 编译源码, 并得到~/open_src/android/out 目录
在命令行执行make命令:
$make
这是一个很漫长的过程, 等吧...... - 8 测试运行
8.1 先设置环境变量:
打开~/.bashrc文件, 并在最后添加下面两行:
export PATH=$PATH:~/open_src/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=~/open_src/android/out/target/product/generic
8.2 运行模拟器:
emulator --debug-init -skin QVGA-L //可能会提示unknown option: --debug-init, 去掉--debug-init即可
或者直接执行emulator, 这样使用的是默认的皮肤
如果最后能进入到系统并看到一个大时钟, 说明就大功告成了.
- 9 后续编译:
先在android目录下执行
$ . build/envsetup.sh
然后你就会多出几个可用的命令。在改了Contacts联系人项目后,可以简单的执行一下命令来单独编译这个部分:
$mmm packages/apps/Contacts/
为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
$ make snod
当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了
- 以下是编译成功后的最后一些输出:
Install: out/target/product/generic/system/xbin/scp
Notice file: system/extras/showmap/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/showmap.txt
Install: out/target/product/generic/system/xbin/showmap
Notice file: system/extras/showslab/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/showslab.txt
Install: out/target/product/generic/system/xbin/showslab
Notice file: external/sqlite/dist/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/sqlite3.txt
Install: out/target/product/generic/system/xbin/sqlite3
Notice file: external/dropbear/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/ssh.txt
Install: out/target/product/generic/system/xbin/ssh
Install: out/target/product/generic/system/xbin/strace
Notice file: system/extras/su/NOTICE -- out/target/product/generic/obj/NOTICE_FILES/src//system/xbin/su.txt
Install: out/target/product/generic/system/xbin/su
Install: out/target/product/generic/system/xbin/timeinfo
Copy: out/target/product/generic/system/etc/apns-conf.xml
Copying: out/target/product/generic/obj/NOTICE_FILES/src/kernel.txt
Finding NOTICE files: out/target/product/generic/obj/NOTICE_FILES/hash-timestamp
Combining NOTICE files: out/target/product/generic/obj/NOTICE.html
gzip -c out/target/product/generic/obj/NOTICE.html > out/target/product/generic/obj/NOTICE.html.gz
zip -qj out/target/product/generic/system/etc/security/otacerts.zip build/target/product/security/testkey.x509.pem
Generated: (out/target/product/generic/android-info.txt)
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
6、在模拟器上运行编译好android
android SDK的emulator程序在android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要加载一些image的,默认加载android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(内核) ramdisk.img system.img userdata.img
编译好android之后,emulator在~/project/android/cupcake/out/host/linux-x86/bin下, ramdisk.img system.img userdata.img则在~/project/android/cupcake/out/target/product/generic下
cd ~/project/android/cupcake/out/host/linux-x86/bin
增加环境变量
vim ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量
export ANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};
最后,同步这些变化:
source ~/.bashrc
emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。
out/host/linux-x86/bin下生成许多有用工具(包括android SDK/tools的所有工具),因此,可以把eclipse中android SDK的路径指定到out/host/linux-x86/bin进行开发
7、编译linux kernel
直接make android源码时,并没有make linux kernel。因此是在运行模拟器,所以不用编译 linux kernel。如果要移值android,或增删驱动,则需要编译 linux kernel
linux kernel的编译将在以后的文章中介绍。
8、编译模块
android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
. build/envsetup.sh (.后面有空格)
就多出一些命令:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人:
mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重新生成system.img
再运行模拟器
9、编译SDK
直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发 android了。
1)修改/frameworks/base/include/utils/Asset.h
‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’
原因是Eclipse编译工程需要大于1.3M的buffer
2)编译ADT。
注意,我们是先执行2),再执行3)。因为在执行./build_server.sh时,会把生成的SDK清除了。
用上了新的源码,adt这个调试工具也得自己来生成,步骤如下:
进入cupcake源码的development/tools/eclipse/scripts目录,执行:
export ECLIPSE_HOME=你的eclipse路径
./build_server.sh 你想放ADT的路径
3)执行make sdk。
注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk
make sdk
编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/,此目录下有android-sdk_eng.xxx_linux-x86.zip和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是SDK目录
实际上,当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来
4)关于环境变量、android工具的选择
目前的android工具有:
A、我们从网上下载的SDK( tools下有许多android工具,lib/images下有img映像)
B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)
C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)
那么我们应该用那些工具和img呢?
首先,我们不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。测试发现,如果使用B选项的工具和img,android模拟器窗口变小(可能是skin加载不了),而用C选项的工具和img则不会有此问题。
有些android工具依赖android.jar(比如android),因此,我们在eclipse中使用B选项的工具(SDK),使用C选项的img。其实,从emulator -help-build-images也可以看出,ANDROID_PRODUCT_OUT是指向C选项的img目录的
不过,除了用A选项的工具和img,用B或C的模拟器都不能加载sdcard,原因还不清楚。
5)安装、配置ADT
安装、配置ADT请参考官方文档
6)创建Android Virtual Device
编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:
android list
输出为:
Available Android targets:
[1] Android 1.5
API level: 3
Skins: HVGA-P, QVGA-L, HVGA-L, HVGA (default), QVGA-P
Available Android Virtual Devices:
表明没有AVD。如果没有AVD,eclipse编译工程时会出错(Failed to find a AVD compatible with target 'Android 1.5'. Launch aborted.)
创建AVD:
android create avd -t 1 -c ~/sdcard.img -n myavd
可以android –help来查看上面命令选项的用法。创建中有一些选项,默认就行了
再执行android list,可以看到AVD存放的位置
以后每次运行emulator都要加-avd myavd或@myavd选项,这里eclipse才会在你打开的emulator中调试程序
注意:
这样,SDK和ADT就生成了,就按照官方文档把他们整合到Eclipse,这里不再细说了。
建个android的新工程,试试你自己编译的sdk。