Android System Integration

MTK Android Vendor Native Daemon 系统集成

当前重点支持 Android 11、Android 16 与 MediaTek MTK 68 系列平台,在 Vendor 分区开发 Native Daemon,并完成开机自启动、IPC 和权限配置。

Vendor Native Daemoninit.rcUnix Domain SocketSELinuxAndroid.bp
Android Vendor Native Daemon 系统集成与启动流程图
点击图片查看完整流程图

Vendor Integration

Daemon 启动、IPC 与权限链路

展示 Native Daemon 从 Android.bp 编译、/vendor/bin 安装、init.rc 开机启动,到 Unix Domain Socket、SELinux、运行监控和 OTA 的完整路径。

  • Android 11 / 16 与 MTK 68 系列
  • init.rc / Unix Domain Socket / SELinux
  • 日志、异常重启与长期稳定运行

Engineering Flow

Vendor Daemon 编译、启动与通信流程

01

代码与编译集成

开发 C / C++ Native Daemon,配置 Android.bp 和 Vendor 依赖。

  • /vendor/bin
  • /vendor/lib64
  • Soong / cc_binary
02

init.rc 服务配置

声明 service、class、user、group、socket、seclabel 和触发条件。

  • 开机自动启动
  • Property 条件启动
  • 异常退出重启
03

Android init 启动

系统解析 rc,启动 Daemon,并由 init 创建 Unix Domain Socket。

  • init.svc 状态
  • Owner / Group / Mode
  • 启动时序
04

Unix Socket 通信

App / JNI / System App 连接 /dev/socket,Daemon 接收并处理请求。

  • connect / accept
  • read / write
  • 多客户端与重连
05

SELinux 权限控制

配置 Daemon Domain、Socket Type、App 映射与最小权限。

  • .te / file_contexts
  • seapp_contexts
  • mac_permissions.xml
06

运行与监控

输出日志、上报属性、监控进程并支持 OTA 与长期运行。

  • logcat / file
  • setprop / getprop
  • watchdog / crash analysis

Architecture

关键配置文件与职责

构建
Android.bpVendor 模块依赖动态库与头文件
启动
init*.rcservice / classuser / group / socket
SELinux
*.tefile_contextsproperty_contextsseapp_contextsmac_permissions.xml
通信
Unix Domain SocketJNI ClientNative ServerBinder / AIDL 可选
调试
logcatdmesgaudit / AVCps / getpropstrace

Troubleshooting

高频故障与定位方向

init.svc 一直 restarting

服务启动后立即退出或因依赖、权限、参数和资源问题循环重启。

  • 查看退出码
  • 核对动态库
  • 检查 SELinux AVC

Socket 存在但无法连接

文件权限并不等于 SELinux connectto 权限,需要同时检查 Domain 与 Type。

  • Owner / Group / Mode
  • connectto / accept
  • App Domain 映射

Property 或设备节点被拒绝

按 source domain、target type、class、permission 四元组分析。

  • property_contexts
  • character device
  • 最小权限策略

FAQ

常见问题与技术说明

围绕项目范围、技术边界、实施条件和交付内容进行说明。

Daemon 是否开机自动启动?

可以通过 Vendor init.rc 集成到 Android 启动流程,按 class 或 property 条件启动,并配置异常重启策略。

Unix Domain Socket 权限如何配置?

由 init.rc 创建 Socket 并设置 Owner、Group 和 Mode,同时通过 SELinux 规则允许指定客户端 Domain connectto。

是否会通过关闭 SELinux 解决问题?

不会以关闭 SELinux 作为量产方案。目标是分析 AVC 并收敛为满足业务所需的最小权限策略。