网络知识 娱乐 [技术篇] Android11导入GMS后登录账号提示“您的账号未成功添加”

[技术篇] Android11导入GMS后登录账号提示“您的账号未成功添加”

一、项目需求:


在项目中导入Google框架,Google相关功能可以正常使用。


二、功能实现:


1、首先下载Google框架GMS包,可以在The Open GApps Project网站下载。选择相关配置后下载即可,有些包比较大,下载需要耐心等待一下,最后翻墙下载会快一些。


​编辑


2、由于本人使用的TV平台,Google版本需要使用手机版,不能使用TV版,因为TV版很多apk在Google商店中无法搜索到。修改mtv_core_hardware.xml文件,把TV版改成手机版。有多个路径:device/google/atv/permissions/tv_core_hardware.xml ,vendor/mediatek/common-tv/configs/mtv_core_hardware.xml,vendor/mediatek/proprietary_tv/open/common/preinstall/permission/mtv_core_hardware.xml


<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2011 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.--><!-- This is the minimum set of features supported by TV devices. --><permissions> <feature name="android.hardware.type.television" /> <!--feature name="android.hardware.faketouch" /--> <feature name="android.hardware.screen.landscape" /> <!--feature name="android.hardware.microphone" /--> <feature name="android.hardware.usb.host" /> <!--feature name="android.hardware.usb.accessory" /--> <library name="com.android.future.usb.accessory" file="/system/framework/com.android.future.usb.accessory.jar" /> <!-- <feature name="android.hardware.camera.any" /> --> <!--<feature name="android.hardware.camera.front" />--> <!-- <feature name="android.hardware.camera" /> <feature name="android.hardware.camera.autofocus" /> <feature name="android.hardware.camera.flash" /> --> <feature name="android.hardware.wifi" /> <feature name="android.hardware.wifi.direct" /> <feature name="android.hardware.ethernet" /> <feature name="android.software.app_widgets" /> <feature name="android.software.input_methods" /> <feature name="android.software.backup" /> <!-- <feature name="android.software.leanback" /> TV版打开,手机版关闭--> <feature name="android.software.voice_recognizers" /> <feature name="android.software.cant_save_state" /> <!-- Let Netflix show up on Google Play /--> <feature name="nrdp.modelgroup" /></permissions>



3、由于Google GMS包比较大,打包会占用很大空间。所以分区需要加大,具体加多少需要根据自己打包的内容而定。修改文件device/mediatek/xxxxx/BoardConfig.mk


