网络配置config.xml的android.mk解析

cpp 复制代码
LOCAL_PATH:= $(call my-dir)       //vendor/qti/overlays/CneEthernetOverlay/

include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res						核心就是通过这个目录中的资源来替换目标应用或系统中的同名资源。
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/overlay			指定该模块安装的目标路径  , /vendor/overlay/, Android 系统会在启动时扫描 /vendor/overlay/ 目录,加载 RRO 模块。

LOCAL_MANIFEST_FILE := AndroidManifest.xml			这个文件是 RRO 的核心配置文件,必须包含

LOCAL_PACKAGE_NAME := CneEthernetOverlay			编译后生成的 APK 文件名为:CneEthernetOverlay.apk
LOCAL_SDK_VERSION := current

LOCAL_CERTIFICATE := platform				指定对该 APK 进行签名的密钥, platform 表示使用 platform key
LOCAL_MODULE_OWNER := qti					指定该模块的"所有者"为 qti(Qualcomm Technologies, Inc)
LOCAL_VENDOR_MODULE := true					标记该模块为 vendor 模块。


include $(BUILD_RRO_PACKAGE)		:这是构建规则的入口

这段代码是一个 Android 的 Android.mk 构建脚本 ,用于定义一个 Resource-Only Overlay(RRO) 模块,名称为 CneEthernetOverlay。它属于 Android 的资源覆盖机制(Runtime Resource Overlay),常用于厂商(如 Qualcomm、Samsung)在不修改原生系统代码的情况下,动态替换系统或其他应用的资源。

下面我们逐行解释其含义和作用:


📌 1. LOCAL_PATH := $(call my-dir)

makefile 复制代码
LOCAL_PATH := $(call my-dir)
  • 作用 :将当前 Android.mk 文件所在的目录路径赋值给变量 LOCAL_PATH。
  • $(call my-dir) 是一个 Make 函数,返回当前 .mk 文件的路径。
  • 这是每个 Android.mk 文件的标准开头,用于后续相对路径引用。

✅ 示例:如果 Android.mk 在 vendor/qti/overlays/CneEthernetOverlay/,那么 LOCAL_PATH 就是这个路径。


📌 2. include $(CLEAR_VARS)

makefile 复制代码
include $(CLEAR_VARS)
  • 作用 :清除之前定义的所有 LOCAL_XXX 变量(如 LOCAL_SRC_FILES、LOCAL_MODULE 等),但保留 LOCAL_PATH。
  • 这是为了确保当前模块的定义不会受到之前模块的影响。
  • 是每个模块定义前的必要步骤。

🔁 相当于"重置"构建环境。


📌 3. LOCAL_SRC_FILES := $(call all-subdir-java-files)

makefile 复制代码
LOCAL_SRC_FILES := $(call all-subdir-java-files)
  • 作用 :递归查找当前目录及其子目录下的所有 .java 文件,并作为源文件。
  • 但在 RRO(Resource-Only Overlay) 模块中,通常不需要 Java 代码。
  • ❗ 这里可能是 冗余或错误配置,因为 RRO 只关心资源(res/)和清单文件(AndroidManifest.xml),不需要编译 Java 代码。

⚠️ 建议:对于纯资源覆盖,应删除此行或确认是否有 Java 文件需要编译(极少见)。


📌 4. LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res

makefile 复制代码
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
  • 作用 :指定该模块的资源目录为 res/(相对于 LOCAL_PATH)。
  • 这个目录下通常包含:
    • values/strings.xml:覆盖字符串
    • drawable/:覆盖图片
    • layout/:覆盖布局(较少见)
  • RRO 的核心就是通过这个目录中的资源来替换目标应用或系统中的同名资源。

📌 5. LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/overlay

makefile 复制代码
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/overlay
  • 作用:指定该模块安装的目标路径。

  • $(TARGET_OUT_VENDOR)/overlay 通常是:

    复制代码
    /vendor/overlay/
  • Android 系统会在启动时扫描 /vendor/overlay/ 目录,加载 RRO 模块。

  • ✅ 这是 vendor overlay 的标准安装路径。


📌 6. LOCAL_MANIFEST_FILE := AndroidManifest.xml

makefile 复制代码
LOCAL_MANIFEST_FILE := AndroidManifest.xml
  • 作用 :指定该模块的 AndroidManifest.xml 文件路径(相对于 LOCAL_PATH)。

  • 这个文件是 RRO 的核心配置文件 ,必须包含:

    xml 复制代码
    <manifest android:sharedUserId="android.uid.system">
        <overlay android:targetPackage="com.android.systemui" />
    </manifest>
  • 其中 android:targetPackage 指明了要覆盖哪个应用的资源(如 SystemUI、Settings 等)。


