当前位置: 首页 > 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.lryc.cn/news/622056.html

相关文章:

  • 前端css学习笔记6:盒子模型
  • IP生意的天花板更高了吗?
  • 多路混音声音播放芯片型号推荐
  • Microsoft Visual Studio常用快捷键和Windows系统常用快捷键的整理
  • 深入解析五大通信协议:TCP、UDP、HTTP_HTTPS、WebSocket与GRPC
  • 【Leetcode hot 100】53.最大子数组和
  • 异步任务执行顺序
  • DataGear:一个免费开源的国产数据可视化分析平台
  • 经典BT的连接过程
  • 归并排序和统计排序
  • 智能工厂生产监控大屏-vue纯前端静态页面练习
  • AI智能体在软件测试中的应用与未来趋势
  • 开疆智能Ethernet转ModbusTCP网关连接测联无纸记录仪配置案例
  • python-pycharm切换python各种版本的环境与安装python各种版本的环境(pypi轮子下载)
  • C++第二十课:快递运费计算器 / 黑白配+石头剪刀布小游戏
  • SAP ALV导出excel 报 XML 错误的 /xl/sharedStrings.xml
  • 2025.08.09 江门两日游记
  • 4.2 寻址方式 (答案见原书 P341)
  • LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。
  • 硬件实现webrtc的编解码
  • 从前端框架到GIS开发系列课程(26)在mapbox中实现地球自转效果,并添加点击事件增强地图交互性
  • 【自动化运维神器Ansible】Ansible算术运算符详解:实现配置文件的动态计算
  • MS5905P 一款 12bit 分辨率的旋变数字转换器
  • GaussDB 常用数值类型
  • 在Ubuntu 22.04上安装远程桌面服务
  • C语言指针(五):回调函数与 qsort 的深层关联
  • 【大模型微调系列-03】 大模型数学基础直观入门
  • Codeforces Deque工艺
  • 专题三_二分_x 的平方根
  • Swift 实战:用最长递增子序列算法解“俄罗斯套娃信封”问题(LeetCode 354)