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

给App开发者的冷知识:你的应用想进系统分区?聊聊/system/priv-app/、/system/app/和/system_ext/app/的门槛

Android系统分区应用部署指南从/system/priv-app/到/system_ext/app/的深度解析在Android生态系统中系统分区应用的部署策略一直是开发者们关注的焦点。不同于普通应用商店分发的APK能够进入系统分区的应用往往意味着更高的权限、更深的系统集成以及更稳定的运行环境。但对于大多数应用开发者而言系统分区就像一座神秘的城堡——知道它的存在却鲜少了解如何进入。本文将揭开/system/priv-app/、/system/app/和/system_ext/app/这三个关键目录的技术面纱为有志于系统级应用开发的工程师提供一份实用路线图。1. 系统分区应用的核心价值与准入逻辑系统分区应用之所以特殊关键在于它们与Android框架的深度绑定关系。这类应用通常在设备首次启动时就已经存在无需用户手动安装且卸载需要特殊权限。这种预装特性带来了几个显著优势更高的运行权限可以声明和使用普通应用无法获取的敏感权限更早的启动时机部分核心服务可以在系统启动阶段就初始化完成更强的生存能力不会被普通用户误卸载保证关键功能始终可用更优的资源调度系统会优先保障这些应用的CPU和内存资源但获得这些优势的前提是应用必须满足严格的准入条件。Android系统对三个目录有着明确的层级划分目录层级权限等级签名要求典型应用场景/system/priv-app/最高平台签名或厂商签名系统设置、电话服务等核心功能/system/app/中等平台签名或厂商签名预装的基础应用如浏览器、计算器/system_ext/app/中等平台签名或厂商签名可独立更新的系统扩展功能关键差异点在于priv-app目录中的应用可以声明和使用signature|privileged级别的权限这是其他两个目录中的应用无法获得的特权。在Android 8.0之后这种权限控制变得更加严格即使拥有系统签名也不意味着自动获得所有特权。2. /system/priv-app/的特权世界进入核心圈的条件要让应用进入这个最高权限目录开发者需要跨越三重门槛2.1 签名要求加密身份的硬核验证priv-app目录中的应用必须使用以下两种签名之一平台签名使用与系统框架相同的密钥签名# 使用平台密钥签名的示例命令 java -jar signapk.jar platform.x509.pem platform.pk8 input.apk output.apk厂商签名使用设备制造商在系统构建时注册的密钥签名注意单纯将应用放入priv-app目录而不使用正确签名会导致安装失败并出现Package couldnt be installed in /system/priv-app错误。2.2 权限声明特权权限的白名单机制即使拥有正确签名应用要使用特权权限还需要在AndroidManifest.xml中声明需要的特权权限uses-permission android:nameandroid.permission.CONTROL_DEVICE_LIGHTS /在应用的privapp-permissions.xml文件中明确列出所有特权权限!-- 存放在/etc/permissions/目录下 -- permissions privapp-permissions packagecom.example.privapp permission nameandroid.permission.CONTROL_DEVICE_LIGHTS/ /privapp-permissions /permissions2.3 兼容性保障避免系统启动崩溃由于priv-app应用在系统早期阶段就会加载必须特别注意避免在Application类中执行耗时操作谨慎处理多进程初始化顺序确保所有依赖的so库都存在于/system/lib/或/vendor/lib/目录一个典型的priv-app目录结构如下/system/priv-app/ └── SystemSettings/ ├── SystemSettings.apk └── lib/ └── arm64/ └── libsettings_jni.so3. /system/app/的标准之路平衡功能与安全对于不需要最高特权但仍需系统集成的应用/system/app/提供了更灵活的部署选择。这个目录的应用特点包括可以使用普通权限和部分签名权限仍然享受预装应用的各种优势更新策略相对灵活3.1 典型部署流程准备阶段确保应用支持多用户环境验证所有权限都在非特权范围内移除任何privileged权限声明构建配置 在Android.bp或Android.mk中添加LOCAL_MODULE : MySystemApp LOCAL_MODULE_CLASS : APPS LOCAL_MODULE_TAGS : optional LOCAL_MODULE_PATH : $(TARGET_OUT)/app LOCAL_SRC_FILES : MySystemApp.apk LOCAL_CERTIFICATE : platform # 或PRESIGNED LOCAL_PRIVILEGED_MODULE : false include $(BUILD_PREBUILT)安装验证 检查应用是否出现在adb shell pm list packages -s3.2 与用户安装应用的差异对比特性/system/app/应用用户安装应用安装位置系统分区数据分区卸载方式需要root或系统更新普通卸载更新机制需要OTA或系统更新应用商店直接更新存储访问默认共享UID资源独立沙箱环境启动顺序较早初始化按需启动4. /system_ext/app/的革新Android 10的灵活部署方案Android 10引入的system_ext分区为解决系统应用更新难题提供了新思路。这个特殊目录的价值在于允许厂商在不修改/system分区的情况下更新系统应用保持与系统组件的兼容性支持AB分区设备的无缝更新4.1 配置system_ext应用的要点分区声明 在device.mk中添加PRODUCT_SYSTEM_EXT_PROPERTIES ro.product.system_ext.namemy_system_ext应用部署 使用新的构建变量LOCAL_MODULE_PATH : $(TARGET_OUT_SYSTEM_EXT)/app权限管理 system_ext应用遵循与/system/app/相同的权限规则4.2 实际应用场景案例场景设备厂商需要为预装的天气应用添加新功能但不想等待完整的OTA更新。解决方案将天气应用迁移到/system_ext/app/通过厂商应用商店推送更新到/system_ext/分区用户获得新功能而无需完整系统更新更新流程伪代码def update_system_ext_app(package_name, new_apk): if is_system_ext_partition_mounted(): uninstall_old_version(package_name) install_to_system_ext(new_apk) restart_application(package_name) else: schedule_update_on_next_reboot()5. 实战决策如何为你的应用选择正确路径面对三个目录选项开发者需要综合考虑多个维度决策矩阵考量因素/system/priv-app//system/app//system_ext/app/需要特权权限✓✗✗系统核心功能✓✓✗频繁更新需求✗✗✓兼容性要求最高高中等调试难度最难中等较易目标版本所有Android版本所有Android版本Android 10典型选择策略如果是设备核心功能如电话、设置选择priv-app如果是基础但非核心应用如计算器、录音机选择/system/app/如果需要定期功能更新如厂商定制应用优先考虑system_ext在最近的一个车载系统项目中我们将导航核心服务放在priv-app音乐播放器放在system/app而天气、股票等可更新组件放在了system_ext。这种分层设计既保证了关键服务的稳定性又为常用功能提供了更新灵活性。

