环境是ubuntu 11.04.
1.需要安装的软件:
dialog automake libtool g++ patch build essential
flex bison gperf libesd0-dev libwxgtk2.6-dev zlib1g-dev
x-dev libx11-dev libncurses5-dev uuid-dev liblzo2-dev
libglib2.0-dev gnupg libsdl-dev zip uboot-mkimage
jdk(GB以后的版本要用1.6以上的)。
安装repo
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo(ICS的话要用另外一个谷歌的服务器,android.googlesource.com)
chmod a+x ~/bin/repo
Add ~/bin to your PATH
repo init -u git://android.git.kernel.org/platform/manifest.git
repo sync
当然ICS的话由于同步下的代码多,对机器要求要高点。
接下来的过程已经很熟悉了,同步,编译。生成镜像文件,烧写到开发板上,就可以了。
2.repo 还有其他的用法:
初始化指定的版本:repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0,
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-sdk-1.5_r2.
同步单个工程的代码:repo sync {project_name}
获取一个工程的源代码:git clone git://android.git.kernel.org/ + project path,例如:
获取通用内核的源代码:git clone git://android.git.kernel.org/kernel/common.git
repo init之后,将生成隐藏目录.repo,其中文件.repo/manifest.xml为repo工程的描述文件,表示repo时包
含的各个工程,其片段如下所示 :
<project path="dalvik" name="platform/dalvik" />
<project path="development" name="platform/development" />
<project path="frameworks/base" name="platform/frameworks/base" />
repo/manifest.xml中的path表示工程获取后的路径(基于当前目录),name表示工程的名称。
提交代码的流程:
repo start {branch_name} {project_name}
git add {file_path}
git commit {file_path} –m"comment"
repo upload {project_name}
3.Androi代码工程分为三个部分。
核心工程:core project
建立android系统的基础,在根目录的各个文件夹下。
扩展工程:external project
使用其他开源项目扩展的功能,在external 文件夹下。
包 :package
提供android的应用程序和服务。在package文件夹下。
核心工程:
bionic: 程序运行时候的库文件,如:libc, libm,libstdc++等函数库,动态链接linker。
bootable: bootloader diskintaller,recovery.
build: build 系统.
dalvik: dalvik 虚拟机
development: 高层开发和一些开发工具.
framework: 整个框架相关的代码。
framework/base: android 核心的框架结构。
hardware/libhardware: 硬件抽象层库。
hardware/ril : radio interface layer.
kernel: linux 内核
prebuild: 对linux和mac os编译的二进制支持。
/system/core 最小化可以启动的环境。
/system/extras 底层调试和检查工具。
扩展工程:
aes: advanced Encryption Standard 高级加密标准。
bison : (主机)自动生成语法分析器程序,基本兼容Yacc
bluez : 蓝牙库
bsdiff : (主机)用于为二进制文件生成补丁
bzip2 : (主机/目标机)压缩文件工具
clearsilver : (主机)模板语言,包括python, java, perl, c的lib支持。
dbus : freedesktop下开源的Linux IPC通信机制
dhcpcd : 动态主机设定协定 的工具
dropbear : ssh2服务器和客户端
e2fsprogs : (主机)Ext2/3/4 文件系统的工具
elfcopy : (主机)ELF工具
elfutils : (主机)ELF工具
embunit : 嵌入式C系统的测试框架
emma : (JAVA)Java代码覆盖检查工具
esd : (仅头文件)
expat : (主机/目标机)XML Parser
fdlibm : 精确实现 IEE754 浮点数
freetype : C语言实现的字体光栅化引擎制作的的一个软件库。
引擎制作的的一个软件库。
gdata : (JAVA)用于数据操作
genext2fs : (主机)Ext2文件系统生成工具
giflib : GIF工具
googleclient : (JAVA)Google客户端
grub : 多重操作系统启动管理器
icu4c : IBM的支持软件国际化的开源项目
iptables : 建构在 Xtables 的架构下,定义“表(tables)”、“键(chain)”、“规则(rules)”三个资料来处理封包的运送。
jdiff : (主机JAVA库)比较工具
jhead : Jpeg文件头(Exif)编辑修改软件
jpeg : Jpeg工具库
libffi : a portable foreign function interface library
libpcap : 网络数据包捕获函数包
libpng : PNG 工具库
libxml2 : (主机/目标机)C语言的XML解析库
netcat : 用来对网路连线TCP或者UDP进行读写
netperf : 网络性能的测量工具
neven : 人脸识别的一套库
opencore : 多媒体框架
openssl : C语言的SSL(Secure Sockets Layer)工具
oprofile : Linux内核支持的一种性能分析机制
ping : ping工具
ppp : ppp工具
protobuf : Google工具,利用.proto文件自动生成代码
qemu : (主机)仿真环境
safe-iop : 夸平台的整数运算
skia : 一个图形库
sonivox : Sonic嵌入式的音乐合成器
sqlite : 轻量级的SQL嵌入式数据库
srec : (主机/目标机)motorola S-records 16进制文件格式工具
strace : 监视系统调用的工具
tagsoup : (JAVA)HTML 解析工具
tcpdump : 网络中传送的数据包的头完全截获下来提供分析的工具
tinyxml : (主机/目标机)XML工具
tremor : Ogg Vorbis的播放器
webkit : 开源的浏览器引擎
wpa_supplicant : 无线局域网Wifi的工具
xdelta3 : (主机/目标机)二进制文件比较工具
yaffs2 : (主机)YAFFS文件系统
包:
Applications (package/apps)
AlarmClock,Browser,Calculator ,Calendar ,Camera
Contacts ,Email,GoogleSearch,HTML Viewer,IM
Launcher ,Mms,Music,PackageInstaller,Phone
Settings ,SoundRecorder ,Stk ,Sync ,Updater ,
VoiceDialer
Providers (package/Providers)
CalendarProvider ,ContactsProvider ,DownloadProvider
DrmProvider ,GoogleContactsProvider ,
GoogleSubscribedFeedsProvider ,
ImProvider ,MediaProvider ,SettingsProvider ,
SubscribedFeedsProvider ,TelephonyProvider
android 编译;
在android目录下,有Makefile, 直接执行make
make 过程中将自动找到各个目录中的.mk文件,android编译过程将搜索所有的目录,和编译本身和目录的名字及位置没有关系。编译结束后将在out 文件夹下产生所需要的文件:1>. 主机工具 2>. 目标机程序. 3>. 目标机镜像文件. 4>.目标机linux内核.大概可以用下图表示;
out/target/product/generic/
|-- android-info.txt
|-- clean_steps.mk
|-- data [ 数据目录]
|-- installed-files.txt
|-- obj [ 中间目标文件目录]
| |-- APPS JAVA应用程序包
| |-- ETC 运行时配置文件
| |-- EXECUTABLES 可执行程序
| |-- KEYCHARS
| |-- NOTICE.html
| |-- NOTICE.html.gz
| |-- NOTICE_FILES
| |-- PACKAGING
| |-- SHARED_LIBRARIES 动态库(共享库)
| |-- STATIC_LIBRARIES 静态库(归档文件)
| |-- include
| `-- lib
|-- previous_build_config.mk
|-- ramdisk.img 根文件系统映像
|-- root [ 根文件系统目录 ]
|-- symbols [ 符号的目录 ]
|-- system [ 主文件系统目录 ]
|-- system.img 主文件系统映像
|-- userdata-qemu.img 为QEMU的数据映像
`-- userdata.img 数据映像
Android编译完成后可以在QEMU中运行,首先设置环境变量:
declare -x ANDROID_PRODUCT_OUT="{Android root}out/target/product/generic“
运行Android:
./out/host/linux-x86/bin/emulator -shell
按照这种方式运行后,在出现图形系统的同时,将会出现Android的shell界面。默认皮肤为:HVGA-P=320×480
Android Emulator Android Emulator基于QEMU,这个仿真器支持Android Virtual Device (Android虚拟设备)以及很
多的调试性能。
使用Android Emulator可以仿真Android整个系统运行,在运行的过程中,可以指定内核、主文件系统、用户文件系统等。
emulator -avd <avd_name> [-<option> [<value>]] ... [-<qemu args>]
默认使用的内核是:prebuilt/android-arm/kernel/kernel
logcat是Android中一个命令行工具,可以用于得到程序的log信息。
logcat使用方法如下所示:
logcat [options] [filterspecs]
logcat的选项包括:
-s 设置过滤器,例如指定 '*:s'
-f <filename> 输出到文件,默认情况是标准输出。
-r [<kbytes>] 循环 log的字节数 (默认16 ),需要 –f。
-n <count> 设置循环log的最大数目 ,默认为 4。
-v <format> 设置log的打印格式, <format> 是下面的一种:
brief process tag thread raw time threadtime long
-c 清除所有log并退出
-d 得到所有log并退出 (不阻塞)
-g 得到环形缓冲区的大小并退出
-b <buffer> 请求不同的环形缓冲区 ('main' (默认), 'radio',
'events')
-B 输出log到二进制中。