在项目中导入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"?>
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的格式是组合起来的。相关文件:build\make\core\version_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 :=........................
然后还得修改system\core\init\property_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 << ")"; }}
通过以上修改,问题得到最终解决。
编辑
留言与评论(共有 0 条评论) “” |