相关文章:

给App开发者的冷知识:你的应用想进系统分区?聊聊/system/priv-app/、/system/app/和/system_ext/app/的门槛

Android系统分区应用部署指南:从/system/priv-app/到/system_ext/app/的深度解析 在Android生态系统中,系统分区应用的部署策略一直是开发者们关注的焦点。不同于普通应用商店分发的APK,能够进入系统分区的应用往往意味着更高的权限、更深的系…...

Win11Debloat:让Windows系统重获新生的优化工具,释放30%系统性能

Win11Debloat:让Windows系统重获新生的优化工具,释放30%系统性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other change…...

终极风扇控制指南:免费开源工具让你完全掌控PC散热系统

终极风扇控制指南:免费开源工具让你完全掌控PC散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

如何用Tiny11Builder突破Windows臃肿限制,打造极致精简系统镜像

如何用Tiny11Builder突破Windows臃肿限制,打造极致精简系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder Windows系统臃肿问题困扰着无数开发者…...

多模态AI模型KV缓存优化:OxyGen框架解析与实践

1. 项目背景与核心挑战在人工智能领域,视觉-语言-动作多模态模型正成为研究热点。这类模型需要同时处理图像、文本和动作序列等多种模态的输入输出,典型应用包括具身智能体、机器人控制和交互式系统等。然而在实际部署时,我们发现一个关键瓶颈…...

保姆级教程:在Ubuntu 20.04上用Git和Qt Creator搞定Gitee代码同步(含SSH-Askpass报错解决)

Ubuntu 20.04下Qt项目与Gitee无缝集成的全流程指南 在Linux环境下进行Qt开发时,版本控制与远程仓库的协同工作往往成为新手开发者的第一个"拦路虎"。不同于Windows或macOS的图形化操作,Ubuntu系统下的Git配置需要更多命令行介入,而…...

