`
dss16694
  • 浏览: 144166 次
社区版块
存档分类
最新评论

如何使用Eclipse开发Android源码

 
阅读更多

转自:

使用Eclipse开发Android源码

 

说明:这篇文章是介绍如何开发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模拟器在Ubuntu8.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更方便

 

没搞清楚的问题:emulator、ddms、eclipse是如何关联起来的,以后再搞了:)

分享到:
评论

相关推荐

    怎样使用Eclipse来开发Android源码

    为 android开发工具,可以说是很方便的,在HelloActivity小程序里我们就感觉到eclipse功能的强大。那么,我们可以用 eclipse来开发android源码吗?答案是肯定的,看了这个文档你也可以做到了

    Eclipse来开发Android源码

    通过Eclipse来开发Android源码的方法总结

    Eclipse开发Android源码

    Android源码支持多种IDE,如果是针对APP层做开发的话,建议大家使用Eclipse开发环境。在源码路径(~/development/ide/eclipse)下,Android提供了.classpath配置文件

    eclipse开发Android设计源码

    Activity是Android应用程序框架四大组件之一。 对应MVC模型 中的C----》用来处理用户的交互性操作,对应java源代码。 Activity要对应一个布局xml文件。一个App可由多个Activity组成,其中只能设置一个Activity为启动...

    Eclipse开发-Android日记本设计源码

    本次考试要求支持不同用户登录,且每个用户有自己独立的内容,各个用户之间数据独立。 2、日记搜索部分,原程序只支持时间段搜索。增加新的根据内容和标题搜索日记的功能。 3、在写日记和日记搜索部分,都有时间...

    Eclipse android开发关联源码图文说明

    android 开发我们经常要查看源码,Eclipse android开发关联源码图文说明

    android 源码 android Widget开发案例 eclipse项目 直接导入

    android 源码 android Widget开发案例 eclipse项目 直接导入 ,掌握widget开发,让你的手机‘炫’起来

    如何使用Eclipse来开发Android

    NULL 博文链接:https://songfantasy.iteye.com/blog/1055894

    android eclipse 查看网页源码最减版

    android eclipse 查看网页源码最减版。之前这个程序的例子太多代码(http://download.csdn.net/detail/day_moon/9713901),做了一些修改。上传这个例子为了更好学习。

    android 源码 (可与eclipse关联)

    Android 源码下载,该源码可直接与eclipse 关联,方便开发时查看

    eclipse开发android文件加密小软件简单例子

    eclipse开发的android平台的用于文件加密的小软件。分为对称加密、报文鉴别、数字签名等功能。仅作为android开发的小例子供参考,做得比较简陋。

    贪吃蛇源码eclipse开发

    贪吃蛇的源码,可以运行,eclipse开发,java编写,具有很好的参考价值 贪吃蛇的源码,可以运行,eclipse开发,java编写,具有很好的参考价值

    《Android应用开发详解》源码

    《Android应用开发详解》源码,完整版,值得看一看。 《Android核心技术和开发...然后会向读者讲解如何搭建.Android的开发环境、如何在Eclipse中创建一个项目,以及如何使用Android平台提供的工具调试和监控应用程序。

    安卓eclipse通讯录程序源码

    基于集成版eclipse开发,Android4.4,带有登录注册,增删查改,发送消息,拨号,通讯录查询跳转等功能。有使用数据库。

    Android Studio实现个人记账系统源码.zip

    Android Studio实现个人记账系统源码。基于安卓基础知识点开发的个人记账工具,其中包括记录当天收支情况,计算当天以及当月共收支总钱数,能查看历史账单,能对于每月收支情况进行图标分析,百分比分析, 能够搜索...

    在Eclipse里关联android源代码的三种方式

    第一种方式:source attach 第二种方式:复制platform/frameworks/base/core/java到在AndroidSDK的安装目录下的platforms/android-12下新建sources目录 第三种方式:最全面但最复杂的一种,见文件里的方式

    Android dialog 源码 eclipse 直接导入运行

    东方尚智 3G数字内容学院 android 开发课程系列 基于android的对话框的学习。如果您在从事移动平台的开发,资源决绝适合你。eclipse 直接导入运行

    Android源码导入Eclipse步骤详解

    我们就可以批量的把android源码导入到eclipse里面。今天我来交给大家 首先我们先打开我们的 eclipse开发工具。过程中会出现一个让你选择开发空间的一个选项 我们直接OK 就可以了。 进入到我们的 主页面了。我们...

    Eclipse 开发 Android, Hello, DatePicker (学习7)

    NULL 博文链接:https://llhdf.iteye.com/blog/521272

    eclipse android 代码生成插件源码

    写android 程序时,经常会使用findViewById方法、实现Parcelable接口,这些代码重复而又繁琐,所以抽空写了一个eclipse插件来生成这些代码。

Global site tag (gtag.js) - Google Analytics