时间:2020/08/31
之前公司不允许csdn,笔记写在其它地方。最近整理过来
问题背景:
有时候,我们发现修改apk中的资源或者xml配置,无法生效,全局搜索同明的文件,rom里发现各种路径下存在相同文件。
如何判断我们使用的是哪个文件?
1、如何确定的知道是哪个版本
E:\Desktop>adb shell pm path com.android.launcher3
package:/product/priv-app/Launcher3Go/Launcher3Go.apk
E:\Desktop>adb shell pm path com.google.android.gmsintegration
package:/product/app/GmsSampleIntegrationGo/GmsSampleIntegrationGo.apk
如上,刷了rom之后,按照包名打印出apk的安装位置。
从apk的命名可以知道mk文件编译的那个变量,以GmsSampleIntegrationGo为例子
打开包名为com.google.android.gmsintegration的工程的mk文件(如何得到这个包名见launcher加载流程)
...
# GmsSampleIntegration
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := GmsSampleIntegration
LOCAL_MODULE_OWNER := google
LOCAL_MODULE_TAGS := optional
LOCAL_PRODUCT_MODULE := true
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res_dhs_full $(LOCAL_PATH)/res
LOCAL_SDK_VERSION := current
include $(BUILD_PACKAGE)
# GmsSampleIntegrationGo
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := GmsSampleIntegrationGo
LOCAL_MODULE_OWNER := google
LOCAL_MODULE_TAGS := optional
LOCAL_PRODUCT_MODULE := true
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res_dhs_go $(LOCAL_PATH)/res
LOCAL_SDK_VERSION := current
include $(BUILD_PACKAGE)
...
找到对应的编译部分,可以查到res和src使用的哪个目录,方便定位修改文件。
LOCAL_PACKAGE_NAME属性为make GmsSampleIntegrationGo时的名字和编译生成的目录以及apk名字
====================================
以上分析都是从结果出发,逆向推理。
2、它们配置在什么位置
device/mediatek/mt6765/device.mk中
#init gms build
include build/buildplus/target/spr_target.min
ifneq ($(wildcard vendor/partner_gms),)
#ifeq ($(strip $(TARGET_BUILD_VERSION)),gms)
ifeq (go_edition,$(strip $(CONFIG_BUILD_GMS_PACKAGE_EDITION)))
$(call inherit-product, vendor/partner_gms/products/gms_go_2gb.mk)
else
$(call inherit-product, vendor/partner_gms/products/gms.mk)
endif
#endif
endif
上面会走到gms****.mk vendor/partner_gms/products/gms****.mk
里面配置了各种gms的包,例如launcher相关的如下:
# GMS sample application packages
PRODUCT_PACKAGES += \
GmsSampleIntegrationGo \
Launcher3Go
以上是源码的位置
==================
mtk会默认往手机里写Launcher apk,和上面的路径不同
/device/mediatek/common/ago/device.mk
/device/mediatek/vendor/common/ago/device.mk
/device/mediatek/system/common/ago/device.mk
# Add MtkLauncher3 to replace Launcher3 when vendor code is available
ifneq ($(wildcard vendor/mediatek/proprietary/packages/apps/Launcher3/Android.mk),)
PRODUCT_PACKAGES += MtkLauncher3QuickStep
endif
/device/mediateksample/k65v1_32_bsp/ProjectConfig.mk
MTK_GMO_RAM_OPTIMIZE = no
尾注
如果定制修改过过launcher包名和launcher加载流程,上面命令里的包名需要根据具体定制修改一下。