`
yaku2688
  • 浏览: 89963 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android源码编译调试详解

 
阅读更多

 

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命令,然后又是慢长的等待,大约   23个小时。完成后镜像文件生成在out/target/product/generic下。

Android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,       ramdisk.imgemulator的文件系统,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 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 &     #调试工具

 

0
2
分享到:
评论

相关推荐

    Android源码编译流程借鉴.pdf

    《Android源码编译流程详解》 Android源码编译是开发者深入了解系统内核、定制化开发或进行系统级调试的重要步骤。本文将详细介绍Android源码的编译流程,包括必要的环境配置、编译指令以及相关工具的使用。 首先...

    最全的Android源码目录结构详解

    ### 最全的Android源码目录结构详解 在深入解析Android源码目录结构之前,我们先了解下Android系统作为全球最大的移动操作系统之一,其内部结构复杂且庞大,涉及到硬件抽象层(HAL)、应用框架、核心库等多个层次。...

    Android源码编译流程.pdf

    《Android源码编译流程详解》 Android系统作为全球最广泛使用的移动操作系统,其源码编译流程对于开发者而言至关重要。本文将详细解析Android源码的编译过程,包括环境搭建、编译命令以及相关工具的使用,帮助读者...

    Android 蓝牙串口调试助手源码(保证正确)

    **Android 蓝牙串口调试助手源码详解** 在移动设备开发中,尤其是在物联网(IoT)领域,蓝牙通信是一种常见的技术,用于设备间的短距离无线数据传输。本项目"Android 蓝牙串口调试助手源码"提供了一个完整的解决方案...

    SQLCipher_for_Android_source_build_源码编译过程

    标题《SQLCipher_for_Android_source_build_源码编译过程》和描述《SQLCipher_for_Android_sourcebuild_源码编译过程》指向了一个关于如何在Android平台上构建SQLCipher源码的过程。SQLCipher是一个开源的数据库加密...

    最全的ANDROID源码目录结构详解1[整理].pdf

    3. build:这个目录包含了编译Android系统所需的全部脚本和工具,是进行整个Android源码编译的核心目录。 4. cts:CTS即兼容性测试套件(Compatibility Test Suite),用于确保设备符合Android兼容性标准。 5. ...

    Android APK反编译详解

    这篇博客"Android APK反编译详解"很可能深入探讨了这个主题,尽管具体内容无法直接获取,但我们可以基于这个主题和标签来构建一个详细的知识点讲解。 首先,APK是Android应用的打包格式,它包含了应用的二进制字节...

    怎样使用Eclipse来开发Android源码

    ### 使用Eclipse开发Android源码详解 随着移动设备的普及和技术的发展,Android系统因其开源性和灵活性成为了移动操作系统领域的佼佼者。对于开发者来说,能够高效地进行Android源码的开发和调试至关重要。本文将...

    Android Studio如何查看源码并调试的方法步骤

    Android Studio 查看源码并调试方法步骤 ...* Android Studio 查看源码并调试详解 * Android Studio 配置文件详解 * Gradle 编译 SDK 版本详解 * AndroidSourceViewer 插件使用详解 * Studio 缓存机制详解

    Android Studio应用开发实战详解随书源码

    总之,"Android Studio应用开发实战详解随书源码"是一个宝贵的教育资源,它涵盖了Android应用开发的各个方面,从基本的UI设计到复杂的业务逻辑处理,从项目构建到调试优化。通过深入学习和实践这些源码,开发者能够...

    Android反编译工具JEB -- 含MAC/Windows

    **Android反编译工具JEB详解** Android应用的开发通常以Java或Kotlin等编程语言进行,最终编译成Dalvik或ART字节码,隐藏了原始源代码。为了进行逆向工程、安全分析或者二次开发,开发者和研究人员常常需要用到反...

    Android项目开发详解源代码

    它包含了编译、调试应用所需的工具,如Android Studio,这是一个集成开发环境(IDE),提供了丰富的功能,如代码编辑、调试、性能分析等。 2. **AndroidManifest.xml**:这是每个Android应用必不可少的配置文件,用于...

    Android驱动开发与移植实战详解_android驱动_android驱动_android_

    3. 驱动编译:将驱动代码编译成内核模块,或者集成到内核源码中。 4. 驱动加载:通过insmod、modprobe或直接编入内核的方式加载驱动。 5. 测试验证:编写测试用例,确保驱动功能正确且性能稳定。 四、Android驱动...

Global site tag (gtag.js) - Google Analytics