📌 7. LOCAL_PACKAGE_NAME := CneEthernetOverlay

makefile 复制代码
LOCAL_PACKAGE_NAME := CneEthernetOverlay
  • 作用:定义该模块的名称。

  • 编译后生成的 APK 文件名为:

    复制代码
    CneEthernetOverlay.apk
  • 该名称也用于在系统中标识这个 overlay 模块。


📌 8. LOCAL_SDK_VERSION := current

makefile 复制代码
LOCAL_SDK_VERSION := current
  • 作用:指定编译该模块时使用的 SDK 版本。
  • current 表示使用当前 AOSP 源码树的最新 SDK(即未发布版本)。
  • 对于 vendor 模块,通常使用 current 或 system_current。

🆚 对比:LOCAL_SDK_VERSION := 30 表示使用 Android 11 的 SDK。


📌 9. LOCAL_CERTIFICATE := platform

makefile 复制代码
LOCAL_CERTIFICATE := platform
  • 作用:指定对该 APK 进行签名的密钥。
  • platform 表示使用 platform key (build/target/product/security/platform.x509.pem + platform.pk8)。
  • RRO 模块要覆盖系统应用,必须使用与目标应用相同的签名,否则系统会拒绝加载。

✅ 如果 targetPackage 是 SystemUI(platform 签名),那么 overlay 也必须用 platform 签名。


📌 10. LOCAL_MODULE_OWNER := qti

makefile 复制代码
LOCAL_MODULE_OWNER := qti
  • 作用 :指定该模块的"所有者"为 qti(Qualcomm Technologies, Inc)。
  • 主要用于构建系统内部记录和依赖管理。
  • 不影响 APK 功能,但有助于追踪模块来源。

📌 11. LOCAL_VENDOR_MODULE := true

makefile 复制代码
LOCAL_VENDOR_MODULE := true
  • 作用 :标记该模块为 vendor 模块。
  • 影响:
    • 安装路径(如 /vendor/overlay/)
    • SELinux 上下文
    • 构建依赖解析
  • ✅ 对于高通等 SoC 厂商的 overlay,必须设置为 true。

📌 12. include $(BUILD_RRO_PACKAGE)

makefile 复制代码
include $(BUILD_RRO_PACKAGE)
  • 作用 :这是构建规则的入口 ,告诉构建系统:
    • 这是一个 Resource-Only Overlay Package。
    • 使用 RRO 的特殊构建流程,生成一个只包含资源的 APK。
  • 与 $(BUILD_PACKAGE) 不同,BUILD_RRO_PACKAGE 不会编译 Java 代码,也不会生成 classes.dex。

🧩 总结:这个模块是做什么的?

项目 说明
模块名 CneEthernetOverlay
类型 Resource Overlay (RRO)
作用 覆盖某个系统应用(如 Cne 或 EthernetService)的资源(字符串、颜色、布局等)
安装路径 /vendor/overlay/CneEthernetOverlay.apk
签名 platform(与系统应用一致)
目标 通过 AndroidManifest.xml 中的 android:targetPackage 指定要覆盖的应用

🛠️ 典型 AndroidManifest.xml 内容推测

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.qualcomm.qti.CneEthernetOverlay"
    android:versionCode="1"
    android:versionName="1.0"
    android:sharedUserId="android.uid.system">

    <application android:hasCode="false" />

    <overlay
        android:targetPackage="com.qualcomm.qti.cne"
        android:targetName="CneOverlay"
        android:isStatic="false"
        android:priority="1" />
</manifest>
  • targetPackage:被覆盖的应用包名
  • priority:优先级,数字越大优先级越高
  • isStatic:false 表示运行时可启用/禁用

✅ 建议优化

  1. 移除 LOCAL_SRC_FILES(除非真有 Java 文件):

    makefile 复制代码
    # LOCAL_SRC_FILES := $(call all-subdir-java-files)  # 删除或注释
  2. 确保 res/ 目录存在且结构正确

  3. 确认 AndroidManifest.xml 中的 targetPackage 正确


这个模块是典型的 高通 vendor overlay,用于定制化网络或连接相关的系统行为,属于 Android 定制开发中的常见模式。

相关推荐
千里马学框架6 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台6 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone6 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc6 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo6 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077006 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼6 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone6 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen6 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone6 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui