1. 为什么需要移植?
首先,我编译了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. 移植的过程
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.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目录下了,移植成功。
2.3自己制作system.img
另一种方法是比较笨的方法,但很实用。自己尝试着制作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最为简单快捷。
3. Google Bits 中安装文件,权限声明和库文件
- ||--app
- |-EnhancedGoogleSearchProvider: Google搜索引擎增强服务,安装后将在设置(settings)的搜索设置(search)中获得更多关于搜索引擎的服务
- |-GenieWidget: 根据地区下载不同语言的新闻和天气
- |-Gmail:Gmail电子邮箱服务
- |-GmailProvider:电子邮箱的数据存储服务
- |-GoogleApps:Google企业应用套件,类似office,支持WEB、POP3、SMTP、IMAP4、WAP收发邮件,还提供即时通信、日历、在线文档、网站等全面服务
- |-GoogleBackupTransport:可能是数据备份后,可以在线传输到网上,然后实现数据的保存(与Android的backup服务相关)
- |-GoogleCheckin:google签入服务
- |-GoogleContactsSyncAdapter:Google联系人/通讯录同步服务(联系人的导入和导出)
- |-GooglePartnerSetup:Google协作程序安装向导(估计与账户的设置相关)
- |-GoogleSearch:Google的搜索服务,可以删除的,不影响其他的搜索功能
- |-GoogleSettingsProvider:程序设置数据存储服务
- |-GoogleSubscribedFeedsProvider:Google资料同步服务
- |-gtalkservice:gtalk服务
- |-Maps:Google地图
- |-MarketUpdater:软件管理服务(负责更新电子市场的程序)
- |-MediaUploader:Google的媒体数据上传服务
- |-NetworkLocation:Google的网络定位服务
- |-SetupWizard:手机设置向导(第一次安装后出现的画面)
- |-Street:Google的街景视图服务
- |-Talk:Google Talk 服务(不建议卸载)
- |-TalkProvider:Talk服务的支撑程序,估计与数据存储相关
- |-TtsService:TTS(Text To Speech)文本到语音的服务
- |-Vending:Android Market(电子市场)
- |-VoiceSearchWithKeyboard:语音输进功能(通过语音键盘输入,如果语速不快,基本可以准确判断)
- |-YouTube:手机“优酷”(世界最大的视频分享网站YouTube)
- ||--etc
- |-permissons
- |-com.google.android.datamessaging.xml:(貌似不需要)
- |-com.google.android.gtalkservice.xml:对于framewokr/gtalk.jar的权限声明
- |-com.google.android.maps.xml:对于frameword/maps.jar的权限声明
- ||--framework
- |-com.google.android.gtalkservice.jar:支持gtalk的api的源文件编译产生
- |-com.google.android.maps.jar:支持maps的api的源文件编译产生
- ||--lib
- |-libgtalk_jni.so:支持gtalk的动态链接库
- |-libspeech.so:支持语音搜索和语音拨号相关动态链接库
分享到:
相关推荐
本文将详细介绍如何在Android NDK环境中移植`libiconv`库,以实现跨平台的字符编码转换功能。 首先,我们来理解一下Android NDK。NDK(Native Development Kit)是Google提供的一个用于Android应用开发的工具集,...
Android系统移植技术是一个复杂而精细的过程,涉及到多个层面的工作,包括环境配置、代码编译、设备驱动移植以及系统服务的定制。以下是对标题和描述中所提及知识点的详细解释: 1. **Android系统开发编译环境配置*...
同时,进行系统移植时,必须遵循Google的Android兼容性定义文档(CDD)以确保兼容性和稳定性。 总结起来,Android系统移植涉及Bootloader、内核、驱动、文件系统、UI框架和应用程序等多个层次的工作。每个环节都...
Android系统移植与平台开发涉及到多个方面,包含对Android系统本身的下载、编译、移植过程,以及对开发人员如何针对特定硬件平台进行开发的指导。本篇文档的内容详细描述了Android系统移植与平台开发的前期准备、...
标题中的“Google android market 电子市场的移植 (for 1.6)”指的是将谷歌的Android Market(现称为Google Play商店)应用从官方支持的版本移植到Android 1.6操作系统上。Android 1.6,代号“Donut”(甜甜圈),...
《Android移植与研究实行》是...通过以上内容,我们可以看出《Android移植与研究实行》这份资料将详细讲解Android系统在台湾地区的移植实践,对于开发者、技术爱好者和相关从业人员来说,具有很高的学习和参考价值。
然而,当涉及到Android平台时,Xcode的适用性就受到了限制,因为Android开发通常依赖于Google提供的Android Studio及其前身ADT(Android Development Tools)。本文将基于给定的文件信息,探讨Xcode移植到Android的...
在本文中,我们将详细介绍将Android系统移植到Freescale 3780开发板上的过程,以及期间遇到的问题与解决方案。 **硬件与软件环境** 1. **硬件配置**:Freescale 3780开发板、Linux PC、串口线、512M SD卡和USB电源...
Android 中移植 C/C++ 程序 Android 中移植 C/C++ 程序是一项复杂的任务,需要了解 Android 的编译环境和 Linux 内核中的移植机制。在 Android 中,C/C++ 程序需要编译成静态库或动态链接库,以便在 Android 设备上...
标题《将本地PC游戏轻松移植到Android的秘技-ch02》和描述《将本地PC游戏轻松移植到Android的秘技, jni, ndk》揭示了本书第二章节将详细讨论的内容,旨在教导读者如何将本地PC上的游戏通过特定的技术手段移植到...
在《Android 移植技术》这一主题中,作者Jollen Chen深入探讨了Android操作系统在不同硬件平台上的移植方法和技术细节。这篇文章主要关注于Android系统如何适应不同的硬件环境,特别是在非传统移动设备上的应用,如...
教程中提供了将两款经典的3D射击游戏“Wolfenstein 3D”和“Doom”移植到Android平台的实例,展示了如何将PC上的复杂游戏转换为移动设备上的游戏体验。 此外,教程中不仅包含了已公布的移植技巧,还融入了作者的...
安卓内核移植,抛砖引玉! Android系统移植(一)-让android系统在目标平台上运行起来 Android系统由于用的是linux内核,...从google网上下下载Linux内核,android源代码浏览网站如下: http://android.git.kernel.org/
7. **说明文档**:“android2.3移植ethernet.doc”可能是移植过程中详细的步骤指南,包含了如何进行上述操作的具体说明,这对于开发者来说是非常宝贵的资源。 总的来说,Android 2.3 Gingerbread的以太网移植是一项...