【Android源码 栏目提醒】:网学会员--在 Android源码 编辑为广大网友搜集整理了:Android2 2 源码编译步骤详解 doc - 技术总结绩等信息,祝愿广大网友取得需要的信息,参考学习。
Ubuntu10.4 Android2.2 JDK1.5 1、编译环境 Android2.2 Ubuntu10.04 JDK1.5 安装必要的软件环境 sudo apt-get install git-core sudo apt-get install gnupg 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 libwxgtk2.6-dev sudo apt-get install build-essential sudo apt-get install zip sudo apt-get install curl sudo apt-get install libncurses5-dev sudo apt-get install zlib1g-dev 以上就是官方推荐的软件包可能需要的软件包还有以下几个 sudo apt-get install make sudo apt-get install gcc sudo apt-get install g sudo apt-get install libc6-dev sudo apt-get install patch sudo apt-get install texinfo sudo apt-get install valgrind sudo apt-get install python JDK1.5安装 官方声明32位操作系统下JDK必须要用1.5的是因为在编译Android api docs时需要1.5的。
用JDK1.6必须用64位系统当然也有解决办法网上教程很多此处就不再一一声明。
到官网下载jdk-1_5_0_22-linux-i586.bin目前JDK1.5的最后更新版本是JDK 5.0 Update 22下载后得到一bin文件。
命令行输入 sudo chmod ux jdk-1_5_0_22-linux-i586.bin sudo gnome-open /opt 然后将此文件拷贝到 /opt目录下可自定义进入/opt目录输入命令 sudo -s ./jdk-1_5_0_22-linux-i586.bin 一路回车直到询问是否安装输入yes后确认安装完毕后配置环境变量 sudo gedit /etc/profile 在umask 022上面添加如下内容 export JAVA_HOME/opt/Java/jdk1.5.0_22 export JRE_HOME/opt/Java/jdk1.5.0_22/jre export CLASSPATHCLASSPATH:JAVA_HOME/lib:JAVA_HOME/jre/lib export PATHJAVA_HOME/bin:JRE_HOME/bin:PATH:HOME/bin 保存后关闭再在命令行输入 sudo gedit /etc/environment 然后在文件结尾加入以下内容 export JAVA_HOME/opt/Java/jdk1.5.0_22 export JRE_Home/opt/Java/jdk1.5.0_22/jre export CLASSPATHCLASSPATH:JAVA_HOME/lib:JRE_Home/lib 保存后关闭然后重启电脑验证安装在命令行输入 java –version javac -version 查看否是刚才所安装的JDK版本 2、下载Android2.2源码 安装repo脚本 在当前用户目录下新建一repo目录。
在终端中执行 mkdir repo 然后向PATH中添加repo路径 export PATHPATH:/repo 然后下载repo脚本并修改可执行属性 curl https://android.git.kernel.org/repo /repo/repo chmod ax /repo/repo 初始化repo 首先建立一个目录用来存放Android源代码并下载 mkdir Android2.2 cd Android2.2 repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo 注后面加 -b froyo 就是下载指定的版本源码froyo 就是Android2.2版本 的代号。
这中间会问到你的名字和Email。
如果你打算上传代码Email须是 一个Google账户。
最后执行repo sync开始同步代码接下来就是慢长的等待了中间可能会 遇到断线重新执行repo sync即可断点续传。
3、编译
Android源码 编译生成镜像文件make 切换到
Android源码目录下执行make命令然后又是慢长的等待大约 要23个小时。
完成后镜像文件生成在out/target/product/generic下。
Android源码编译后得到system.imgramdisk.imguserdata.img映像文件。
其中 ramdisk.img是emulator的文件系统system.img包括了主要的包、库等文件userdata.img包括了一些用户数据emulator加载这3个映像文件后会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录 下。
编译SDK make编译完成后执行 make sdk 生成对应于该版本源代码的sdk。
注意这个sdk不能用于生产环境用于生产环境的最好用如下命令 make PRODUCT-sdk-sdk 使用make sdk 会出现R文件不能自动生成的问题 SDK编译成功后会在out/host/linux-x86/sdk/ 生成sdk的文件目录和压缩包 android-sdk_eng.用户名_linux-x86 android-sdk_eng.用户名_linux-x86.zip 并在out/target/product/genericgeneric是默认的产品名下打包所有的映像文件 generic-img-eng.用户名.zip 配置AndroidSDK环境变量在终端中执行 sudo gedit /.bashrc 在文件最后添加如下内容 set android environment export PATHPATH:/
Android源码目录/out/host/linux-x86/bin export ANDROID_PRODUCT_OUT/
Android源码目录/out/target/product/generic 保存后退出在终端中同步这些设置 source /.bashrc 验证是否编译正确 在终端执行 emulator 注可进入ANDROID_PRODUCT_OUT目录后执行 emulator -image system.img -data userdata.img -ramdisk ramdisk.img 模拟器能正常启动则表明编译成功 4、单模块编译 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 编译所修改的代码所在模块例如 cd /android/src mmm packages/apps/Contacts 在/android/src中运行 cd /android/src make snod 该命令生成一个新的系统映像 out/target/product/generic/system.img 将这个系统映像拷贝至sdk下 out/host/linux-x86/sdk/android-sdk_eng.justin_linux-x86/tools/lib/images/ 5、Android 在Eclipse中进行调试 拷贝development/ide/eclipse/.classpath到源代码根目录 启动Eclipse并新建一Java Project 选择Create project from existing source 点击Browse选择Android的源码目录然后Finish 导入时比较慢导入完成后Android项目出错右击工程 Build Path -- Configure Build Path -- Libraries 删除两个出错的jar包 google-common_intermediates/javalib.jar gsf-client_intermediates/javalib.jar 再添加out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar 点击OK 在Eclipse中修改 展开packages/providers/CalendarProvider/src 展开包 com.android.providers.calendar 右键点击包com.android.providers.calendar 选择 new file 在对话框中选择点击 Advanced 按钮 可以看到Link to file in the file system checkbox 勾选上 checkbox. 这时 Browse... 可用. 点击 Browse... 按钮 选择out/target/common/obj/APPS/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java 点击OK 点击 Finish in New File 同样的方式修改com.android.providers.contacts的问题 调试 在IDEeclipse中修改源代码后在shell中编译运行 源码自带编译工具 先在Adroid源码根目录执行. build/envsetup.sh 再通过m/mm/mmm进行编译 - 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. . build/envsetup.sh 初始化 lunch 1 初始化模拟器等 mmm packages/providers/ContactsProvider/ 用mm/mmm来编译生成的.apk并不会打包到system.img中 可以使用make snod将模块打包到system.img中也可以使用 adb install -r .apk安装 注通过mmm packages/providers/ContactsProvider/ 编译后的apk在 out/target/product/generic/system/app emulator 启动Android模拟器 ddms 调试工具