说明:这篇文章是介绍如何开发Android源码,包括各平台的源码而非仅仅Google释放的源码,我采用的是MSM7267.
前提不需要SDK,不需要ADT,通过整个工程的编译都可以生成。为了在Eclipse中调试源码如Phone、MMS、Contact……
由于以前都没接触过Java、Eclipse、ADT... 这些,在网上看了N多的文章,就这篇详细,所以贴出来共享,同时 加入了、
自己在配置中 的TroubShooting。如果你是刚接触Android, 那配置这些可能一时半会搞不定,要做好心理准备。
官方配置网址:http://source.android.com/source/using-eclipse.html
带着问题出发
1、Android的文件系统结构是怎样的,我们安装的程序放在那里?
编译Android源码之后,在out/target/product/generic一些文件:
ramdisk.img、system.img、userdata.img、 system、 data、root
其中, system.img是由 system打包压缩得到的, userdata.img是由 data打包压缩得到的。
ramdisk.img是模拟器的文件系统,把ramdisk.img解压出来可知道,ramdisk.img里的文件跟root文件夹的文件基本一样。
模拟器装载ramdisk.img并解压到内存,接着分别把system.img和userdata.img挂载到 ramdisk下的system和data目录。我们编译出来的应用程序就是放在system/app下的。用户安装的程序则是放在data/app下。
2、Android SDK和android源码能为我们提供什么工具?
Android SDK提供有很多工具,如adb,ddms,emulator,aapt等,并提供kernel-qemu、ramdisk.img、 system.img、userdata.img。因此,只要有android SDK,我们就可以在模拟器上把android跑起来。
Android源码可以编译出android SDK、adb等工具、android文件系统,以及ADT插件,也就是说,我们可以从android源码编译出所有android相关的东西。
3、 把Android源码”make”之后会生成许多工具和android文件系统(system.img等),我们又可以使用“make sdk”来生成android SDK,android SDK也包括有工具和android文件系统(system.img等),而原来安装的时候我们也安装了android SDK,那么我们在开发时应该使用那些工具和android文件系统呢?
这个问题在后面回答。
4、官方推荐我们使用 eclipse+adt进入开发应用程序,我们的HelloActivity程序也是这里开发的。当我们把Android源码/packages /apps/下的工程导入eclipse时,一般都会出现找不到包的错误。那么我们怎样修改、编译、调试android源码呢?Google又是用什么工 具来开发android的?
这个问题在后面回答。
下面系统地讲述Android开发环境建立以及开发工具的使用
一、Android SDK和eclipse的安装以及android开发环境建立
Android工具链比较完善,需要外部的工具比较少。具体的安装过程可参考官方文档或<<android模拟器在Ubuntu 8.10的安装>>和<<android源码的编译>>。
这 里需要注意的是,用”make”来编译Android源码时,我们可以使用JDK5或JDK6;用”make sdk”来编译时,会用到javadoc来生成文档,javadoc就必须使用JDK5的javadoc,否则编译是通不过的。因此,我们可以把JDK5 和JDK6都装上,然后只把javadoc和javadoc.1.gz指向JDK5相应的工具,其它工具还是用JDK6的。当然,我们可以只安装JDK5 或只用JDK5的工具。具体操作可以参考<<android源码的编译>>
二、使用eclipse来开发Android源码
这里主要参考官方文档
https://sites.google.com/a/Android.com/opensource/using-eclipse
下面,从官方文档总结出具体怎样用eclipse来开发Android源码
1、建立基本的Android开发环境
请参考官方文档或<<Android模拟器在Ubuntu 8.10的安装>>
2、编译Android源码
Android源码根目录下通过make进行编译,请注意一些配置,具体可参考<<android源码的编译>>
3、把eclipse工程配置文件复制到Android源码根目录下
cp development/ide/eclipse/.classpath ./
chmod u+w .classpath # Make the copy writable
4、修改eclipse程序的配置
1)、增大eclipse内存设置
把eclipse.ini(在eclipse软件的安装目录下)的3个值改为下面的值:
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m
2)、把Android-formatting.xml和android.importorder导入eclipse(可选)
Android-formatting.xml、.classpath和android.importorder都放在development/ide/eclipse/下
Android-formatting.xml用来配置eclipse编辑器的代码风格;android.importorder用来配置eclipse的import的顺序和结构。
在window->preferences->java->Code style->Formatter中导入Android-formatting.xml
在window->preferences->java->Code style->Organize Imports中导入Android.importorder
3)、安装anyedit插件(可选)
在http://andrei.gmxhome.de/anyedit/下载并导入eclipse中
5、把Android源码作为一个工程导入eclipse
导入前先检查.classpath里的文件在Android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹),.classpath里多余的路径可删除
新建Java Project(不是Android project,否则会破坏android源码),www.linuxidc.com选择从已存在的工程导入,工程名任意,完成。
导入时,eclipse要build工程,比较慢。导完后,一般都没有错误。
这里也就回答了第4个问题
注:
1.新建java 工程步骤不对也会造成解析错误,我的eclipse在new java project时无 法选择从已存在的工程导入,所以采取下面的步骤,先建立再导入 :
新建:New java project
Project name 随便填
不使用default location,把Location指定成代码所在目录,即
uncheck “use default location“,Location 选择工程的根目录(这个一定要选择,否则 package列表会出现错误) ,点击 Finish, 要花一段时间开始build workspace。。。。。
导入:File-> Import->select,General 选择 Exiting projects into workspace,->Next 选择源码的根目录,Finish。
在 eclipse的 package Explorer就会列出所有关联的源码。
2.如果解析有错误就无法debug,我碰到的最大问题出在这里,eclipse中的problem窗口老实有错误,下面是解决办法
删除.classpath的下面两行
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/google -common_intermediates/javalib.jar"/>
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/gsf-client_intermediates/javalib.jar"/>
添加
<classpathentry kind="lib" path="out/target/common/obj/JAVA_LIBRARIES/android-common_intermediates/javalib.jar"/>
这时还提示 CalendarProvider和ContactProvider中EventLogTags有错误,再进行下面的修改:
1. 展开packages/providers/CalendarProvider/src
2. 展开包: com.android.providers.calendar
3. 右键点击包com.android.providers.calendar
4. 选择 "new file"
5. 在对话框中选择点击 "Advanced >>" 按钮, 可以看到"Link to file in the file system" checkbox,
6. 勾选上 checkbox. 这时 "Browse..." 可用.
7. 点击 "Browse..." 按钮,选择EventLogTags.java (e.g.,out/target/common/obj/APPS/CalendarProvider_intermediates/src/src/com/android/providers/calendar/EventLogTags.java)
8. 点击OK
9. 点击 Finish (in "New File")
同样的方式修改com.android.providers.contacts的问题
这样eclipse解析整个源码就只有warning了 。
6、eclipse上调试Android里的程序。
为了不让其它版本的Android工具和android文件系统影响下面的编译和调试,需要从环境变量中去除android工具和android文件系统的路径:
vim ~/.bashrc
看看有没有在PATH变量中加入Android工具和android文件系统的路径,如果加有,则注释它。通过下面的方法,我们是不需要在.bashrc中添加android工具和android文件系统的路径的
执行:
cd Android源码目录
. build/envsetup.sh #设了环境变量之后,会多出mmm等命令,可以通过输入help来查看
lunch 1 # 把emulator等工具和ramdisk.img等文件的路径对应起来,就可以直接调用emulator等工具,也解决了第3个问题
emulator &
ddms &
注意,先启动ddms,再启动eclipse,这样eclipse中就不会说端口冲突
然后在eclipse中配置调试类型和端口:
在Run->Debug Configurations->Remote java application上双击,然后,”Host:”设为localhost,”Port:”设为8800,”Connection Type”为Standard(Socket Attach)
然后“Apply”
注意,上面设置的端口要与DDMS中设置的端口(查看路径File -->Preference,选左侧的Debugger,右侧Port of Selected Port)一致,ADT插件使用了8700端口,因此上面设置的端口是8800。如果出现连不到VM的错误时,请注意,要先在DDMS中选中某一进程(对应某一应用程序),才能在eclipse执行 Debug(在Java视图的情况下,点击Right-top 位置的Open Perspective,选择debug,就进入debug 窗口)。
附我的调试经验:
即时按照上面的做了,经常出现错误“Failed to connect to remote VM”,原因是上面的port配置问题。
首先你要在ddms里选择一个你要debug的进程。鼠标点一个进程就可以了,你可以看到在ddms显示的进程前有一个绿色小虫图标。
并将此进程的端口记下(ddms的最后一栏可以看到),配置到remote java application中的Port。
如用端口8700调试表示你将调试当前ddms选中的进程,你还没有在ddms中选择任何进程,所以就会弹出ClosedConnectionException。
参见:http://source.android.com/source/using-eclipse.html 中:
Note that port 8700 is attached to whatever process is currently selected in the DDMS console, so you need to sure that DDMS has selected the process you want to debug.
(要注意的是 端口8700是调试当前在DDMS中被选中的任何进程。所以,必须确认在DDMS已经选中你想要调试的进程。)
在eclipse调试时,可以设断点、单步调试,如何调试可以参考
http://blog.csdn.net/lixnhollycrmcom/archive/2011/03/23/6271853.aspx。
估计google团队也是这样开发、调试Android应用程序的
7、编译Android源码
执行:
cd Android源码目录
. build/envsetup.sh
那 么就会多出mm/mmm等命令,mm/mmm用来编译模块(包括C、C++、JAVA程序)。我们也可以直接在 Android 源码根目录下执行“make 模块名”来编译模块(模块名可以在.mk文件中找到)。模块编译后会在out/target/product/generic/system/app下生 成对应的.apk包。但是,用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把 system文件夹打包为system.img,不过这就得重新运行模拟器了,这也是很麻烦了。对于我们开发者来说,我们可以这样做:
1)把需要修改、调试的模块(比如AlarmClock.apk)从/system/app下移除,然后make snod,这样system.img就没有AlarmClock.apk了。
2)运行模拟器,就看不到AlarmClock了
3)修改AlarmClock源码并用mm/mmm来编译,在/system/app下生成AlarmClock.apk
4)通过adb把AlarmClock.apk安装到Android文件系统中,安装方法有两个:
A、通过adb install xxx/AlarmClock.apk
B、通过adb push xxx/AlarmClock.apk /data/app
两 种方法都可以把 AlarmClock安装到/data/app下,Android会自动把它显示在主菜单中(只要AlarmClock.apk中有一Activity包 含android.intent.category.LAUNCHER属性),不过A方法在/data/app生成 com.android.alarmclock.apk,B方法则是 AlarmClock.apk。用A方法时,如果原来已经安装了 AlarmClock,你还得先adb uninstall 它,而B方法则不用。推荐使用B方法。同样,卸载可以通过adb uninstall或adb shell rm xxx/xxx.apk来,也推荐用删除的方法来卸载
8、如何开发自己的工程
前面主要是讲如何在eclipse上开发Android原有的工程。对于自己的工程,我们可以这样做:
1)新建一个Android工程。
建Android工程的好处就是可以充分使用ADT的功能。
2)导入需要的包
3)编译、运行、调试
4)加入到Android源码相应的目录下,应用程序一般放在packages/apps下
我们观察packages/apps原有的工程就会发现,它们的代码是很“干净”的,没有ADT自动生成的assets、bin等文件夹和R.java,当然也没有.classpath和.project
5)编写Makefile文件xxx.mk
用Android源码提供的专用Makefile文件xxx.mk,它的格式比较简单
6)把刚加入的工程添加到eclipse的Android工程中
可以在eclipse中添加,也可以在.classpath中直接加入相应路径。如在.classpath中添加:
<classpathentry kind="src" path="packages/apps/HelloWorld/src"/>
R.java 中编译时自动生成的,其实所有工程用到“资源”的,都会用到R.java,这些R.java是放在out/target/common/R下。我们在源码 根目录下make全部代码时,才会对每个模块生成R.java;在make时,已经编译过并生成有.apk文件的模块是不会被编译的。因此,如果新加入的 工程已经(用mm/mmm)编译过的话,我们先对该工程的“资源”改动一下(必须是改动“资源”,因为R.java是由“资源”生成的),再make,就 在会out/target/common/R对应的包路径下看到你的工程的R.java。刷新在eclipse的out/target/common/R 子工程,再在你用到R类的地方加入它的包,如
import com.Android.example.test.inside.helloworld.R;这样就不会出现找不到R定义的错误。
其实,这个错误对我们是没有任何影响的,因为我们是在shell中编译。
7)在Android源码目录下编译刚加入的工程
可以用mm/mmm或make 模块名
8)用版本控件工具(svn或git或其它)把该工程上传到服务器
从官方文档和实践可以总结出几点:
1、可以使用eclipse来编辑JAVA程序、检查错误(主要是类库包含和语法方面),但是不能在eclipse上编译运行Android 源码,还是得在shell中make(或mm或mmm)
2、Android源码文件夹里提供有一些eclipse配置文件,
.claapath:eclipse工程的配置文件,方便我们直接把Android源码相应的文件和JAVA包导入工程
Android-formatting.xml和android.importorder:这个很重要,主要是用来规范我们的编码风格,更容易使我们的代码风格一致
3、把Android源码作为一个工程导入eclipse时,必须注意两点
1)、新建的工程必须是java project,不能是Android project,否则会破坏android源码(一般是多添加文件/文件夹)
2)、导入前最好检查.classpath里的文件在Android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹)
总的来说:
1、用eclipse来编辑代码、检查错误
2、不在eclipse上编译、运行Android源码程序,只能在命令行通过make(或mm或mmm)编译android源码
3、可以在eclipse上调试Android源码程序(原理:eclipse通过ddms服务器在emulator上进行调试),并可以单步调试、断点调试。
4、需要调试的程序把它从/system/app/移除,安装到data/app下,这样更方便
5、安装、卸载程序通过adb push 和adb shell rm更方便
发表评论
-
多屏幕多分辨率的支持和一些概念
2012-03-01 00:23 1933多屏幕多分辨率的支持和一些概念 快速预览 Android 在 ... -
输入法
2011-12-31 00:14 634... -
android面试
2011-09-24 00:22 672面试 -
Linearlayout与Relativelayout布局回顾 .
2011-08-07 19:07 1399Linearlayout布局的几个 ... -
Android学习笔记之NFC近距离无线通讯技术(Dean)(转载)
2011-07-05 23:49 2187本帖最后由 aibus 于 2011-4-30 16:1 ... -
Android程序的调试--善用Log (转载)
2011-06-30 23:56 1418刚接触Android时,就因为 ... -
android2.3.3系统NFC调试(转载)
2011-06-30 23:38 2943一,在wireless & network中显示NFC ...
相关推荐
### 使用Eclipse开发Android源码详解 随着移动设备的普及和技术的发展,Android系统因其开源性和灵活性成为了移动操作系统领域的佼佼者。对于开发者来说,能够高效地进行Android源码的开发和调试至关重要。本文将...
【长青说安卓】系列专题(七):Eclipse王者归来——如何使用Eclipse调试Android源码 在Android开发领域,Eclipse曾是开发者的主要工具,尤其在早期,其强大的集成开发环境为开发者提供了便捷的代码编辑、构建和调试...
在本文中,我们将深入探讨如何使用Eclipse这一强大的集成开发环境(IDE)来开发Android源码。Android SDK和Eclipse的结合为开发者提供了高效、便捷的开发体验。首先,我们需要确保拥有正确的开发环境。 **一、Android...
本文将详细介绍如何使用Eclipse这一流行的集成开发环境(IDE)来导入和浏览Android的源码。 首先,Android源码是支持多种IDE的,但若要针对应用层进行开发,Eclipse被认为是一个理想的选择。Eclipse提供了丰富的...
【标签】:“源码”和“工具”表明这篇博文可能涵盖了Android应用的源代码管理和Eclipse作为开发工具的使用。 综上所述,学习如何在Eclipse中开发Android应用需要理解Eclipse的基本操作,安装和配置必要的Android...
**知识点详解:使用Eclipse开发Android应用** 在深入解析如何使用Eclipse开发Android应用之前,首先需要理解几个关键概念和步骤。本知识点将基于提供的文件信息,详细阐述使用Eclipse进行Android应用开发的过程,...
此外,随着技术的发展,目前大多数开发者可能会选择使用Android Studio来替代Eclipse进行开发。因此,在实际应用中,也可以考虑使用Android Studio来查看源代码。但无论如何,掌握在Eclipse中查看源代码的方法仍然...
Activity是Android应用程序框架四大组件之一。 对应MVC模型 中的C----》用来处理用户的交互性操作,对应java源代码。 Activity要对应一个布局xml文件。一个App可由多个Activity组成,其中只能设置一个Activity为启动...
本文将详细介绍如何使用Eclipse进行Android开发,包括环境安装配置、项目创建以及Java环境变量的配置。 首先,为了开发Android应用,你需要下载Android SDK。你可以在搜索引擎中输入"Android SDK",然后从官方或...
Eclipse 是一个广泛使用的集成开发环境(IDE),在早期 Android 开发中被广泛采用。使用 Eclipse 开发 Android 应用程序主要涉及以下步骤: 1. **安装 Eclipse**:首先,你需要下载并安装 Eclipse IDE,通常选择 ...
本次考试要求支持不同用户登录,且每个用户有自己独立的内容,各个用户之间数据独立。 2、日记搜索部分,原程序只支持时间段搜索。增加新的根据内容和标题搜索日记的功能。 3、在写日记和日记搜索部分,都有时间...
Eclipse作为一个经典的集成开发环境(IDE),曾经是Android开发者的主要工具,它提供了查看和调试Android源码的功能。本教程将详细介绍如何在Eclipse中配置和查看Android源码工程。 首先,我们需要获取Android源码...
这份“Eclipse插件开发笔记源码”提供了丰富的学习材料,帮助开发者深入理解并实践Eclipse插件开发。下面将详细阐述Eclipse插件开发的相关知识点。 1. **Eclipse插件体系结构**: Eclipse采用插件化架构,每个功能...
7. **调试技巧**:学习如何在Eclipse环境中调试Android源码,可以帮助开发者快速定位和解决问题,提高开发效率。 8. **版本兼容性**:Android Browser是早期版本的默认浏览器,源码可以帮助开发者了解不同Android...
Eclipse开发Android应用程序入门 Android是一个基于Linux内核的开源平台,提供了功能强大的硬件支持和多样的软件平台,移动设备开发者前景充满了机会和挑战。要开发Android应用程序,需要选择合适的开发环境和工具...
在Eclipse中,当你需要查看某个Android类的源码时,只需按住Ctrl键并点击该类名,Eclipse就会跳转到对应的源码位置。例如,如果你想了解`Activity`类的工作机制,只需在代码中找到`Activity`的引用并执行上述操作,...
在本教程中,我们将使用 Eclipse 作为开发环境,使用 Android Developer Tools 插件来开发 Android 应用程序。我们还将使用 AndroidManifest.xml 文件来描述应用程序的部署信息,使用 IntentReceiver 来处理 ...
总结起来,使用Eclipse开发Android程序的关键在于正确配置Eclipse、导入和管理源码、调整IDE设置以及有效地利用Eclipse的编辑和调试功能。通过遵循上述步骤,你可以充分利用Eclipse的强大功能,同时保持与Android...
搭建Java+Eclipse+Android开发环境是一项基础且至关重要的工作,对于初学者来说,可能会遇到许多问题。以下将详细解释这个过程中的关键步骤。 首先,我们需要安装JDK(Java Development Kit)。JDK是Java编程的基础...