android提供的工具链和开发工具都比较完善,因此其开发环境搭建起来也比较简单。 相信很多同学已经搭建好了环境,编写了HelloActivity入门程序。 这里有几个问题:
1、android的文件系统结构是怎样的,我们安装的程序在哪里?
编译完android源代码后,out/target/product/generic中的一些文件:
ramdisk.img、system.img、userdata.img、系统、数据、根
其中system.img是系统打包压缩得到的,userdata.img是数据打包压缩得到的。
ramdisk.img 是模拟器的文件系统。 解压ramdisk.img后,ramdisk.img中的文件与根文件夹中的文件基本相同。
模拟器加载ramdisk.img并解压到显存,然后分别挂载system.img和userdata.img到ramdisk下的system和data目录。 编译好的应用程序放在system/app下。 用户安装的程序放在data/app下。
2、androidSDK和android源码可以为我们提供哪些工具?
androidSDK提供了很多工具,如adb、ddms、emulator、aapt等,并提供了kernel-qemu、ramdisk.img、system.img、userdata.img。 为此,只要有androidSDK,我们就可以在模拟器上运行android。
android源码可以编译androidSDK、adb、android文件系统、ADT插件等工具,也就是说我们可以从android源码中编译出所有android相关的东西。
3.“make”android源代码后,会生成很多工具和android文件系统(system.img等),我们可以使用“makesdk”生成androidSDKandroid源码编译步骤,androidSDK还包括工具和android文件系统(system .img等),而且我们在原始安装的时候也安装了androidSDK,那么开发时我们应该使用这些工具和android文件系统吗?
这个问题之前已经回答过了。
4、官方推荐我们使用eclipse+adt来步入应用程序的开发,我们的HelloActivity程序也是在这里开发的。 当我们将android源码/packages/apps/下的项目导出到eclipse时,通常会出现找不到包的错误。 那么我们如何修改、编译、调试android源代码呢? Google 使用什么工具来开发 Android?
这个问题之前已经回答过了。
下面系统地介绍了android开发环境的搭建以及开发工具的使用。
1、androidSDK和eclipse的安装以及android开发环境的搭建
android工具链比较健全,需要的外部工具较少。 具体安装过程请参考官方文档或和。
这里需要注意的是,使用“make”编译android源码时android源码编译步骤,我们可以使用JDK5或者JDK6; 过不了啊因此,我们可以同时安装JDK5和JDK6,然后只将javadoc和javadoc.1.gz指向JDK5对应的工具,其他工具仍然使用JDK6。 其实我们可以只安装JDK5或者只使用JDK5工具。具体操作请参考
2.使用eclipse开发android源码
这里主要参考官方文档
下面,从官方文档总结一下如何使用eclipse开发android源码
1.建立基础的android开发环境
请参考官方文档或
2.编译android源码
在android源码根目录下通过make编译。 请注意一些配置。 详情请参阅
3、将eclipse项目配置文件复制到android源码根目录下
cpdevelopment/ide/eclipse/.classpath./
chmodu+w.classpath#使副本可写
4、修改eclipse程序的配置
1)、增加eclipse内存设置
将eclipse.ini(在eclipse软件的安装目录下)的3个值修改为以下值:
-Xms128米
-Xmx512米
-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导入的顺序和结构。
在 window->preferences->java->Codestyle->Formatter 中导出 android-formatting.xml
在 window->preferences->java->Codestyle->OrganizeImports 中导出 android.importorder
3)、安装anyedit插件(可选)
在下载并导出eclipse中
5.将android源代码作为项目导出到eclipse中
导出前检查.classpath中的文件在android源码中是否有对应的文件(文件夹),否则会破坏android源码(通常会添加更多的文件/文件夹),.classpath中多余的路径可以删除
新建一个JavaProject(不是android项目,否则会破坏android源代码),选择从现有项目导出,项目名随意,就完成了。
导出时,eclipse需要构建项目,速度比较慢。 导入后一般不会出现错误。
这是第四个问题的答案
6.在eclipse上调试android中的程序。
为了不让其他版本的android工具和android文件系统影响下面的编译和调试,需要从环境变量中删除android工具和android文件系统的路径:
vim ~/.bashrc
看看你是否把android工具和android文件系统的路径添加到PATH变量中,如果有,注释掉。通过下面的方法,我们不需要添加android工具和android文件系统的路径在.bashrc中
实施:
cdandroid源码目录
.build/envsetup.sh#设置环境变量后,会多出mmm等命令,可以输入help查看
Lunch1#将模拟器等工具的路径与ramdisk.img等文件对应起来,然后就可以直接调用模拟器等工具了,这样也解决了第三个问题
模拟器&
数据管理系统&
注意,先启动ddms,再启动eclipse,这样eclipse中就不会说端口冲突了
然后在eclipse中配置调试类型和端口:
双击Run->DebugConfigurations->Remotejavaapplication,之后“Host:”设置为localhost,“Port:”设置为8800,“ConnectionType”为Standard(SocketAttach)
“申请”后
注意其中设置的端口要与DDMS中设置的端口一致。 ADT插件使用的是8700端口,所以里面设置的端口是8800。如果出现无法连接VM的错误,请注意首先要在DDMS中选择一个进程(对应某个应用程序),然后可以在eclipse中执行Debug。
在eclipse中调试的时候,可以设置断点,单步调试。恐怕google团队也是这样开发调试android应用的
7.编译android源码
实施:
cdandroid源码目录
.build/envsetup.sh
然后就会多出mm/mmm等命令,mm/mmm用于编译模块(包括C、C++、JAVA程序)。 我们也可以直接在android源码根目录下执行“make module name”来编译模块(模块名称可以在.mk文件中找到)。 模块编译完成后,会在out/target/product/generic/system/app下生成对应的.apk包。 而且mm/mmm编译生成的.apk不会被打包到system.img中。 我们需要通过makenod自动将system文件夹打包成system.img,但这需要重新运行模拟器,也很麻烦。 对于我们开发者来说,我们可以这样做:
1)从/system/app中删除需要更改和调试的模块(如AlarmClock.apk),然后makenod,这样system.img就不会有AlarmClock.apk。
2)运行模拟器,看不到AlarmClock
3)更改AlarmClock源码并用mm/mmm编译,在/system/app下生成AlarmClock.apk
4)通过adb将AlarmClock.apk安装到android文件系统中。 有两种安装方法:
A.通过adbinstallxxx/AlarmClock.apk
B.通过adbpushxxx/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,则必须先adbuninstall,但方法B则不需要。 推荐方法B。同样可以通过adbuninstall或者adbshellrmxxx/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中添加:
R.java是在编译时手动生成的。 虽然所有项目都使用“资源”,但都会使用R.java。 这个R.java放在out/target/common/R下。 当我们在源码根目录下制作所有代码时,会为每个模块生成R.java; 在make期间,已经用.apk文件编译生成的模块将不会被编译。 因此,如果新添加的项目已经编译完成(使用mm/mmm),我们首先更改项目的“资源”(“资源”必须更改,因为R.java是由“资源”生成的),然后make后,你会在out/target/common/R对应的包路径下看到你项目的R.java。在eclipse中刷新out/target/common/R子项目,然后在你使用R类的地方添加它的包, 例如
导入com.android.example.test.inside.helloworld.R; 这样就不会出现找不到R的定义的错误。
虽然,这个错误对我们没有影响,因为我们是在shell中编译的。
7)在android源码目录下编译新添加的项目
您可以使用 mm/mmm 或指定模块名称
8)使用版本控制工具(svn或git或其他)将项目上传到服务器