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

Android系统开发 在Android10版本的Framework中添加系统服务

前言

  此博客讲解如何在Android10版本的framework中添加系统服务。 在framework中添加我们自己的定制服务在系统开发中特别有意义。

       大多数的设备开发场景,都会开发一个应用启动一个后台服务,预装到系统中,让他获得系统级权限,调用大多数的系统级服务以提供外包应用调用系统级功能。  但是,这种方式有一个问题,此应用依然不是运行在系统进程中,他依然是独立的进程。我们无法获得系统进程中的一些参数。如何解决这种需求呢?

   一些人会直接在ActivityManagerService、PowerManagerService、PhoneWindowManager 中直接修改或者增加代码,用广播的形式传递到应用层。但是这种方式问题很多,首先需要修改这些代码量超级多的原生服务,一不小心很容易出现问题。

  而最好的办法就是我们也添加一个系统级服务,提供给外部使用,而在这个服务中,我们可以通过直接调用相关服务实现需求。

第一步创建AIDL文件

创建位置:frameworks/base/core/java/android/os/IMySystemService.aidl

// IMySystemService.aidl
package android.os.device;interface IMySystemService {String getText(String aString);
}

第二步将AIDL文件添加到Android.bp中

文件路径:frameworks/base/Android.bp


java_defaults {name: "framework-defaults",installable: true,srcs: [// From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS"core/java/**/*.java","graphics/java/**/*.java","location/java/**/*.java","lowpan/java/**/*.java","media/java/**/*.java","media/mca/effect/java/**/*.java","media/mca/filterfw/java/**/*.java","media/mca/filterpacks/java/**/*.java","drm/java/**/*.java","opengl/java/**/*.java","sax/java/**/*.java","telecomm/java/**/*.java","telephony/java/**/*.java","wifi/java/**/*.java","keystore/java/**/*.java","rs/java/**/*.java",":framework-javastream-protos",//略............."core/java/android/speech/tts/EventLogTags.logtags","core/java/android/net/EventLogTags.logtags","core/java/android/os/EventLogTags.logtags","core/java/android/webkit/EventLogTags.logtags","core/java/com/android/internal/app/EventLogTags.logtags","core/java/com/android/internal/logging/EventLogTags.logtags","core/java/com/android/server/DropboxLogTags.logtags","core/java/org/chromium/arc/EventLogTags.logtags",":apex-properties",":platform-properties",":framework-statslog-gen",//在此处添加IMySystemService.aidl的路径"core/java/android/os/device/IMySystemService.aidl",],//略....................
http://www.dtcms.com/a/304646.html

相关文章:

  • 高级机器学习
  • Android 中 实现折线图自定义控件
  • BGP高级特性之ORF
  • spring 使用三级缓存解决循环依赖详解
  • 09 RK3568 Debian11 ES8388 模拟音频输出
  • 【腾讯云】EdgeOne免费版实现网站加速与安全防护
  • AI定义2025世界人工智能大会,腾讯/微美全息立足浪潮催生开源模型生态产业
  • 飞书 —— 多维表格 —— AI生成
  • 【术语扫盲】MCU与MPU
  • Spring框架中自定义标签的解析过程
  • 关于“高帧率放大了模型对位置噪声的敏感性”的理解
  • Kubernetes 全面解析:从基础设施变革到核心架构详解
  • Dify 从入门到精通(2/100 篇):Dify 的核心组件 —— 从节点到 RAG 管道
  • 利用 C# 实现 Word 文档多维度统计(字数、字符数、页数、段落数、行数)
  • 当 AI 重构审计流程,CISA 认证为何成为破局关键
  • 计算机视觉-图像基础处理
  • 双引擎驱动智能检索:混合搜索如何重构RAG系统底层逻辑
  • 智能健康项链专利拆解:ECG 与 TBI 双模态监测的硬件架构与信号融合
  • 算法提升之数论(矩阵+快速幂)
  • 隐藏文件行尾符CRLF
  • PostgreSQL缓冲区管理器
  • 2-verilog-基础语法
  • AI: 告别过时信息, 用RAG和一份PDF 为LLM打造一个随需更新的“外脑”
  • go install报错: should be v0 or v1, not v2问题解决
  • React图标库推荐与选择建议
  • 【Spring-cloud-OpenFegin源码解析】
  • VitePress学习笔记
  • 编程算法在金融、医疗、教育、制造业的落地应用。
  • 云服务器上基于lora微调Qwen2.5-VL-7b-Instruct模型之Lora微调代码讲解
  • Netty中InternalThreadLocalMap的作用