include $(DEVICE_SOURCES)/BoardConfigCommon.mk# Change on this file should go below this line# -----------------------------------------------------------------------TARGET_BOOTLOADER_BOARD_NAME := $(TARGET_PRODUCT)BOARD_KERNEL_CMDLINE += androidboot.boot_devices=mstar_mci.0ifeq ($(findstring true, $(FILE_BASED_ENCRYPTION) $(AB_UPDATE_ENABLE)), true)# Android UserData Checkpoint (UDC)BOARD_USES_METADATA_PARTITION := trueBOARD_ROOT_EXTRA_FOLDERS += /metadataendif# mmc part#index: type name (size)# 1: MBOOT (5.000M)# 2: MPOOL (3.000M)# 3: MBOOTB (5.000M)# 4: tvcertificate (8.000M)# 5: eeprom_a (1.000M)# 6: tvconfig (32.000M)# MTK_DATA_SEPARATION=true# 7: cusdata (150.000M)# 8: project_id (5.000M)# 9: misc (1.000M)#AVB enable# 10: vbmeta (1.000M)# 11: recovery (40.000M)#12: boot (40.000M)#13: optee (18.000M)#14: armfw (1.000M)#15: RTPM (1.000M)#16: dtb (1.000M)#AVB enable#17: dtbo (8.000M)#18: metadata (16.000M)#19: frc (1.000M)#20: linux_rootfs_a (50.000M)#21: basic_a (1.000M)#22: 3rd_a (30.000M)#23: 3rd_rw (30.000M)#24: vbmeta_a (1.000M)#25: ciplus (1.000M)#26: dvbsdb_a (1.000M)#27: cha (1.000M)#28: chb (1.000M)#29: upgrade (112.000M)#30: schedpvr (1.000M)#31: cm4 (1.000M)#32: demura (3.000M)#33: factory_a (5.000M)## ANDROID_DYNAMIC_PARTITION_SUPPORT=false##34: system (1.464G)#35: vendor (327.000M)#36: product (300.00M)#37: odm_a (1.000M)#38: cache (100.000M)#39: tvservice (130.000M)#40: factory_a (1.000M)#41: userdata (3.993G)or(4.082G for dtv_svc debug)# ANDROID_DYNAMIC_PARTITION_SUPPORT=true##34: super (2122.000M)#35: odm_a (1.000M)#36: cache (100.000M)#37: tvservice (130.000M)#38: factory_a (1.000M)#39: userdata (3.993G)or(4.082G for dtv_svc debug)BOARD_MBOOTIMAGE_PARTITION_SIZE := 5242880 #0x000500000BOARD_VBMETAIMAGE_PARTITION_SIZE := 65536BOARD_TVCERTIFICATEIMAGE_PARTITION_SIZE := 8388608BOARD_TVCONFIGIMAGE_PARTITION_SIZE := 33554432BOARD_RECOVERYIMAGE_PARTITION_SIZE := 41943040BOARD_BOOTIMAGE_PARTITION_SIZE := 41943040BOARD_OPTEEIMAGE_PARTITION_SIZE := 18874368BOARD_ARMFWIMAGE_PARTITION_SIZE := 1048576BOARD_RTPMIMAGE_PARTITION_SIZE := 1048576BOARD_DTBIMAGE_PARTITION_SIZE := 1048576BOARD_DTBOIMG_PARTITION_SIZE := 8388608#BOARD_METADATAIMAGE_PARTITION_SIZE := 16777216BOARD_FRCIMAGE_PARTITION_SIZE := 1048576ifeq ($(findstring true, $(FILE_BASED_ENCRYPTION) $(AB_UPDATE_ENABLE)), true)BOARD_METADATAIMAGE_PARTITION_SIZE := 16777216endif# for AB Updateifeq "$(BOARD_USES_RECOVERY_AS_BOOT)" "true"BOARD_BOOTIMAGE_PARTITION_SIZE := $(BOARD_RECOVERYIMAGE_PARTITION_SIZE)BOARD_RECOVERYIMAGE_PARTITION_SIZE :=endififneq "$(DDI_SUPPORT)" "true"BOARD_APOLLO_EEPROM_PARTITION_SIZE := 1048576ifeq "$(DTV_SVC_DBG)" "true"BOARD_APOLLO_LINUXROOTFS_PARTITION_SIZE := 209715200BOARD_APOLLO_3RD_PARTITION_SIZE := 209715200elseBOARD_APOLLO_LINUXROOTFS_PARTITION_SIZE := 52428800BOARD_APOLLO_3RD_PARTITION_SIZE := 31457280endifBOARD_APOLLO_3RD_RW_PARTITION_SIZE := 31457280BOARD_APOLLO_VBMETA_PARTITION_SIZE := 1048576BOARD_APOLLO_CHANNELA_PARTITION_SIZE := 1048576BOARD_APOLLO_CHANNELB_PARTITION_SIZE := 1048576BOARD_APOLLO_FACTORY_PARTITION_SIZE := 5242880#BOARD_APOLLO_ODM_PARTITION_SIZE := 1048576ifneq "$(MODEL_REGION)" "cn"BOARD_APOLLO_CIPLUS_PARTITION_SIZE := 1048576BOARD_APOLLO_DVBSDB_PARTITION_SIZE := 1048576BOARD_APOLLO_SCHEDPVR_PARTITION_SIZE := 1048576endif#endof DDI_SUPPORTendif#ifeq "$(MTK_DATA_SEPARATION)" "true"#BOARD_PROJECT_ID_PARTITION_SIZE := 5242880 #0x000500000#BOARD_CUSDATA_PARTITION_SIZE := 157286400 #0x009600000#endif#USERDATAIMAGE Size == EMMC Size - ALL PARTITION SIZE#when mboot set CONFIG_USERDATA_PARTITION_SELF_ADAPTION=y USERDATAIMAGE will self-adaption#ifeq "$(MTK_DATA_SEPARATION)" "true"#ifeq "$(DTV_SVC_DBG)" "true"#BOARD_USERDATAIMAGE_PARTITION_SIZE := 4232052736#else#BOARD_USERDATAIMAGE_PARTITION_SIZE := 4462739456#endif#elseifeq "$(DTV_SVC_DBG)" "true"BOARD_USERDATAIMAGE_PARTITION_SIZE := 4394582016elseBOARD_USERDATAIMAGE_PARTITION_SIZE := 4625268736endif#endifBOARD_APOLLO_UPGRADE_PARTITION_SIZE := 209715200BOARD_CM4IMAGE_PARTITION_SIZE := 1048576BOARD_DEMURAIMAGE_PARTITION_SIZE := 3145728BOARD_TVSERVICEIMAGE_PARTITION_SIZE := 146800640BOARD_CACHEIMAGE_PARTITION_SIZE := 104857600ifeq "$(ANDROID_DYNAMIC_PARTITION_SUPPORT)" "true"# For non-A/B devices and retrofit A/B devices,# the sum of maximum sizes of all groups must be:# BOARD_SUPER_PARTITION_SIZE - overhead# Overhead is required in the computation to account for metadata, alignments,# and so on. A reasonable overhead is 4 MiB, but you can pick a larger overhead as needed by the device.#BOARD_SUPER_PARTITION_SIZE 2254438400 1024*1024 = 2097152 *2 =4194304 + 2254438400= 2258632704#BOARD_GROUP_OEM_SIZE 2250244096 + 4194304 = 2588532736BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 52428800BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE := 52428800BOARD_SUPER_PARTITION_SIZE := 2778726400BOARD_SUPER_PARTITION_GROUPS := group_oemBOARD_GROUP_OEM_SIZE := 2774532096BOARD_GROUP_OEM_PARTITION_LIST := system vendorelseBOARD_SYSTEMIMAGE_PARTITION_SIZE := 1572864000BOARD_VENDORIMAGE_PARTITION_SIZE := 367001600BOARD_PRODUCTIMAGE_PARTITION_SIZE := 314572800endifBOARD_FLASH_BLOCK_SIZE := 512



