Android系統整合Google Maps和Google Search apk注意事項

來源:互聯網
上載者:User

標籤:

最近公司由於要參加國際上的某個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        := GoogleMapsLOCAL_MODULE_TAGS   := optionalLOCAL_MODULE_CLASS  := APPSLOCAL_CERTIFICATE   := PRESIGNEDLOCAL_MODULE_SUFFIX := .apkLOCAL_SRC_FILES     := ../n5100/system/app/GoogleMaps/GoogleMaps.apkinclude $(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        := libcrashreportererLOCAL_MODULE_TAGS   := optionalLOCAL_MODULE_CLASS  := SHARED_LIBRARIESLOCAL_CERTIFICATE   := platformLOCAL_MODULE_SUFFIX := .soLOCAL_SRC_FILES     := ../n5100/system/app/GoogleMaps/libs/libcrashreporterer.soinclude $(BUILD_PREBUILT)LOCAL_PATH          := $(PREBUILT_PATH)include $(CLEAR_VARS)LOCAL_MODULE        := libgmm-jniLOCAL_MODULE_TAGS   := optionalLOCAL_MODULE_CLASS  := SHARED_LIBRARIESLOCAL_CERTIFICATE   := platformLOCAL_MODULE_SUFFIX := .soLOCAL_SRC_FILES     := ../n5100/system/app/GoogleMaps/libs/libgmm-jni.soinclude $(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        := GoogleServiceFrameworkLOCAL_MODULE_TAGS   := optionalLOCAL_MODULE_CLASS  := APPSLOCAL_CERTIFICATE   := PRESIGNEDLOCAL_PRIVILEGED_MODULE := trueLOCAL_MODULE_SUFFIX := .apkLOCAL_SRC_FILES     := ../n5100/system/priv-app/GoogleServiceFramework/GoogleServiceFramework.apkinclude $(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

Android系統整合Google Maps和Google Search apk注意事項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.