1. 系统环境
Android 系统的编译环境目前只支持 Ubuntu(建议用最新版本14.03) 以及 Mac OS 两种操作系统。
2.下载Android源码
①Android源码使用Git进行管理,需要下载一些工具
工具下载:apt-get install git-core curl
②创建源码下载目录
mkdir -p /develop/download-froyo(2.2)
③为便于源码下载需要下载repo脚本
curl http://git-repo.googlecode.com/files/repo-1.12 > ./repo
④修改脚本为可执行
chmod 777 repo
⑤初始化Git库
./repo init -u https://android.googlesource.com/platform/manifest.git -b froyo
⑥下载:./repo sync
下载时间:如果是2.2(3G源码大概需要6、7个小时)
①部署JDK
不同的源码编译时需要的JDK版本不同,如2.2需要JDK5,2.3以上需要1.6
②辅助工具安装(C和C++)
③设置编译环境:. build/envsetup.sh 。该脚本的作用是初始化编译环境,并引入一些辅助的 Shell 函数,这其中就包括下一步使用 lunch 函数。
④选择编译目标:lunch(apt-get install python-lunch)
⑤编译:make -j4
4. Make命令
编译整个系统——make,耗时较长
编译SDK——make sdk
单个模块编译——make Media Provider,会将该模块依赖的所有模块也一起编译
编译某个目录下的模块——mm
编译某个目录下的指定模块——mmm
5.编译的结果输出
①所有的编译产物都位于 /out 目录下,该目录主要有以下几个子目录:
/out/host/:该目录下包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种工具,例如:emulator,adb,aapt 等。
/out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java 应用代码和 Java 库。
/out/target/product/<product_name>/:包含了针对特定设备的编译结果以及平台相关的 C/C++ 库和二进制文件。<product_name>是具体目标设备的名称。
②Build 的产物中最重要的是三个镜像文件,位于 /out/target/product/<product_name>/ 目录下
ramdisk.img:在启动时将被 Linux 内核挂载为只读分区,它包含了 /init 文件和一些配置文件。它用来挂载其他系统镜像并启动 init 进程。
system.img:包含了 Android OS 的系统文件,库,可执行文件以及预置的应用程序,将被挂载为根分区。
userdata.img:将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据。
Android 系统的编译环境目前只支持 Ubuntu(建议用最新版本14.03) 以及 Mac OS 两种操作系统。
2.下载Android源码
①Android源码使用Git进行管理,需要下载一些工具
工具下载:apt-get install git-core curl
②创建源码下载目录
mkdir -p /develop/download-froyo(2.2)
③为便于源码下载需要下载repo脚本
curl http://git-repo.googlecode.com/files/repo-1.12 > ./repo
④修改脚本为可执行
chmod 777 repo
⑤初始化Git库
./repo init -u https://android.googlesource.com/platform/manifest.git -b froyo
⑥下载:./repo sync
下载时间:如果是2.2(3G源码大概需要6、7个小时)
涨姿势: ①apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。 apt-get install xxxx 安装 apt-get remove xxxx 卸载但不删除配置 apt-get purge xxxx 卸载并且删除相关配置 ② curl是利用URL语法在命令行方式下工作的文件传输工具。 下载时可能会出现失败的情况:需要多试几次,或者 apt-get update apt-get install git-core curl --fix-missing ③配置软件源: system-->administration--->synaptic package manager--->setting--->repositories-->software sources Ubuntu 的软件源列表存放在 /etc/apt/sources.list 当中。 ④google的http://source.android.com/source/downloading.html,为了防止连接数过多,每个ip都需要认证。。。 第一步:从这里 the password generator(https://android.googlesource.com/new-password) 获取用户名和密码 第二步:将上面的页面上以machine开头的两行复制到 ~/.netrc文件中 第三步:repo init -u https://android.googlesource.com/a/platform/manifest 多了个“/a” 然后就可以repo sync了 ⑤一点小提示:有时候google的android服务器老是断,总不能让我们守在电脑旁边一直手工重新./repo sync吧,这可是需要N个小时才能下载完的啊。 我们就写个小脚本让电脑自动reposync,直到下载成功为止: #!/bin/shcount=0 ret=1 while [ $ret -ne 0 ] do repo syncret=$? count=$(( $count + 1)) echo "try $count, ret:$ret" done echo "try $count, ret:$ret" 把上面的内容复制到一个文件里tryrepo.sh 然后修改tryrepo.sh的属性,开始自动工作吧。第二点早上应该就大功告成了 chmod a+x tryrepo.sh./tryrepo.sh3. 编译源码
①部署JDK
不同的源码编译时需要的JDK版本不同,如2.2需要JDK5,2.3以上需要1.6
②辅助工具安装(C和C++)
③设置编译环境:. build/envsetup.sh 。该脚本的作用是初始化编译环境,并引入一些辅助的 Shell 函数,这其中就包括下一步使用 lunch 函数。
④选择编译目标:lunch(apt-get install python-lunch)
⑤编译:make -j4
4. Make命令
编译整个系统——make,耗时较长
编译SDK——make sdk
单个模块编译——make Media Provider,会将该模块依赖的所有模块也一起编译
编译某个目录下的模块——mm
编译某个目录下的指定模块——mmm
5.编译的结果输出
①所有的编译产物都位于 /out 目录下,该目录主要有以下几个子目录:
/out/host/:该目录下包含了针对主机的 Android 开发工具的产物。即 SDK 中的各种工具,例如:emulator,adb,aapt 等。
/out/target/common/:该目录下包含了针对设备的共通的编译产物,主要是 Java 应用代码和 Java 库。
/out/target/product/<product_name>/:包含了针对特定设备的编译结果以及平台相关的 C/C++ 库和二进制文件。<product_name>是具体目标设备的名称。
②Build 的产物中最重要的是三个镜像文件,位于 /out/target/product/<product_name>/ 目录下
ramdisk.img:在启动时将被 Linux 内核挂载为只读分区,它包含了 /init 文件和一些配置文件。它用来挂载其他系统镜像并启动 init 进程。
system.img:包含了 Android OS 的系统文件,库,可执行文件以及预置的应用程序,将被挂载为根分区。
userdata.img:将被挂载为 /data,包含了应用程序相关的数据以及和用户相关的数据。