首先,我编译了Android2.1的源码,编译之后产生out/target/product/generic/。这个目录下面放着在目标系统上运行Android2.1所需要的最基本的运行环境:包括ramdisk.img,system.img,userdata.img(当然,还需要prebuilt/android-arm/kerne下面的kernel-qemu)。在设置环境变量之后,通过启动emulator,就可以看到最基本的Android2.1的系统了。 但是,最基本的Android系统中不包括Google提供的特色服务(包括电子市场,地图,语音搜索,资讯和天气,Gmail,GoogleTalk,YouTube),所以就考虑要在目标系统上安装相应的特色服务。 我就通过adb?install,试图安装相应的服务程序(.apk文件),但是发现安装失败。打印信息后,发现原来缺少相应的库和权限声明。Android2.1源码并不包含这些库文件和权限声明。后来,在网站上找到了Google定制手机的相应固件Googlebits (包含 app etc framework lib几个文件夹) 这其中就包含了Google服务程序的.apk文件,.jar库,.so库,.xml权限声明。 ????我就通过adb?remount获取system的读写权限,然后adb?push把这些文件直接push到emulator的/system中去,重启avd。这时,我发现刚刚push到/system中的文件都没了。貌似有个启动文件在系统启动时,对/system目录进行了还原。总之,我并不能获取system的root权限,没法进行有效的读写。 ????然后,我就想把这些服务的.apk,.jar,.so,.xml直接编译到system.img中去,目标系统就可以直接加载这些安装文件和库文件。要编译到system.img中去,就需要对源码进行相应的修改,即将Google的特色服务移植到Android2.1系统中去。 2.1?generic_with_google 在编译的过程中,默认选择编译/build/target/product下的generic,所以会生成out/target/product/generic目录。另外,在/build/target/product目录下还有一个generic_with_google.mk: #?This?is?a?generic?product?that?isn't?specialized?for?a?specific?device. #?It?includes?the?base?Android?platform?including?some?Google-specific?features. #?If?you?do?not?want?to?include?Google?specific?features,?you?should?derive? #?from?generic.mk 通过这个mk文件应该可以将google特色服务所需要的安装文件和库文件编译到system.img中。所以,我尝试着修改了generic_with_google.mk。但是,修过过后在编译的过程中遇到了很多的问题,例如:系统缺省的generic.mk还是会编译,并且会与generic_with_google冲突,产生多个目标匹配的问题。貌似这种方法还有待研究。接着我尝试着另一种方法。 这个我使用了实验室师兄和猛猛的在m8上移植Android所定制的vendor/m8的编译规则。主要包括四个mk文件:AndroidBoard.mk,AndroidProducts.mk,BoardConfig.mk,fkh.mk。主要的改动: 将GoogleBits的安装文件,库和权限声明文件放在vendor/emulator/google目录下; 在AndroidBoard.mk中添加这些文件的操作:(以Google?Talk为例) (1)?权限声明 $(LOCAL_PATH)/google/etc/permissions/com.google.android.gtalkservice.xml:system/etc/permissions/com.google.android.gtalkservice.xml?\ ? (2)?安装文件 (3)?.jar库文件 $(LOCAL_PATH)/google/app/gtalkservice.apk:system/app/gtalkservice.apk?\ (4)?.so库文件 $(LOCAL_PATH)/google/framework/com.google.android.maps.jar:system/framework/com.google.android.maps.jar?\ 这样在最后产生的目录下产生system文件夹并打包到system.img中去; 为了查看效果,我把编译产生的system.img复制到windows下的android-sdk/platform中去(google的这些特色服务都需要网络的支持,而服务器上的模拟器无法上网),启动模拟器,使用adb?shell,发现这些库和安装文件已经加载到system目录下了,移植成功。 另一种方法是比较笨的方法,但很实用。自己尝试着制作system.img。考虑到system.img是yaffs2文件系统,所以可以自己制作。主要使用了sdk中android-7/platform/image/system.img,一个解压工具(unyaffs)和一个打包工具(out/host/linux-x86/bin/mkyaffs2image)。解压system.img后将googlebits下相应的库,权限声明和安装文件放到对应的目录下,然后打包成system.img。然后将制作后的system.img复制到sdk中,启动模拟器,可以使用(这种方法不仅添加了相应的库和安装文件,还避免了模拟器不能上网的问题)。 ? ? 总之,上面三种方法中,自己制作system.img最为简单快捷。 ? ? ?1.?为什么需要移植?
2.?移植的过程
2.2vendor下的代码定制
2.3自己制作system.img
3.?Google?Bits?中安装文件,权限声明和库文件
详细解决方案
Android 中Goolgle 相干服务的移植[转]
热度:104 发布时间:2016-05-01 16:43:48.0
相关解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java)中的java.net能不能和c#的system.net.sockets进行tcp通信,该如何解决
- android ListView 中的onItemClick Intent 没法跳转
- android(java) 中文乱码的有关问题
- c#c++,android,ios(iphone),php,java视屏课程 散分
- android Post文件到ASP.NET的有关问题,能收到参数收不到文件
- RIM 替 Android 开发者提供免费的 PlayBook!2月13日前
- android 动态设立控件高度
- Android test project 编译方法
- android -相机使用教程(1)解决方法