`
yaku2688
  • 浏览: 89032 次
  • 性别: 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 源码如何编译调试

    本文主要介绍Android 源码编译调试,这里对Android 源码的编译以及调试做了详细的流程详解,有需要的小伙伴可以参考下

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part3

    在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...

    疯狂Android讲义源码

     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开发第一个  ...

    《Android应用开发揭秘》源码

     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底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part1

    在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...

    零基础入门Android(安卓)逆向-rar

    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瀑布流加载图片效果实例 Android中利用ViewPager实现视图切换 Android泡泡聊天界面的源码实现 android 实现EditText震动效果 Touch Index Bar (有锤子有真相) Android数据库最...

    Android底层开发技术实战详解--内核、移植和驱动.(电子工业.王振丽).part2

    在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...

    2010年谢彦的android笔记

    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上运行的...

    android笔记.rar

    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 ...

    【推荐】超全的移动安全自学资料精编合集(43份).zip

    Android安全应用逆向: 动态调试Smali源码 Android安全应用逆向: 使用IDA动态调试.so文件 Android安全应用逆向: 在JNI_onload函数处下断点避开针对IDA的反调试 Android安全应用逆向: Small注入 Android安全应用逆向: ...

    移动安全系列教学下载共43份.zip

    Android安全应用逆向--26--动态调试Smali源码.pdf Android安全应用逆向--27--使用IDA动态调试.so文件.pdf Android安全应用逆向--28--在JNI_onload函数处下断点避开针对IDA的反调试.pdf Android安全应用逆向--29--...

    mini2440国嵌视频教程+课件+工具+软件+镜像+教程源码下载地址

    -国嵌体验入门班-2-4(Android系统体验).avi 国嵌视频2.iso -国嵌课程1-嵌入式入门体验班(下) -第3天(Linux系统体验) -国嵌体验入门班-3-1(Linux定制安装).avi -国嵌体验入门班-3-2(Linux命令).avi -国嵌...

Global site tag (gtag.js) - Google Analytics