Android系统集成Google Maps和Google Search apk注意事项

最近公司由于要参加国际上的某个show,需要集成Google Maps和Google Search的apk,注意是源码集成。在此过程中遇到一些坑,总结下来希望大家注意,以后遇到类似问题可以参考。

大家都知道,源码集成apk主要有两种形式,一种是预装到/system/app下边,一种是预装到/data/app下,当然还有一种比较特殊的是/system/priv-app。在集成之前,我先在某个应用市场下载了最新的几个Google的apk (我的系统环境是5.0.1),它们分别是:Google Play Service、Google Service Framework、Google Play Store、Google Maps以及Google Search。我刚开始的做法是将这些apk直接集成到/system/app,以google maps为例

LOCAL_PATH          := $(PREBUILT_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE        := GoogleMaps
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := APPS
LOCAL_CERTIFICATE   := PRESIGNED
LOCAL_MODULE_SUFFIX := .apk
LOCAL_SRC_FILES     := ../n5100/system/app/GoogleMaps/GoogleMaps.apk
include $(BUILD_PREBUILT)

但是编译出来的rom在开机时会报错,主要是两种错误:一个是提示Google Play Service sopped;另一个是Google Maps安装位置不对。这两个问题困惑了我好久。关于Google Maps的错误,我发现在普通install也就是安装在/data/app目录下时是可以正常运行的,但是放到/system/app下就不行了。adb shell进去看目录结构,忽然发现app的目录中还有依赖的so文件,这时才恍然大误。/data/app下的apk会去自己目录下的lib/arm中找so,而/system/app会从/system/lib下寻找,我之前只把apk集成到了/system/app,而忽视了/system/lib下的so,遂adb pull出data/app下的依赖so,然后集成到/system/lib下。Google Play Service跟Google Search同样需要这一步,Google Play Store跟Google Service Framework就没有依赖的so。以Google Maps为例,添加以下so集成

LOCAL_PATH          := $(PREBUILT_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE        := libcrashreporterer
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := SHARED_LIBRARIES
LOCAL_CERTIFICATE   := platform
LOCAL_MODULE_SUFFIX := .so
LOCAL_SRC_FILES     := ../n5100/system/app/GoogleMaps/libs/libcrashreporterer.so
include $(BUILD_PREBUILT)

LOCAL_PATH          := $(PREBUILT_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE        := libgmm-jni
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := SHARED_LIBRARIES
LOCAL_CERTIFICATE   := platform
LOCAL_MODULE_SUFFIX := .so
LOCAL_SRC_FILES     := ../n5100/system/app/GoogleMaps/libs/libgmm-jni.so
include $(BUILD_PREBUILT)

Ok,经过以上步骤,Google Maps不会报错了,但是Google Play Service还是报错,看log是Google Service Framework中的一些permission找不到,此时灵光一现将Google Service Framework集成到了/priv-app下,竟然鬼使神差般地work了。看来是得好好研究一下这几个目录的差异了。

LOCAL_PATH          := $(PREBUILT_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE        := GoogleServiceFramework
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := APPS
LOCAL_CERTIFICATE   := PRESIGNED
LOCAL_PRIVILEGED_MODULE := true
LOCAL_MODULE_SUFFIX := .apk
LOCAL_SRC_FILES     := ../n5100/system/priv-app/GoogleServiceFramework/GoogleServiceFramework.apk
include $(BUILD_PREBUILT)

经过以上步骤,所有的工作大功告成。但是,还是遇到了另外一个问题,系统还要集成国内某个厂商的导航软件,用以上这种方法会发现,该导航软件依赖的某个so库与系统原生的so会有命名冲突,看来应该是从某个android版本中抽取出来的so,鄙视一下也不改个名字,所以集成到/system/app下无望了,那就只能集成到 /data/app吧,关于集成apk到/data/app要远比/system/app麻烦,网上差了一些资料,无外乎以下原理:将apk保存到系统rom中的某个文件夹下,待系统第一次启动的时候通过init.rc中的某个daemon service执行一个脚本命令,将apk copy到/data/app下。

具体参考链接:http://blog.csdn.net/zuiaikg703/article/details/12445525

http://www.cnblogs.com/MMLoveMeMM/articles/4087014.html

http://blog.chinaunix.net/uid-29535415-id-4168539.html

时间: 2024-09-29 10:30:41

Android系统集成Google Maps和Google Search apk注意事项的相关文章

Android # 图片自动适配屏幕,APK反编译详解,Google Maps Android API,Keytool

本文主题:(图片缩放)自动适配屏幕,APK反编译详解,Google Maps Android API,Keytool  (图片缩放)自动适配屏幕支持缩放旋转,自动居中的imageview http://deanandbai-gmail-com.iteye.com/blog/1850329 apk反编译工具 http://pan.baidu.com/s/1qWFcueC Android APK反编译详解 http://blog.csdn.net/ithomer/article/details/67

Android系统Google Maps开发实例浅析

Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用.Google Map的服务体现在两个方面:地图API和位置API.使用Android Maps API(地图API)和Android Location API(定位API)可以轻松实现实用而且强大的功能. 我的位置:“我的位置”在地图上显示你的当前位置(通常在 1000 米范围之内).即使没有 GP

Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

---恢复内容开始--- extends:http://blog.csdn.net/h7870181/article/details/12505883 Google Maps API 网络服务 官网地址 : https://developers.google.com/maps/documentation/webservices/?hl=zh-cn 其实就是一些接口,供我们调用,如: 1.根据地址获取经纬度 http://maps.google.com/maps/api/geocode/json?

Creating a Store Locator with PHP, MySQL & Google Maps(保存地图坐标 经纬度方法 google mysql)

Google Geo APIs Team August 2009 This tutorial is intended for developers who are familiar with PHP/MySQL, and want to learn how to use Google Maps with a MySQL database to create a store locator-type app. After completing this tutorial, you will hav

Get all the coordinates of listed banks from Google Maps with Python 3

Resume Last week, my girl friend was writing her financial paper. She needs a data called Headquarter to sub branch distance in China. However, after have asked nearly all the sellers on Taobao, we cannot find out anyone who can collect this data. So

android开发步步为营之55:google广告平台admob接入总结

App变现的主要渠道有广告,增值服务,在线交易.最近项目需要接入google的admob广告平台,这里写个总结,方便其他开发者参考. 第一步:通过android sdk manager下载google play services lib,如何下载不了,baidu一下,去下载其他人提供的 下载好了之后,将该lib项目引用到测试项目study,即可调用google play services相关广告的api了      第二步.https://www.google.com/admob/ 注册账号,注

MBTiles 离线地图演示 - 基于 Google Maps JavaScript API v3 + SQLite

MBTiles 是一种地图瓦片存储的数据规范,它使用SQLite数据库,可大大提高海量地图瓦片的读取速度,比通过瓦片文件方式的读取要快很多,适用于Android.IPhone等智能手机的离线地图存储.详情请参考:MBTiles移动存储简介.       在WEB地图介绍中我们看到,瓦片是参照了他们的z/x/y 形式坐标,在磁盘存储上,他们通常存储在以z.x为名字上的目录中,这样就有一个瓦片文件路径是0/0/0.png. 同样用谷歌或百度地图JS API很方便调用.但是有个缺点就是文件多了,暂用磁

在Google Maps 上点击标签后显示说明

JS如下: (function() { ????window.onload = function() { ? ????????// Creating an object literal containing the properties ????????// you want to pass to the map ????????var options = { ????????????zoom: 3, ????????????center: new google.maps.LatLng(37.0

在Google Maps 上点击标签显示说明并保持不消失

JS如下: (function() { ????window.onload = function() { ????????// Creating an object literal containing the properties ????????// we want to pass to the map ????????var options = { ????????????zoom: 3, ????????????center: new google.maps.LatLng(37.09,