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",],//略....................