Android源码开发环境搭建教程实例讲解



Android源码开发环境搭建教程讲解。

1、需要安装Android的环境
编译Android的LINUX交叉编译工具
编译LINUX驱动的交叉编译工具(4.3.1)
编译JNI的工具包:NDK(在LINUX下)
编译JAVA程序:esclips+ADT+SDK

2、编译Android源码

$ source 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.
- printconfig: 当前build的配置情况.
可用 –help命令查看用法。
在修改了某一个模块以后,可以使用 $ mmm <目录>  来重新编译所有在<目录>中的所有模块(包括C、C++、JAVA程序),使用 $ mm  编译当前目录中的所有模块。
模块编译后会在out/target/product/generic/system/app下生 成对应的.apk包。

3、单独编译android的app模块

用mm/mmm来编译生成的.apk并不会打包到system.img中,需要我们手动通过make snod把 system文件夹打包为system.img.
如编译联系人,使用mmm来编译指定目录的模块


mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
编译出来的APK,此时APK并不包含在system文件夹中,然后可以使用make snod 打包system文件夹,产生新的system.img。

4、把Android源码作为一个工程导入eclipse

1)、导入前先检查.classpath里的文件在Android源码中是否有相应的文件(文件夹),否则也会破坏android源码(一般是多添加文件/文件夹),.classpath里多余的路径可删除
2)、新建的工程必须是Java Project(不能是Android project,否则会破坏android源码),选择从已存在的工程导入,工程名任意,完成。
3)、导入时,eclipse要build工程,比较慢。导完后,一般都没有错误。建议关掉build automatically。

5、eclipse上调试Android里的程序

为了不让其它版本的Android工具和android文件系统影响下面的编译和调试,需要从环境变量中去除android工具和android文件系统的路径,看看有没有在PATH变量中加入Android工具和android文件系统的路径

先启动ddms,再启动eclipse,这样eclipse中就不会说端口冲突
然后在eclipse中配置调试类型和端口:
在Run->Debug Configurations->Remote java application上双击,然后,”Host:”设为localhost,”Port:”设为8800,”Connection Type”为Standard(Socket Attach),然后“Apply”
注意,上面设置的端口要与DDMS中设置的端口一致,ADT插件使用了8700端口,因此上面设置的端口是8800。如果出现连不到VM的错误时,请注意,要先在DDMS中选中某一进程(对应某一应用程序),才能在eclipse执行 Debug。
在eclipse调试时,可以设断点、单步调试