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

高通vendor app访问文件

一、什么是vendor app?

Vendor App‌:通常指设备制造商(OEM)预装在系统中的应用程序或服务,可能与硬件功能(如芯片组、传感器等)深度集成。

在设备中,显著特征是安装在 /vendor/app下的应用。

1.1 vendor app与普通应用和系统应用区别

一句话总结:

  • 普通应用: 第三方 APK,装在 /data/app,域 untrusted_app_*,无特权。
  • 系统应用: 预置在 system/product/system_ext,分为普通系统应用与特权系统应用(在 priv-app 且允许清单放行)。
  • Vendor 应用: 预置在 vendor 分区,域通常为 vendor_app;放到 vendor/priv-app 并被放行后才具备特权。

1.2 关键差异维度

  • 安装位置
    • 普通应用: /data/app
    • 系统应用: /system/app/product/app/system_ext/app(或对应 priv-app
    • Vendor 应用: /vendor/app(或 /vendor/priv-app
  • 签名与权限
    • 普通应用: 只能拿普通/危险权限;signature 权限需与定义方同签名。
    • 系统应用(非特权): 预置但无特权;若与平台同签可拿 signature(平台定义的)。
    • 特权应用(任一分区的 priv-app): 可获标记为 privileged 的权限,但必须在对应分区的 privapp-permissions-*.xml 白名单中显式放行。
  • SELinux 域(示意,随版本可能有细微差异)
    • 普通应用: untrusted_app/untrusted_app_*
    • 系统应用(非特权): 常见为 platform_app/system_app
    • 特权应用: priv_app
    • Vendor 应用(非特权): vendor_app
  • 接口可达性
    • 普通/非特权系统/vendor 应用: 受隐藏 API 限制,不能访问私有/灰名单 API。
    • 特权/平台应用: 可通过白名单获得少量豁免(需系统侧配置,强约束)。
  • 数据与沙箱
    • 三者均为独立应用沙箱,默认不能访问他人 /data/data/<pkg>;即便文件 777 或属主为 system,也会被父目录与 SELinux 拦截。
  • 硬件与服务访问
    • Vendor 应用可按设备 sepolicy 授权访问特定 vendor 服务/HAL;普通应用一般不行。
  • 可更新性
    • 预置(系统/vendor)应用可被 /data/app 的同包名更高版本“覆盖更新”;特权资格取决于安装位与白名单,而非是否被后续更新覆盖。

1.3 判断你手头 APK 属于哪类(开发机上)

  • adb shell pm path <pkg> 看安装路径是否在 /data/app/system*/product/system_ext/vendor
  • adb shell dumpsys package <pkg> | grep -i 'isSystem\|isPrivileged'
  • adb shell ps -A -o label,user,name | grep <pkg> 看 SELinux 域(如 u:r:vendor_app:s0u:r:priv_app:s0)。

二、vendor app访问文件系统

2.1 私有应用目录

vendor app可直接访问私有应用目录。

把文件放到 /data/user/0/<package>/files,应用可直接读写。

或者 /data/data/<package>/files

应用可直接访问。文件权限可以设置777.

2.1.1 是否私有目录的读写不受限制呢?

vendor app 访问应用私有目录 /data/data/<package>/files/ark_000008_20250725_8850,发现模型ark_000008_20250725_8850访问失败。ark_000008_20250725_8850所有者 system:system, 读写权限777。

  • 目录遍历被挡住:/data/data/<package> 目录本身通常是 0700 u0_aXXX:u0_aXXX,外部进程无法通过父目录,即使子文件是 777 也无效。
  • SELinux 强制访问控制:私有目录和其中文件标记为 u:object_r:app_data_file:s0:cNNN,cMMM(带 category),进程域(如 u:r:priv_app:s0/u:r:untrusted_app_*:s0/u:r:vendor_app:s0)不匹配会被拒绝。DAC 放行也会被 MAC 拦截。

可用命令验证(需 root/userdebug):

adb shell ls -ld /data/data/<package>
adb shell ls -lZ /data/data/<package>/files/ark_000008_20250725_8850

如果用户权限 root:root,读写权限777, vendor app可以访问。

2.2 shell工作区间

/data/local/tmp 仅 shell/root 可访问,目录权限与 SELinux(shell_data_file 类型)会阻止普通 APP,包括 vendor/system/priv-app。

2.2.1 例外(仅限开发/自编 ROM/Root 环境)

  • 设备是 userdebug/eng,或已 root:可通过调整策略或权限后访问(例如 setenforce 0、改目录权限、或为应用添加 SELinux allow 规则)。量产 user 设备不可行。
  • 让应用以 shell UID 运行(平台签名 + sharedUserId="android.uid.shell"):强烈不推荐,新版 Android 限制多且有合规风险。

2.2.2 推荐替代方案

  • 应用私有目录:把文件放到 /data/user/0/<package>/files,应用可直接读写。

    • 调试场景(需 debuggable 包)可用:
      adb push foo /data/local/tmp/
      adb shell run-as <package> cp /data/local/tmp/foo /data/user/0/<package>/files/
      
  • 外部存储/SAF:把文件放到 Download,用存储访问框架读取(Android 10+ 遵循分区存储与 READ_MEDIA_* 权限)。

  • 通过服务/Provider:用自定义 ContentProvider、Binder 服务、或本地 HTTP/Socket 把数据送入应用沙箱。

  • 内置资源:将测试数据打包进 assets/ 或 res/raw/

  • 调试专用接口:若是自研系统,可在自编 ROM 的 sepolicy 中为特定 vendor_app 放行访问(仅限内部测试)。

  • 结论:在标准量产设备上,vendor app 不能访问 /data/local/tmp;请改用应用沙箱或上述替代路径。

http://www.xdnf.cn/news/1303309.html

相关文章:

  • LeetCode hot 100 day2
  • AAAI爆款:目标检测新范式,模块化设计封神之作
  • 办公效率提升指南:完成重复任务自动化
  • 【自动化测试】通过AI技术如何自动建设接口自动化用例(有关必回)
  • GPT-5 官方前瞻:它将如何重塑你的数字生活?
  • 5G赋能井下“毛细血管”:巴拉素煤矿零散排水点智能监控系统
  • [激光原理与应用-283]:理论 - 波动光学 - 电磁波概述
  • 架构需求规格说明(ARD):项目成功的隐形引擎
  • 【nginx端口】修改nginx全局模块、子模块配置,重启后依然监听80端口
  • YOLOv8目标检测网络结构理论
  • 笔试——Day39
  • DevEco Studio 6.0.0 元服务页面跳转失败
  • Spring事物
  • 智能座舱软件架构设计的宏观决策框架
  • 【自动驾驶】自动驾驶概述 ② ( 自动驾驶技术路径 | L0 ~ L5 级别自动驾驶 )
  • 数据结构:二叉树的表示方式(Representation of Binary Trees)
  • 【测试工具】JMeter基本使用及MySQL数据库压力测试
  • Baumer高防护相机如何通过YoloV8深度学习模型实现驾驶员疲劳的检测识别(C#代码UI界面版)
  • python的美食交流社区系统
  • @[TOC](计算机是如何⼯作的) JavaEE==网站开发
  • 前端性能优化工具Performance面板实战指南
  • 【swift开发】SwiftUI概述 SwiftUI 全面解析:苹果生态的声明式 UI 革命
  • 【C#补全计划】事件
  • 【2D】圆上数值积分(半径方向用高斯积分减少点数)
  • 综合案例:Python 函数知识整合 — 学生成绩管理系统
  • Python 类(Class)学习
  • 【新手入门】Android基础知识(一):系统架构
  • 【Golang】:流程控制语句
  • 【Vibe Coding 工程之 StockAnalyzerPro 记录】- EP1.先写 PRD
  • 【秋招笔试】2025.08.15饿了么秋招机考-第一题