Android      aosp09-结合SystemProperties,通过NotificationManagerService拦截通知   
文章目录  [隐藏]

本例仍旧基于lineageos18.1(android 11, api 30)

1. NotificationManagerService

首先,NotificationManager,这里什么也没做,只看下怎么进到NMS的。
%lineage%/frameworks/base/core/java/android/app/NotificationManager.java


然后,是NotificationManagerService,虽然还有后续各种类,姑且在这里拦截吧。
%lineage%/frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java


NMS的启动是在SystemServer里,
%lineage%/frameworks/base/services/java/com/android/server/SystemServer.java 中有一句


2. SystemProperties

要想使用SystemProperties,必须是系统权限的app,然后,它操作的key必须是经过注册的,而且注册还是有作用域的-对作用域也要注册。
先说 怎么注册key:
%lineage%/system/sepolicy/private/property_contexts 插入1行

这里的“system_prop”就是作用域。SELinux权限的范畴。
同时 %lineage%/system/sepolicy/prebuilts/api/ 下有好几个以api版本数字命名的文件夹,要适配哪个版本的手机就进入哪个文件下,如本例
%lineage%/system/sepolicy/prebuilts/api/30.0/private/property_contexts ,同样的内容添加1行。

接着 注册作用域:
%lineage%/system/sepolicy/private/platform_app.te 中添加1行

同时 %lineage%/system/sepolicy/prebuilts/api/30.0/private/platform_app.te ,同样的内容添加1行。

3. 自己开发的app

首先 AndroidManifest.xml 里 application 节点增加属性 android:sharedUserId="android.uid.system"


然后 通过反射调用SystemProperties,但是后续既然要对app进行系统签名,所以 直接引入SystemProperties使用 应该也是可以的。


最后,把自定义签名文件发布release的apk文件(假设文件名 mytest.apk),放到 %lineageos%/packages/mytest/ 下,
并创建 Android.mk 文件


最最后 打开 %lineage%/build/make/target/product/handheld_product.mk ,把 ‘mytest’ 加入到 PRODUCT_PACKAGES 一项里。

4. 编译系统刷机

测试后,就可以打开mytest app通过 SystemUtil.getInstance().set("自定义的key", "able"); 或者 "disable",对这个app的通知进行控制了。


- end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设