当前位置: 首页 > news >正文

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

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 := currentLOCAL_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)

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

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


📌 2. include $(CLEAR_VARS)

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

🔁 相当于“重置”构建环境。


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

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

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

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

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

LOCAL_MANIFEST_FILE := AndroidManifest.xml
  • 作用:指定该模块的 AndroidManifest.xml 文件路径(相对于 LOCAL_PATH)。
  • 这个文件是 RRO 的核心配置文件,必须包含:
    <manifest android:sharedUserId="android.uid.system"><overlay android:targetPackage="com.android.systemui" />
    </manifest>
    
  • 其中 android:targetPackage 指明了要覆盖哪个应用的资源(如 SystemUISettings 等)。

📌 7. LOCAL_PACKAGE_NAME := CneEthernetOverlay

LOCAL_PACKAGE_NAME := CneEthernetOverlay
  • 作用:定义该模块的名称。
  • 编译后生成的 APK 文件名为:
    CneEthernetOverlay.apk
    
  • 该名称也用于在系统中标识这个 overlay 模块。

📌 8. LOCAL_SDK_VERSION := current

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

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


📌 9. LOCAL_CERTIFICATE := platform

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

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


📌 10. LOCAL_MODULE_OWNER := qti

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

📌 11. LOCAL_VENDOR_MODULE := true

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

📌 12. include $(BUILD_RRO_PACKAGE)

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

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

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

🛠️ 典型 AndroidManifest.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" /><overlayandroid:targetPackage="com.qualcomm.qti.cne"android:targetName="CneOverlay"android:isStatic="false"android:priority="1" />
</manifest>
  • targetPackage:被覆盖的应用包名
  • priority:优先级,数字越大优先级越高
  • isStaticfalse 表示运行时可启用/禁用

✅ 建议优化

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

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

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


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

http://www.dtcms.com/a/423237.html

相关文章:

  • 网站导读怎么做wordpress二级目录创建
  • 分布式限流
  • ES-DE 前端模拟器最新版 多模拟器游戏启动器 含游戏ROM整合包 最新版
  • 【Linux网络】TCP协议
  • 分布式排行榜系统设计方案
  • 西双版纳住房和城乡建设局网站上海手机网站建设价格
  • oracle多租户环境CDB与PDB操作
  • 超市营销型网站建设策划书手机网站建站用哪个软件好
  • 使用宏实现高效的分页查询功能
  • 从语言到向量:自然语言处理中的核心转换技术与实践
  • 申请一个网站需要多少钱网站怎么添加统计代码
  • 基于机器学习的异常流量检测系统的设计与实现(原创)
  • 网站建设人员组成做网上商城网站
  • 新天力:食品容器安全与创新的领航者
  • C++_day4
  • 多解法详解与边界处理——力扣7.整数反转
  • 网站开发 python网站员工风采
  • ptyhon 基础语法学习(对比php)
  • 热点新闻事件及评论杭州seo网站推广
  • FITC-Fucoidan用于生物材料表面修饰、药物载体构建、纳米颗粒功能化和分子追踪研究
  • 【LeetCode】52. N 皇后 II
  • web网页开发,在线%推荐算法学院培养计划,图书推荐,基于Python,FlaskWeb,用户和物品推荐MySql
  • 半导体制造业中如何检测薄膜的厚度?
  • Redis为什么快
  • 3D 和 4D 世界建模:综述(下)
  • VPS服务器时区设置与优化,提升系统时间准确性
  • 爆肝整理,性能测试-双十一等大促活动稳定性保障分析,一篇通透...
  • 网络维护网站足球比赛直播平台app免费
  • 新天力科技IPO进行时:技术引领未来,创新驱动发展
  • 从0到1构建高并发电商返利APP:基于Spring Cloud Alibaba的分布式架构设计与核心模块拆解