Android2.2 源码编译
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 u+x 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 CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_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 CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_Home/lib
保存后关闭,然后重启电脑,验证安装,在命令行输入
java –version
javac -version
查看否是刚才所安装的JDK版本
2、下载Android2.2源码
安装repo脚本
在当前用户目录下新建一repo目录。在终端中执行:
mkdir repo
然后向PATH中添加repo路径
export PATH=$PATH:~/repo
然后下载repo脚本并修改可执行属性
curl https://android.git.kernel.org/repo > ~/repo/repo
chmod a+x ~/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命令,然后又是慢长的等待,大约 要2-3个小时。完成后镜像文件生成在out/target/product/generic下。
Android源码编译后得到system.img,ramdisk.img,userdata.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/generic(generic是默认的产品名)下打包所有的映像文件:
generic-img-eng.用户名.zip
配置AndroidSDK环境变量,在终端中执行
sudo gedit ~/.bashrc
在文件最后添加如下内容
#set android environment
export PATH=$PATH:/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的问题
调试
在IDE(eclipse)中修改源代码后在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 & #调试工具
分享到:
相关推荐
本文主要介绍Android 源码编译调试,这里对Android 源码的编译以及调试做了详细的流程详解,有需要的小伙伴可以参考下
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
1.3.5 使用DX编译Android应用 18 1.3.6 使用Android Asset Packaging Tool(AAPT)打包资源 19 1.3.7 使用mksdcard管理虚拟SD卡 19 1.4 开始第一个Android应用 20 1.4.1 使用Eclipse开发第一个 ...
2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 3.1.1 Android项目目录结构 3.1.2 Android应用解析 3.2 Android的生命周期 3.3 Android程序U...
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
12.安装部署Android源码编译环境 13.Android源码目录结构与修改引导 / |3 T: f, f8 [2 @+ p 14.Android源码修改与刷机介绍 & D- q# v- o) o) ?/ u( A 15.Android Jni 编程 & Y6 ^/ J* G3 ] 16.arm 汇编代码讲解1 . ...
图片浏览器android源码下载 Android瀑布流加载图片效果实例 Android中利用ViewPager实现视图切换 Android泡泡聊天界面的源码实现 android 实现EditText震动效果 Touch Index Bar (有锤子有真相) Android数据库最...
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
1.2 Android源码的编译 6 1.3 编译在G1上运行的android 2.1(eclair)代码 9 1.4 编译在G1上运行的android 2.2(froyo)代码_旧方法 12 1.5 编译在G1上运行的android 2.2(froyo)代码_新方法 15 1.6 编译在N1上运行的...
1.2 Android源码的编译 ... .6 1.3 编译在G1 上运行的android 2.1(eclair)代码 ... ..9 1.4 编译在G1 上运行的android 2.2(froyo)代码_旧方法... ..12 1.5 编译在G1 上运行的android 2.2(froyo)代码_新方法... ..15 ...
Android安全应用逆向: 动态调试Smali源码 Android安全应用逆向: 使用IDA动态调试.so文件 Android安全应用逆向: 在JNI_onload函数处下断点避开针对IDA的反调试 Android安全应用逆向: Small注入 Android安全应用逆向: ...
Android安全应用逆向--26--动态调试Smali源码.pdf Android安全应用逆向--27--使用IDA动态调试.so文件.pdf Android安全应用逆向--28--在JNI_onload函数处下断点避开针对IDA的反调试.pdf Android安全应用逆向--29--...
-国嵌体验入门班-2-4(Android系统体验).avi 国嵌视频2.iso -国嵌课程1-嵌入式入门体验班(下) -第3天(Linux系统体验) -国嵌体验入门班-3-1(Linux定制安装).avi -国嵌体验入门班-3-2(Linux命令).avi -国嵌...