4、把下载好的GMS包放到目录下vendor/partner_gms/


​编辑


5、在文件中添加Google编译:device/mediatek/xxxx/device.mk,添加以下代码即可。


#***************************************Google play************************************#add by jude for google play service$(call inherit-product-if-exists, vendor/partner_gms/products/gms_tv.mk)#***************************************Google play************************************



添加以上修改之后,编译出ROM之后可以正常打开Google商店等应用。


三、遇到问题:


在登录Google账号时,一直提示“您的账号未成功添加,请重试!”。遇到这问题时,一开始以为账号有问题,但在windows下可以正常使用。然后怀疑是不是apk版本问题,替换多版后还是无法解决。


四、解决方案:


1、在替换Google 商店、Google服务等apk后,发现还是一样的问题,排除apk版本问题。


2、通过修改权限也无法解决该问题。


3、最后发现跟设备认证有关,通过手动翻墙注册设备后,发现问题解决。为什么需要设备认证,官方解释如下。


​编辑


4、手动认证可以,代码如何自动认证呢?方法如下就是需要修改fingerprint相关属性。首先修改build/make/core/Makefile文件中的BUILD_FINGERPRINT,BUILD_FINGERPRINT的格式是组合起来的。相关文件:buildmakecoreversion_defaults.mk


........................# The string used to uniquely identify the combined build and product; used by the OTA server.ifeq (,$(strip $(BUILD_FINGERPRINT))) ifeq ($(strip $(HAS_BUILD_NUMBER)),false) BF_BUILD_NUMBER := $(BUILD_USERNAME)$$($(DATE_FROM_FILE) +%m%d%H%M) else BF_BUILD_NUMBER := $(file <$(BUILD_NUMBER_FILE)) endif#add by jude for google play_BRAND := MediaTek_PRODUCT := m7332_eu_DEVICE := m7332_eu#_BUILD_NUMBER := eng.$(shell echo $${BUILD_USERNAME:0:6}).$(shell $(DATE) +%Y%m%d.%H%M%S)BUILD_FINGERPRINT := $(_BRAND)/$(_PRODUCT)/$(_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)#BUILD_FINGERPRINT := $(PRODUCT_BRAND)/$(TARGET_PRODUCT)/$(TARGET_DEVICE):$(PLATFORM_VERSION)/$(BUILD_ID)/$(BF_BUILD_NUMBER):$(TARGET_BUILD_VARIANT)/$(BUILD_VERSION_TAGS)#add endendif# unset it for safety.BF_BUILD_NUMBER :=........................



然后还得修改systemcoreinitproperty_service.cpp文件中的property_derive_build_fingerprint函数,ro.build.fingerprint前面的内容需要跟BUILD_FINGERPRINT中的保持一致。


// If the ro.build.fingerprint property has not been set, derive it from constituent piecesstatic void property_derive_build_fingerprint() { std::string build_fingerprint = GetProperty("ro.build.fingerprint", ""); if (!build_fingerprint.empty()) { return; } const std::string UNKNOWN = "unknown"; build_fingerprint = "MediaTek";//GetProperty("ro.product.brand", UNKNOWN);//add by jude build_fingerprint += '/'; build_fingerprint += "m7332_eu";//GetProperty("ro.product.name", UNKNOWN); build_fingerprint += '/'; build_fingerprint += "m7332_eu";//GetProperty("ro.product.device", UNKNOWN); build_fingerprint += ':'; build_fingerprint += GetProperty("ro.build.version.release", UNKNOWN); build_fingerprint += '/'; build_fingerprint += GetProperty("ro.build.id", UNKNOWN); build_fingerprint += '/'; build_fingerprint += GetProperty("ro.build.version.incremental", UNKNOWN); build_fingerprint += ':'; build_fingerprint += GetProperty("ro.build.type", UNKNOWN); build_fingerprint += '/'; build_fingerprint += GetProperty("ro.build.tags", UNKNOWN); LOG(INFO) << "Setting property 'ro.build.fingerprint' to '" << build_fingerprint << "'"; std::string error; uint32_t res = PropertySet("ro.build.fingerprint", build_fingerprint, &error); if (res != PROP_SUCCESS) { LOG(ERROR) << "Error setting property 'ro.build.fingerprint': err=" << res << " (" << error << ")"; }}



通过以上修改,问题得到最终解决。


​编辑