Android 9.0 導入GMS組件及Google Play Store


一、Android P之后的差異

可查看GMS P Initial Release Notes 了解:

1、P上增加了一些core app :AndroidPlatformServices、GoogleRestore、Device Health Services (Turbo)

2、GoogleContacts is Non-privileged ,其實2018-10 GMS 開始 8.1上也不再是特權app了。

3、AndroidPlatformServices、GoogleRestore 在P之前都是GmsCore的一部分,9.0 and later 分離出來了

4、關於Turbo這個,在原生Android one上是必須預置的,詳細可參考文檔Integrating Turbo apk - 20180816.pdf

其他一些區別包括EEA的都可以看相關Release Notes :https://support.google.com/androidpartners_gms/answer/6173316?hl=en&ref_topic=6173346

 

二、下載GMS刷機包

下載網址: https://opengapps.org/ 根據API,platform,variant下載合適的gms包。

Open Gapps各版本差異

OpenGApps有幾個不同的版本,super、stock、full、mini、micro、nano、pico,很多人不知道差別是什么,這里說明一下

sup

包含了所有 GApps ,像韓語日語中文拼音中文注音輸入法等。(請注意:如果你是用的是基於原生的 ROM ,本版本會替換相機,通訊錄等等所有有關應用)。體積1G左右,如果System分區剩余空間不夠,就會刷入失敗。

stock

類似於 Google Pixel 出廠內置的 GApps ,相比 super 版少了其他語種的輸入法以及 Google 地球等。(請注意:如果你是用的是基於原生的 ROM ,本版本會替換相機,通訊錄等等所有有關應用)。體積820M~840M左右,如果System分區剩余空間不夠,就會刷入失敗。

full

與 stock 版所包含的內容相同,但此版本不會替換手機原本的應用。體積670~690M左右,如果System分區剩余空間不夠,就會刷入失敗。

mini

包含基礎的 Google 服務框架,以及一些影響力較大的 GApps ,相比 full 版去掉了 Docs 等應用。體積370M~390M左右,如果System分區剩余空間不夠,就會刷入失敗。

micro

包含基礎的 Google 服務框架和 Gmail 等常見 GApps。體積190~210M左右,如果System分區剩余空間不夠,就會刷入失敗。

nano

包含基礎的 Google 服務框架,但不會有其他 不必要的 GApps。體積160M~180M左右,如果System分區剩余空間不夠,就會刷入失敗。

pico

包含最迷你的 Google 服務框架,但由於框架並非完整,部分 GApps 可能無法運行。體積110~120M左右,如果System分區剩余空間不夠,就會刷入失敗。

 

 

 

 

 

三. 預置

 下載版本 open_gapps-arm-9.0-stock-20201223,解壓后內容如下:

Core和Optional目錄下為谷歌服務核心文件和應用,需要預置到源碼中。

GApps目錄下為一些功能應用,可不預置到源碼中。

為了整合到系統源碼,提取需要的文件整理后目錄如下:

├─gms
│  ├─app
│  │  ├─CalculatorGooglePrebuilt
│  │  │      Android.mk
│  │  │      CalculatorGooglePrebuilt.apk
│  │  │
│  │  ├─CalendarGooglePrebuilt
│  │  │      Android.mk
│  │  │      CalendarGooglePrebuilt.apk
│  │  │
│  │  ├─Chrome
│  │  │      Android.mk
│  │  │      Chrome.apk
│  │  │
│  │  ├─Drive
│  │  │      Android.mk
│  │  │      Drive.apk
│  │  │
│  │  ├─GoogleContactsSyncAdapter
│  │  │      Android.mk
│  │  │      GoogleContactsSyncAdapter.apk
│  │  │
│  │  ├─GoogleExtShared
│  │  │      Android.mk
│  │  │      GoogleExtShared.apk
│  │  │
│  │  └─LatinIMEGooglePrebuilt
│  │          Android.mk
│  │          LatinIMEGooglePrebuilt.apk
│  │
│  ├─priv-app
│  │  ├─AndroidMigratePrebuilt
│  │  │      Android.mk
│  │  │      AndroidMigratePrebuilt.apk
│  │  │
│  │  ├─CarrierSetup
│  │  │      Android.mk
│  │  │      CarrierSetup.apk
│  │  │
│  │  ├─ConfigUpdater
│  │  │      Android.mk
│  │  │      ConfigUpdater.apk
│  │  │
│  │  ├─GoogleBackupTransport
│  │  │      Android.mk
│  │  │      GoogleBackupTransport.apk
│  │  │
│  │  ├─GoogleContacts
│  │  │      Android.mk
│  │  │      GoogleContacts.apk
│  │  │
│  │  ├─GoogleExtServices
│  │  │      Android.mk
│  │  │      GoogleExtServices.apk
│  │  │
│  │  ├─GoogleFeedback
│  │  │      Android.mk
│  │  │      GoogleFeedback.apk
│  │  │
│  │  ├─GoogleOneTimeInitializer
│  │  │      Android.mk
│  │  │      GoogleOneTimeInitializer.apk
│  │  │
│  │  ├─GooglePartnerSetup
│  │  │      Android.mk
│  │  │      GooglePartnerSetup.apk
│  │  │
│  │  ├─GoogleRestore
│  │  │      Android.mk
│  │  │      GoogleRestore.apk
│  │  │
│  │  ├─GoogleServicesFramework
│  │  │      Android.mk
│  │  │      GoogleServicesFramework.apk
│  │  │
│  │  ├─Phonesky
│  │  │      Android.mk
│  │  │      Phonesky.apk
│  │  │
│  │  ├─PrebuiltGmsCorePi
│  │  │      Android.mk
│  │  │      PrebuiltGmsCorePi.apk
│  │  │
│  │  └─SetupWizard
│  │          Android.mk
│  │          SetupWizard.apk
│  │
│  └─system
│      ├─etc
│      │  ├─default-permissions
│      │  │      default-permissions.xml
│      │  │      opengapps-permissions.xml
│      │  │
│      │  ├─permissions
│      │  │      android.feature.additions.xml
│      │  │      com.google.android.maps.xml
│      │  │      com.google.android.media.effects.xml
│      │  │      privapp-permissions-google.xml
│      │  │
│      │  ├─preferred-apps
│      │  │      google.xml
│      │  │
│      │  └─sysconfig
│      │          google-hiddenapi-package-whitelist.xml
│      │          google.xml
│      │          google_build.xml
│      │          google_exclusives_enable.xml
│      │          nexus.xml
│      │          pixel_2018_exclusive.xml
│      │          pixel_experience_2017.xml
│      │          pixel_experience_2018.xml
│      │
│      ├─framework
│      │      com.google.android.maps.jar
│      │      com.google.android.media.effects.jar
│      │
│      └─lib
│              libjni_latinimegoogle.so
│
└─products
        gms.mk

 

 

其中google 商店為:Tubesky(TV版本)和 Phonesky(手機版本),根據平台導入對應的版本,否則打開時會提示與設備不兼容。

 

(1)對於非APK文件(system目錄):

使用宏PRODUCT_COPY_FILES,在源碼編譯時將非APK文件拷貝到/system/下,在gms.mk里加上:

# Configuration files for GMS apps
PRODUCT_COPY_FILES += $(call find-copy-subdir-files,*,$(ANDROID_PARTNER_GMS_HOME)/system,/system)

 

(2)對於APK文件:

增加Android.mk預置到/system/app/或/system/priv-app/下,開啟預編譯減少第一次開機時間。

例如:Chrome.apk預置到/system/app/下,添加對應的Android.mk內容如下:

###############################################################################
# Chrome
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := Chrome
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := Chrome.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := true
include $(BUILD_PREBUILT)

 

例如:AndroidPlatformServices.apk 預置到/system/priv-app/下,添加LOCAL_PRIVILEGED_MODULE := true

#
###############################################################################
# AndroidPlatformServices
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := AndroidPlatformServices
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := AndroidPlatformServices.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := true
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PREBUILT)

PS: 注意LOCAL_CERTIFICATE := PRESIGNED 保證使用APK本身的簽名信息,否則無法正常使用

 

四. 通過谷歌設備驗證

  • 不能修改 build/core/MakeFile 中 的BUILD_FINGERPRINT生成方式,BUILD_FINGERPRINT的拼接格式影響CTS認證和GMS ANDROID ID的生成,可能導致谷歌設備認證不通過
  • 掛上代理,進入Play商店,等待出現設備未驗證的提示,此時才會生成一個GMS ANDROID ID
  • adb root ; adb shell 'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"'    
  • https://www.google.com/android/uncertified/中填入 GMS ANDROID ID 即可。

 

      注:平台原廠一般會將對應的設備進行google認證,在\device\xxx\xxx\device.mk 文件中會配置對應的fingerprint,由以下信息組成:

BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(GP_TARGET_PRODUCT)/$(GP_TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)

  通過讀取系統屬性[ro.build.fingerprint]或[ro.vendor.build.fingerprint]查看fingerprint信息,如果設備已經過了google認證,則導入GMS包后可直接登錄Google賬號。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM