android framework项目开发案例-动态隐藏Launcher上图标2
Posted learnframework
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android framework项目开发案例-动态隐藏Launcher上图标2相关的知识,希望对你有一定的参考价值。
上节课已经把代码写好了,可惜我们发现一点击就crash啦,因为CHANGE_COMPONENT_ENABLED_STATE权限需要系统权限才可以
2021-12-17 23:09:15.078 4198-4198/com.android.things.privateapplication1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.android.things.privateapplication1, PID: 4198
java.lang.SecurityException: Attempt to change component state; pid=4198, uid=10064, component=com.panzq.applicationb/com.panzq.applicationb.TcpMainActivity
at android.os.Parcel.readException(Parcel.java:2004)
at android.os.Parcel.readException(Parcel.java:1950)
at android.content.pm.IPackageManager$Stub$Proxy.setComponentEnabledSetting(IPackageManager.java:4732)
at android.app.ApplicationPackageManager.setComponentEnabledSetting(ApplicationPackageManager.java:2276)
at com.android.things.privateapplication1.MainActivity$1.onClick(MainActivity.java:51)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
怎么给与呢?
1、搞清楚这权限本身是什么保护程度
可以看出是平台签名或特权app级别的保护,即只要你是platform签名和priv-app就可以
2、授予权限
这里我们前面课程就已经学习过预制系统apk时候,其实是可以给指定签名的,这里我们只需要设置为platform签名既可以
这样就可以满足签名属于platform级别,就可以获取权限了
3、另一种方案是priv-app权限级别
这里priv-app,指的就是要预制到system/priv-app目录,原来我们是system/app,所以这里的话我们怎么实现预制到system/priv-app,其实很简单,只需要在mk加入一句话就可以
即加入:
LOCAL_PRIVILEGED_MODULE := true
这句就可以,但是大家注意哦,这里并没有完哦,我们还需要吧对应权限放入白名单里面,具体操作:
1 在frameworks/base/data/etc中的privapp-permissions-platform.xml进行一下我们的权限声明,这里我们可以参考其他应用是怎么声明的:
<privapp-permissions package="com.android.things.privateapplication1">
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
</privapp-permissions>
到此就吧两种权限授予方法都给大家实战了一下,如果需要学习更多framework只是和视频可以b站关注:千里马学框架,购买课程最好加入422901085群里找千里马要优惠和答疑
课程答疑和新课信息:QQ交流群:422901085进行课程讨论,加群主qq享受 优惠
FrameWork入门课视频链接:https://edu.csdn.net/course/detail/30298
FrameWork实战课1视频链接:https://edu.csdn.net/course/detail/30275
FrameWork跨进程通信视频链接:https://edu.csdn.net/course/detail/35911
专题博客系列:
Android 8.1 zygote 启动过程源码
Android Framework实战视频–Zygote的fork进程篇
Android Framework实战视频–SystemServer启动篇
Android Framework实战视频–SystemServer启动FallbackHome篇
Android Framework实战视频–FallbackHome进程启动及Activity启动篇
Android Framework实战视频–FallbackHome结束启动Launcher篇
Android Framework实战视频–BootAnimation的启动源码分析(Android8.1)
Android Framework实战视频–init进程的bootanimation启动源码分析(补充Android 10部分的BootAnimation的启动源码分析)
以上是关于android framework项目开发案例-动态隐藏Launcher上图标2的主要内容,如果未能解决你的问题,请参考以下文章
android framework项目开发案例-动态隐藏Launcher上图标2
android framework项目开发案例-动态隐藏Launcher上图标
android framework项目开发案例-动态隐藏Launcher上图标
Android Framework实战开发-binder通信常见使用方式,及案例分析