一、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賬號。