在Eclipse中开发Android系统的内置应用(Mms, Contacts ect)
2013-09-16 13:42
369 查看
在Eclipse+ADT中开发Android系统的内置应用
Android系统内置有:Browser(浏览器)、Mms(彩信/短信)、Phone(电话)、Contacts(联系人)等众多的核心应用。
然而,在SDK开发环境(即Eclipse+ADT)下,这些应用却无法被正确编译,究其原因至少有以下几种情况:
1、它们使用到了未包括在SDK中(公开发布)的API,有两种情况:
A、被@hide标注了的类:这些类是被隐藏起来的,这些类大多都在com.android.internal包下面;
B、一些未包括在SDK中的、Google私有的Api,它们大多都在com.google.android包下面;例如:
2、它们使用了一些由framework层声明的aidl接口访问系统服务,然而这些aidl在编译时才会转换成.java源码,因此在SDK环境下编译这些应用时无法访问到它们。
解决方法是:
(请注意:out目录是在完整源码编译环境下(Linux下),执行一次完整编译后的输出目录)
1、找到那些被隐藏起来的类、它们在以下两个位置:
A、out\target\common\obj\JAVA_LIBRARIES\framework_intermediates/classes.jar;
B、out\target\common\obj\JAVA_LIBRARIES\android-common_intermediates\classes.jar;
将找到的.jar文件,在Eclipse中作为UserLibrary添加到Project的Librarys依赖中,并将该库的顺序置于AndroidSDKLibrary之上。
在out\target\common\obj\JAVA_LIBRARIES\目录下,还有很多其它具体应用相关的jar包,....;
2、找到那些缺失的、编译时才生成的,.java源文件,它们通常在以下位置:
A、out\target\common\obj\JAVA_LIBRARIES\XXX_intermediates\src目录下,XXX是相关模块的名称;
B、out\target\common\obj\APPS\XXX_intermediates\src目录下;
将找到的src目录,在Eclipse下,以LinkSource的方式,连接到Project中作为源码的一部分。
通过以上方法,我成功编译了Browser和Mms两个应用,其它应用还未验证,若你在开发中有相关经验或者发现,欢迎和我交流。
本人实践心得:
看了下面的教程之后,我感觉eclipse报不报错问题不大,除非你自己要使用未导入包里的类。因为eclipse只能编辑,编辑完之后,到外面编译,并运行编译出来的模拟器测试。。
上面的教程所用到的android源码版本可能比较老,因为我在2.1,2.2,2.3版本都未发现android-common_intermediates\classes.jar这个东西,不过没关系,可能是集成到framework_intermediates/classes.jar里面了。2.1,
2.2,2.3版本其实只要以自定义库的方式导入framework_intermediates/classes.jar,out\target\common\obj\JAVA_LIBRARIES\XXX_intermediates下的jar包和out\target\common\obj\APPS\XXX_intermediates下的jar包eclipse就不会报错,但运行就不知道了,现在还没有测试。
上面教程提到的out\target\common\obj\APPS\XXX_intermediates\src目录在2.1,
2.2,2.3版本里只有R文件,没有什么其他的code,导入会报错。。
多引入了jar包会出错:ConversiontoDalvikformatfailedwitherror1
后续编译:
往往我们会已经编译过了源码,但是会再次修改里面的某个文件,某个项目,这时候我们就可以单独编译了...
例如,我们在改了Contacts联系人项目后,可以简单的执行一下命令来单独编译这个部分:
$mmmpackages/apps/Contacts/
为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
$makesnod
当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了
=====================================================================================
4.测试运行
1)先设置环境变量:
打开~/.bashrc文件,并在最后添加下面两行:
PATH=”$PATH:$HOME/android/out/host/linux-x86/bin”
ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
exportANDROID_PRODUCT_OUT
(就是配置你生成的out目录)
2)运行模拟器:
cd$HOME/android/out/target/product/generic
emulator-imagesystem.img-datauserdata.img-ramdiskramdisk.img
如果最后能进入到系统并看到一个大时钟,说明就大功告成了!!!!
Android系统内置有:Browser(浏览器)、Mms(彩信/短信)、Phone(电话)、Contacts(联系人)等众多的核心应用。
然而,在SDK开发环境(即Eclipse+ADT)下,这些应用却无法被正确编译,究其原因至少有以下几种情况:
1、它们使用到了未包括在SDK中(公开发布)的API,有两种情况:
A、被@hide标注了的类:这些类是被隐藏起来的,这些类大多都在com.android.internal包下面;
B、一些未包括在SDK中的、Google私有的Api,它们大多都在com.google.android包下面;例如:
2、它们使用了一些由framework层声明的aidl接口访问系统服务,然而这些aidl在编译时才会转换成.java源码,因此在SDK环境下编译这些应用时无法访问到它们。
解决方法是:
(请注意:out目录是在完整源码编译环境下(Linux下),执行一次完整编译后的输出目录)
1、找到那些被隐藏起来的类、它们在以下两个位置:
A、out\target\common\obj\JAVA_LIBRARIES\framework_intermediates/classes.jar;
B、out\target\common\obj\JAVA_LIBRARIES\android-common_intermediates\classes.jar;
将找到的.jar文件,在Eclipse中作为UserLibrary添加到Project的Librarys依赖中,并将该库的顺序置于AndroidSDKLibrary之上。
在out\target\common\obj\JAVA_LIBRARIES\目录下,还有很多其它具体应用相关的jar包,....;
2、找到那些缺失的、编译时才生成的,.java源文件,它们通常在以下位置:
A、out\target\common\obj\JAVA_LIBRARIES\XXX_intermediates\src目录下,XXX是相关模块的名称;
B、out\target\common\obj\APPS\XXX_intermediates\src目录下;
将找到的src目录,在Eclipse下,以LinkSource的方式,连接到Project中作为源码的一部分。
通过以上方法,我成功编译了Browser和Mms两个应用,其它应用还未验证,若你在开发中有相关经验或者发现,欢迎和我交流。
本人实践心得:
看了下面的教程之后,我感觉eclipse报不报错问题不大,除非你自己要使用未导入包里的类。因为eclipse只能编辑,编辑完之后,到外面编译,并运行编译出来的模拟器测试。。
上面的教程所用到的android源码版本可能比较老,因为我在2.1,2.2,2.3版本都未发现android-common_intermediates\classes.jar这个东西,不过没关系,可能是集成到framework_intermediates/classes.jar里面了。2.1,
2.2,2.3版本其实只要以自定义库的方式导入framework_intermediates/classes.jar,out\target\common\obj\JAVA_LIBRARIES\XXX_intermediates下的jar包和out\target\common\obj\APPS\XXX_intermediates下的jar包eclipse就不会报错,但运行就不知道了,现在还没有测试。
上面教程提到的out\target\common\obj\APPS\XXX_intermediates\src目录在2.1,
2.2,2.3版本里只有R文件,没有什么其他的code,导入会报错。。
多引入了jar包会出错:ConversiontoDalvikformatfailedwitherror1
后续编译:
往往我们会已经编译过了源码,但是会再次修改里面的某个文件,某个项目,这时候我们就可以单独编译了...
先在android目录下执行 |
$ |
然后你就会多出几个可用的命令。 |
$mmmpackages/apps/Contacts/
为了可以直接测试改动,需要生成新的system.img,在android目录下执行:
$makesnod
当然,如果你改动的是emulator或者其它外围相关的,而非系统内部的东西,就不只是要重新生成system.img了
=====================================================================================
4.测试运行
1)先设置环境变量:
打开~/.bashrc文件,并在最后添加下面两行:
PATH=”$PATH:$HOME/android/out/host/linux-x86/bin”
ANDROID_PRODUCT_OUT=$HOME/android/out/target/product/generic
exportANDROID_PRODUCT_OUT
(就是配置你生成的out目录)
2)运行模拟器:
cd$HOME/android/out/target/product/generic
emulator-imagesystem.img-datauserdata.img-ramdiskramdisk.img
如果最后能进入到系统并看到一个大时钟,说明就大功告成了!!!!
相关文章推荐
- 在Eclipse中开发Android系统的内置应用(Mms, Contacts ect)
- 在Eclipse中开发Android系统的内置应用(Mms, Contacts ect)
- Eclipse中开发Android系统的内置应用
- 在Eclipse+ADT中开发Android系统的内置应用
- 在Eclipse+ADT中开发Android系统的内置应用
- Android系统应用导入Eclipse中开发
- 开发Android系统内置应用小记
- Android应用开发-学生信息管理系统
- 浅谈android系统架构及其应用开发特色
- Android应用开发之调用系统Activity涉及的授权问题
- 1.1搭建基于Eclipse的Android应用开发环境
- 用eclipse 开发 android应用时出现个错误,“your project contains error(s),please fix them before running your application”.
- Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
- 基于Eclipse+Cordova的Android Hybrid应用开发环境搭建
- android开发,Eclipse安装应用时,提示Installation failed due to invalid URI
- 使用JBoss Eclipse IDE 开发J2EE应用系统
- Android:基于Eclipse编译调试系统级应用源代码
- Android应用开发——系统自带样式Android:theme
- eclipse 开发android 项目的时候系统自动生成的R.Java文件在重新生成时候丢失问题
- Ubuntu14.04下Android系统与应用开发软件完整apt-get 源。