当前位置: 代码迷 >> Android >> Android 中Goolgle 相干服务的移植[转]
  详细解决方案

Android 中Goolgle 相干服务的移植[转]

热度:104   发布时间:2016-05-01 16:43:48.0
Android 中Goolgle 相关服务的移植[转]

1.?为什么需要移植?

首先,我编译了Android2.1的源码,编译之后产生out/target/product/generic/。这个目录下面放着在目标系统上运行Android2.1所需要的最基本的运行环境:包括ramdisk.imgsystem.imguserdata.img(当然,还需要prebuilt/android-arm/kerne下面的kernel-qemu)。在设置环境变量之后,通过启动emulator,就可以看到最基本的Android2.1的系统了。

但是,最基本的Android系统中不包括Google提供的特色服务(包括电子市场,地图,语音搜索,资讯和天气,GmailGoogleTalkYouTube),所以就考虑要在目标系统上安装相应的特色服务。

我就通过adb?install,试图安装相应的服务程序(.apk文件),但是发现安装失败。打印信息后,发现原来缺少相应的库和权限声明。Android2.1源码并不包含这些库文件和权限声明。后来,在网站上找到了Google定制手机的相应固件Googlebits

(包含 app etc framework lib几个文件夹)

这其中就包含了Google服务程序的.apk文件,.jar库,.so库,.xml权限声明。

????我就通过adb?remount获取system的读写权限,然后adb?push把这些文件直接pushemulator/system中去,重启avd。这时,我发现刚刚push/system中的文件都没了。貌似有个启动文件在系统启动时,对/system目录进行了还原。总之,我并不能获取systemroot权限,没法进行有效的读写。

????然后,我就想把这些服务的.apk.jar.so.xml直接编译到system.img中去,目标系统就可以直接加载这些安装文件和库文件。要编译到system.img中去,就需要对源码进行相应的修改,即将Google的特色服务移植到Android2.1系统中去。

2.?移植的过程

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冲突,产生多个目标匹配的问题。貌似这种方法还有待研究。接着我尝试着另一种方法。

2.2vendor下的代码定制

这个我使用了实验室师兄和猛猛的在m8上移植Android所定制的vendor/m8的编译规则。主要包括四个mk文件:AndroidBoard.mkAndroidProducts.mkBoardConfig.mkfkh.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目录下了,移植成功。

2.3自己制作system.img

另一种方法是比较笨的方法,但很实用。自己尝试着制作system.img。考虑到system.imgyaffs2文件系统,所以可以自己制作。主要使用了sdkandroid-7/platform/image/system.img,一个解压工具(unyaffs)和一个打包工具(out/host/linux-x86/bin/mkyaffs2image)。解压system.img后将googlebits下相应的库,权限声明和安装文件放到对应的目录下,然后打包成system.img。然后将制作后的system.img复制到sdk中,启动模拟器,可以使用(这种方法不仅添加了相应的库和安装文件,还避免了模拟器不能上网的问题)。

?

?

总之,上面三种方法中,自己制作system.img最为简单快捷

?

3.?Google?Bits?中安装文件,权限声明和库文件

?

view plaincopy to clipboardprint?
  1. ||--app??
  2. ??|-EnhancedGoogleSearchProvider:?Google搜索引擎增强服务,安装后将在设置(settings)的搜索设置(search)中获得更多关于搜索引擎的服务??
  3. ??|-GenieWidget:?根据地区下载不同语言的新闻和天气??
  4. ??????|-Gmail:Gmail电子邮箱服务??
  5. ??????|-GmailProvider:电子邮箱的数据存储服务??
  6. |-GoogleApps:Google企业应用套件,类似office,支持WEB、POP3、SMTP、IMAP4、WAP收发邮件,还提供即时通信、日历、在线文档、网站等全面服务??
  7. |-GoogleBackupTransport:可能是数据备份后,可以在线传输到网上,然后实现数据的保存(与Android的backup服务相关)??
  8. |-GoogleCheckin:google签入服务??
  9. |-GoogleContactsSyncAdapter:Google联系人/通讯录同步服务(联系人的导入和导出)??
  10. |-GooglePartnerSetup:Google协作程序安装向导(估计与账户的设置相关)??
  11. |-GoogleSearch:Google的搜索服务,可以删除的,不影响其他的搜索功能??
  12. |-GoogleSettingsProvider:程序设置数据存储服务??
  13. |-GoogleSubscribedFeedsProvider:Google资料同步服务??
  14. |-gtalkservice:gtalk服务??
  15. |-Maps:Google地图??
  16. |-MarketUpdater:软件管理服务(负责更新电子市场的程序)??
  17. |-MediaUploader:Google的媒体数据上传服务??
  18. |-NetworkLocation:Google的网络定位服务??
  19. |-SetupWizard:手机设置向导(第一次安装后出现的画面)??
  20. |-Street:Google的街景视图服务??
  21. |-Talk:Google?Talk?服务(不建议卸载)??
  22. |-TalkProvider:Talk服务的支撑程序,估计与数据存储相关??
  23. |-TtsService:TTS(Text?To?Speech)文本到语音的服务??
  24. |-Vending:Android?Market(电子市场)??
  25. |-VoiceSearchWithKeyboard:语音输进功能(通过语音键盘输入,如果语速不快,基本可以准确判断)??
  26. |-YouTube:手机“优酷”(世界最大的视频分享网站YouTube)??
  27. ||--etc??
  28. ???|-permissons??
  29. ?????|-com.google.android.datamessaging.xml:(貌似不需要)??
  30. ?????|-com.google.android.gtalkservice.xml:对于framewokr/gtalk.jar的权限声明??
  31. ?????|-com.google.android.maps.xml:对于frameword/maps.jar的权限声明??
  32. ||--framework??
  33. ????|-com.google.android.gtalkservice.jar:支持gtalk的api的源文件编译产生??
  34. ????|-com.google.android.maps.jar:支持maps的api的源文件编译产生??
  35. ||--lib??
  36. ????|-libgtalk_jni.so:支持gtalk的动态链接库??
  37. |-libspeech.so:支持语音搜索和语音拨号相关动态链接库 ?

?

  相关解决方案