通过一个例子来了解overlay app,修改字符串资源的过程
google messag 是google的应用,如果有字符串在某种语言下显示有问题,是无法通过源码来实现。就要用到overlay来实现。
通过ApkToolkit 工具来反编译message应用
双击打开ApkToolkit.exe 应用,然后将需要反编译的apk鼠标拖入exe应用界面对应的位置,执行反编译操作。
这里需要反编译的apk是Messages_arm64_xxhdpi.apk
如果反编译成功,就会在当前目录创建和目标apk相同名称的文件夹,里面就是我们通过工具反编译之后的结果。
生成的文件中,我们只需要关注res 和AndroidManifest.xml这两个文件。
AndroidManifest.xml : 主要来获取需要反编译应用的包名,package="com.google.android.apps.messaging"
res:里面是res资源,我们只关注value类型。
编写overlay app
通过上面反编译步骤我们得到了,需要反编译应用的包名和res。下面我们就可以编写对应的overlay app了
新建文件加GoogleMessageOverlay
创建Android.mk,AndroidManifest.xml,res 等文件。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optionalLOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/overlay#include files in src directory
LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PROPRIETARY_MODULE := true#include files in res diretory
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SDK_VERSION = current#the name of target apk
LOCAL_PACKAGE_NAME := GoogleMessageOverlay
include $(BUILD_PACKAGE)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.google.android.apps.messaging.overlay"><overlayandroid:isStatic="true"android:priority="1"android:targetPackage="com.google.android.apps.messaging" />
</manifest>
res
res 目录下就是我们需要overlay修改的字串,此处我们修改中文下的字串。
将plurals.xml打开找到对应的string id修改就可以了 。
编译overlay app
编译过程忽略。
生成的app在out 下的vendor/overlay中。