内容来自
mr_raptor · 深入浅出 - Android系统移植与平台开发
芯客网 · PX2开发板Android编译开发环境介绍
Fan凡 · Android编译环境搭建
Android操作系统介绍
Android是Google公司于2007年11月发布的一款非常优秀的智能移动平台操作系统。Android系统最初由AndyRubin等人于2003年10月创建。Google于2005年8月17日收购Android并组建OHA①开放手机联盟开发改良Android。Android系统是一个基于ApacheLicense②, GPL③软件许可的开源手机操作系统,底层由Linux操作系统作为内核,我们可以直接从Android的官方网站上下载最新的Android源码和相关开发工具包。
Android官方首页:http://www.android.com/
Android官方开发者首页:http://developer.android.com/index.html
Android官方开源项目AOSP首页:http://source.android.com/
软件架构
Android应用程序开发是基于Android架构提供的API和类库编写程序,这些应用程序是完全的Java代码程序,它们构建在Android系统提供的API之上。
Android 开发方式:开发Android应用程序可以基于Google提供的Android SDK(Software Development Kit,软件开发工具包),也可以直接在Android源码中进行编写。
1) Android SDK开发:它提供给程序员一种最快捷的开发方式,基于IDE开发环境和SDK套件,快速开发出标准的Android应用程序,但是,对于一些要修改框架代码或基于自定义API的高级开发,这种方式难以胜任。
2) Android源码开发:基于Android提供的源码进行开发,可以最大体现出开源的优势,让用户自定义个性的Android系统,开发出更高效、更与众不同的应用程序,这种方式更适合于系统级开发,对程序员要求比较高。
Android源码开发过程:
搭建开发环境:根据两种开发方式的不同,搭建开发环境略有不同 下载Android源码:得益于Android的开源特点,Android源码中包含大量保贵的技术知识,我们可以在阅读源码过程中更深入的了解Android系统的奥秘,为我们 编写更高效、更有特点的应用程序打下基础,同时能展现给读者一个更庞大系统的设计蓝图,为系统设计师及项目经理提供参考价值。同时,Android的源码 中提供的应用程序示例、设计模式、软件架构为我们编写大型应用程序提供经验。 编译Android源码:通过编译Android源码,生成我们开发环境及目标系统,为我们做系统底层开发、系统定制与优化做准备,通过分析编译过程,让我们学习到大型工程的代码管理与编译原理。
Android源码开发环境搭建
谷歌官网关于源码下载、编译的地址: https://source.android.com/source/building.html 建议有能力的情况下,配置以上述网址中包含的内容为准。以下内容以px2开发板为主要情形做考虑。
google推荐使用64位ubuntu系统,使用虚拟机或者双系统都可以。如果在虚拟机中运行Linux,至少需要16G交换分区空间,30G或更多的磁盘空间来编译Android。Android源码大小接近8.5G,单次编译需要约30G磁盘空间,完整编译需要100G或者更多。所以不推荐使用虚拟机。
PS.Android的源码开发可以在MacOS上或Ubuntu系统上,目前不支持在Windows下进行源码开发。
px2开发板推荐使用ubuntu
Ubuntu 12.04系统,安装完后,可以查看如下版本信息: $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.3 LTS Release: 12.04 Codename: preciseubuntu下载, 网易开源镜像站: http://mirrors.163.com/ubuntu-releases/
为了能够正确下载和编译Android源码,还需要安装以下程序包:
从Oracle官网去下载jdk:
http://www.oracle.com/java ->Downloads->Java for developers->Download Java SE 6 Update 45.(jdk-6u45-linux-x64.bin)
这里推荐使用1.6.0_45版本的JDK 使用如下命令安装jdk:
$ mv jdk-6u45-linux-x64.bin /user/local $ chmod a+x jdk-6u45-linux-x64.bin $ ./jdk-6u45-linux-x64.bin
安装完JDK后,将jdk路径加入到系统环境变量/etc/profile中:
JAVA_HOME=/usr/local/jdk1.6.0_45/ CLASSPATH=.:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
保存之后,可以source /etc/profile,然后查看jdk版本:
java -version系统编译步骤:
1,初始化系统编译环境
使用如下命令: $ source build/envsetup.sh 或 $ . build/envsetup.sh2,编译代码
直接在工程根目录下执行make即可,可用-j参数指定多线程编译,加快编译速度。(下面-j4表示用四个线程编译)
先编译产品kernel,见如下命令:
$ cd kernel $ make rkpx2_4.4_lcd_defconfig //支持屏幕的内核镜像 $ make kernel.img如果要编译带VGA功能的内核镜像,请配置
$ make rkpx2_4.4_vga_defconfig在kernel/目录下生成kernel.img 上面的两个defconfig文件可以通过make help命令查看
然后编译android:
$ cd ../ $ make -j43,生成固件
编译完成后,可执行mkimage.sh脚本生成固件。
$ ./mkimage.sh固件生成目录:rockdev/Image-rkpx2/,生成
boot.img ,misc.img,recovery.img,system.img
4,uboot的编译
在工程目录下的
$ cd u-boot $ make distclean $ make rkpx2
在目录下生成RKPX2Loader_miniall.bin和uboot.img
注意:配置ccache
ccache(compiler cache)是一个编译器缓存,该工具会高速缓存编译生成的信息,并在编译的特定部分使用高速缓存的信息, 比如头文件,这样就节省了通常使用cpp解析这些信息所需要的时间。如果您编译清单2中的文件,假定foobar.h中包含对其他头文件的引 用,ccache会用那个文件的 cpp-parsed版本来取代include声明。ccache只是将最终的文本拷贝到文件中,使得它可以立即被编译,而不是真正去读取、理解并解释其内容。
这一步是可选的。可能会节省编译时间。配置方法如下:
打开用户目录下的.bashrc,将下面语句添加到文件后面并保存退出:
exportUSE_CCACHE=默认情况下cache会保存在~/.ccache目录下,如果主目录位于NFS或其他非本地文件系统上,也要将下面语句添加到.bashrc中,之后保存并退出:
export CCACHE_DIR=<path-to-your-cache-directory>推荐的cache目录大小为50-100GB,在命令行执行以下命令:
prebuilt/linux-x86/ccache/ccache-M 50G该设置会保存到CCACHE_DIR中,且该命令是长效的,不会因系统重启而失效。