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系统作为全球最大的移动操作系统之一,其内部结构复杂且庞大,涉及到硬件抽象层(HAL)、应用框架、核心库等多个层次。...
《Android源码编译流程详解》 Android系统作为全球最广泛使用的移动操作系统,其源码编译流程对于开发者而言至关重要。本文将详细解析Android源码的编译过程,包括环境搭建、编译命令以及相关工具的使用,帮助读者...
**Android 蓝牙串口调试助手源码详解** 在移动设备开发中,尤其是在物联网(IoT)领域,蓝牙通信是一种常见的技术,用于设备间的短距离无线数据传输。本项目"Android 蓝牙串口调试助手源码"提供了一个完整的解决方案...
标题《SQLCipher_for_Android_source_build_源码编译过程》和描述《SQLCipher_for_Android_sourcebuild_源码编译过程》指向了一个关于如何在Android平台上构建SQLCipher源码的过程。SQLCipher是一个开源的数据库加密...
3. build:这个目录包含了编译Android系统所需的全部脚本和工具,是进行整个Android源码编译的核心目录。 4. cts:CTS即兼容性测试套件(Compatibility Test Suite),用于确保设备符合Android兼容性标准。 5. ...
这篇博客"Android APK反编译详解"很可能深入探讨了这个主题,尽管具体内容无法直接获取,但我们可以基于这个主题和标签来构建一个详细的知识点讲解。 首先,APK是Android应用的打包格式,它包含了应用的二进制字节...
### 使用Eclipse开发Android源码详解 随着移动设备的普及和技术的发展,Android系统因其开源性和灵活性成为了移动操作系统领域的佼佼者。对于开发者来说,能够高效地进行Android源码的开发和调试至关重要。本文将...
Android Studio 查看源码并调试方法步骤 ...* Android Studio 查看源码并调试详解 * Android Studio 配置文件详解 * Gradle 编译 SDK 版本详解 * AndroidSourceViewer 插件使用详解 * Studio 缓存机制详解
总之,"Android Studio应用开发实战详解随书源码"是一个宝贵的教育资源,它涵盖了Android应用开发的各个方面,从基本的UI设计到复杂的业务逻辑处理,从项目构建到调试优化。通过深入学习和实践这些源码,开发者能够...
**Android反编译工具JEB详解** Android应用的开发通常以Java或Kotlin等编程语言进行,最终编译成Dalvik或ART字节码,隐藏了原始源代码。为了进行逆向工程、安全分析或者二次开发,开发者和研究人员常常需要用到反...
它包含了编译、调试应用所需的工具,如Android Studio,这是一个集成开发环境(IDE),提供了丰富的功能,如代码编辑、调试、性能分析等。 2. **AndroidManifest.xml**:这是每个Android应用必不可少的配置文件,用于...
3. 驱动编译:将驱动代码编译成内核模块,或者集成到内核源码中。 4. 驱动加载:通过insmod、modprobe或直接编入内核的方式加载驱动。 5. 测试验证:编写测试用例,确保驱动功能正确且性能稳定。 四、Android驱动...