GAAI框架:为AI编码工具引入治理层,实现可控的软件交付

1. 项目概述:一个为AI编码工具注入“纪律”的治理框架如果你和我一样,在过去一年里深度使用过Claude Code、Cursor、Windsurf这类AI编码工具,那你一定体验过那种“冰火两重天”的感觉。一方面,它们能瞬间生成代码、修复bug&#x…...

大模型 (LLM) 推理加速核心技术解析:从 KV Cache 到 PagedAttention 实战

大模型 (LLM) 推理加速核心技术解析:从 KV Cache 到 PagedAttention 实战 在 AI Infrastructure (AI Infra) 领域,大语言模型(LLM)的部署与推理优化是当前最具挑战性的方向。与传统的 CV 模型不同,LLM 的推理过程&…...

CyberpunkSaveEditor终极指南:深度解析《赛博朋克2077》存档编辑器的技术实现与应用

CyberpunkSaveEditor终极指南:深度解析《赛博朋克2077》存档编辑器的技术实现与应用 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor CyberpunkSaveEd…...

网盘文件直链解析工具LinkSwift:让下载回归简单纯粹

网盘文件直链解析工具LinkSwift:让下载回归简单纯粹 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

使用 Taotoken CLI 工具一键配置多开发环境下的 API 接入

使用 Taotoken CLI 工具一键配置多开发环境下的 API 接入 1. Taotoken CLI 工具概述 Taotoken CLI 是一个命令行工具,旨在简化开发者在不同环境或团队协作场景下的 API 接入配置流程。通过该工具,您可以快速将 Taotoken 的聚合端点地址和 API Key 写入…...

AMD Ryzen硬件调试终极指南:使用SMU Debug Tool优化处理器性能的完整教程

AMD Ryzen硬件调试终极指南:使用SMU Debug Tool优化处理器性能的完整教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项…...

初次使用Taotoken Python SDK调用模型完成视频创意任务的感受

初次使用Taotoken Python SDK调用模型完成视频创意任务的感受 1. 获取API Key与准备环境 在Taotoken平台注册账号后,控制台的API Key管理页面提供了清晰的创建指引。生成Key的过程非常直观,只需点击"新建API Key"按钮并填写描述信息即可获得…...

深度解析bitsandbytes编译安装中的CUDA版本匹配问题

深度解析bitsandbytes编译安装中的CUDA版本匹配问题 【免费下载链接】bitsandbytes Accessible large language models via k-bit quantization for PyTorch. 项目地址: https://gitcode.com/gh_mirrors/bi/bitsandbytes 在深度学习项目部署中,bitsandbytes作…...

为什么会出现缓存删除失败的情况

文章目录1. 物理环境与网络层故障(最常见)2. 应用程序异常崩溃3. 业务逻辑与时序冲突🛠 如何解决删除失败?(解决方案演进)方案 A:消息队列(MQ)重试机制(异步补…...

AutoCAD二次开发:用AutoLISP命令行和符号表,5分钟搞定图层、线型、字体样式自动化配置

AutoCAD二次开发实战:用AutoLISP实现图层与样式配置自动化 在工程设计领域,图纸标准化是团队协作的基石。每当启动新项目或接收外部图纸时,工程师们常陷入重复劳动——手动创建几十个图层、加载线型、配置文字样式。这种机械操作不仅耗时&…...

CefFlashBrowser:终极Flash浏览器 - 让经典Flash游戏重获新生的完整指南 [特殊字符]

CefFlashBrowser:终极Flash浏览器 - 让经典Flash游戏重获新生的完整指南 🎮 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在数字技术快速发展的今天,…...

如何用嘎嘎降AI处理毕业论文全文:整本上传一次性降AI知网达标操作完整教程

如何用嘎嘎降AI处理毕业论文全文:整本上传一次性降AI知网达标操作完整教程 关于毕业论文全文降AI教程,有几个细节提前知道,能少走很多弯路。 核心用嘎嘎降AI(www.aigcleaner.com),4.8元,达标率…...

ArcGIS、Global Mapper、MATLAB三剑客,手把手教你精准裁剪DEM高程TIF文件(附代码)

ArcGIS、Global Mapper与MATLAB:DEM裁剪实战指南与工具选型策略 引言 数字高程模型(DEM)作为地理信息系统中的基础数据类型,其精确裁剪直接影响地形分析的可靠性。面对市场上主流的ArcGIS、Global Mapper和MATLAB三大工具&#xf…...

Python ORM异常溯源实战(SQLAlchemy/Django Debug全链路拆解):从日志到执行计划的终极排查手册

更多请点击: https://intelliparadigm.com 第一章:Python ORM异常溯源的核心挑战与认知框架 在复杂业务系统中,Python ORM(如SQLAlchemy、Django ORM)的异常往往并非源于语法错误,而是由隐式状态、延迟加载…...

在 Claude Code 中配置 Taotoken 作为你的编程助手后端

在 Claude Code 中配置 Taotoken 作为你的编程助手后端 1. 理解 Claude Code 与 Taotoken 的对接原理 Claude Code 作为基于 Anthropic 模型的编程辅助工具,默认会直连 Anthropic 官方接口。通过 Taotoken 的 Anthropic 兼容通道,开发者可以将请求路由…...

微信网页版访问难题的终极解决方案:3步解锁浏览器聊天新体验

微信网页版访问难题的终极解决方案:3步解锁浏览器聊天新体验 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版频繁出现的&…...

嵌入式系统电源分析技术与实践优化

1. 嵌入式系统电源分析的核心价值在工业自动化、边缘计算和物联网设备领域,嵌入式系统的功耗表现直接影响着设备续航、散热设计和运营成本。传统开发流程中,工程师常犯的一个典型错误是简单累加各组件TDP(热设计功耗)来估算系统总…...

静态类型检查落地难?揭秘头部科技公司内部Python标注规范文档(含可直接复用的pyproject.toml模板)

更多请点击: https://intelliparadigm.com 第一章:静态类型检查落地难?揭秘头部科技公司内部Python标注规范文档(含可直接复用的pyproject.toml模板) Python 的动态特性赋予开发灵活性,却也让大型项目在协…...

别再搞混了!C++里printf和setprecision保留小数位的区别,看完这篇就懂

别再搞混了!C里printf和setprecision保留小数位的区别,看完这篇就懂 在C开发中,处理浮点数输出时经常遇到一个经典问题:如何精确控制小数位数?很多开发者会在printf格式化和iomanip的setprecision之间犹豫不决&#xf…...

Python数据融合效率提升300%:从Pandas到Polars,6步完成多源异构数据秒级对齐

更多请点击: https://intelliparadigm.com 第一章:Python数据融合教程 什么是数据融合 数据融合是指将来自多个异构源(如CSV、数据库、API、Excel)的数据进行对齐、清洗、关联与整合,生成统一、一致且语义完整的数据…...

2026年如何部署Hermes Agent/OpenClaw?8分钟阿里云新手安装及百炼Coding Plan步骤

2026年如何部署Hermes Agent/OpenClaw?8分钟阿里云新手安装及百炼Coding Plan步骤。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启…...

2026年5月阿里云集成OpenClaw/Hermes Agent教程,百炼token Plan配置攻略

2026年5月阿里云集成OpenClaw/Hermes Agent教程,百炼token Plan配置攻略。本文面向零基础用户,完整说明在轻量服务器与本地Windows11、macOS、Linux系统中部署OpenClaw(Clawdbot)的流程,包含环境配置、服务启动、Skill…...

别再为Java路径头疼了!手把手教你解决Neo4j Community 4.7.0在Windows上的经典安装报错

别再为Java路径头疼了!手把手教你解决Neo4j Community 4.7.0在Windows上的经典安装报错 当你在Windows系统上兴致勃勃地安装Neo4j Community 4.7.0,准备开始你的图数据库之旅时,突然遭遇"Invoke-Neo4j : Could not find java"这样的…...

cc 不能直接粘贴图片太麻烦?我写了一个小工具

这几天我一直在高频使用 Claude Code。 用着用着,我发现一个特别小、但特别烦的痛点: 在终端里给 AI 发图片,太麻烦了。 比如我截了一张图,想让 Claude Code 看一下。 正常直觉是什么?当然是复制图片,然…...