Android 8.1.0 源码修改之 - 给自己预置到系统的预置应用添加一些默认权限

Android12 授予APK默认权限 Android12 权限适配 阅读详情

        因为项目中需要预置很多第三方应用,每当刷机完成之后,这些第三方应用进程只要启动,就会弹一些弹窗请求权限(比如某度输入法需要定位权限、读取联系人、访问SD卡等等权限,暂且不说他们是不是没必要请求这些权限,当系统启动起来弹一些这些东西,用户体验很不好。所以当前需要把这些权限的东西都给他们默认赋上,优化用户体验)。基于以上,我们需要在预置这些应用到系统之后,在framework对应的包中做一些修改。

        其实只需要修改一个类就可以了,这个包所在的位置:

folder\frameworks\base\services\core\java\com\android\server\pm\DefaultPermissionGrantPolicy.java

        首先找到这个类的方法 grantDefaultSystemHandlerPermissions(int userId) ,看这个方法的名字就很清楚了,这个方法是给系统默认的应用(用户)授权的。那在这个方法中命名并添加我们自己的方法  grantPermissionsToCustomApp(int userId),并模仿这个方法中授权的方式,给我们自己的应用授权:

    //声明百度输入法的包名
    private static final String PCK_NAME_BAIDU_INPUT = "com.baidu.input";

    /**
    *
    *给自己的自定义的应用授予一些权限
    */
    private void grantPermissionsToCustomApp(int userId){
        try{
            //add permission to baidu input method.
            PackageParser.Package customPackage = getPackageLPr(PCK_NAME_BAIDU_INPUT);

            if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
                grantRuntimePermissionsLPw(customPackage, LOCATION_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, STORAGE_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, CONTACTS_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, PHONE_PERMISSIONS, userId);
                grantRuntimePermissionsLPw(customPackage, MICROPHONE_PERMISSIONS, userId);}
           
            
        }catch(Exception e) {
            e.printStackTrace();
        }
    }

        这样就给了当前 user (默认的是 owner。其实只要是在这里授予了权限,其他无论 owner 创建其他的什么访客或者什么 user,在开机之后,这个预置应用都被授予了一些权限了)设置了这个应用所需的一些权限,优化了用户体验。

        当然有一点需要注意,这个方法要放到 grantDefaultSystemHandlerPermissions(int userId) 的    mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId); 方法之前调用执行。

 

 

 

Android系统权限配置 Android 权限控制代码分析 前在文章介绍过android系统管理层次:http://blog.csdn.net/andyhuabing/article/details/7030212 ,这里就核心代码分析一下 android系统充分利用了linux的用户权限管理方法,所以如果需要移植到其它系统,这一块也是一个相当不小的工作量。那么android系统到底是如何使用这些的有利因素 阅读详情

相关推荐

Android 开机权限默认授予Runtime权限

背景:这几天在处理关于工厂测试app的授权问题,按照之前的把权限添加到权限白名单方式,使用app时,依然会发现无法打开录音,照相机等功能,去setting查看app权限管理,发现这些权限没有授予。现在问题解决了 首先,前面我写了这个博客,Android 开机权限白名单默认授予系统app权限, 里面提到默认授权时 private void restorePermissionState(@NonNull AndroidPackage pkg, boolean replace, @Nullabl

csdnxialei的博客 4086

android 10 , android 11 预置系统应用权限开启分析

android 10 , android 11 预置系统应用权限开启分析 今天遇见的问题: 预装的应用 打开之后 申请了动态权限。 客户要求默认授予 优化体验 所以 问题就变成了 系统应用的权限如何默认开启 分析 通过源码分析 在frameowork中 有专门的Grant permmsion机制 android 10 DefaultSystemDialerApp为例 观察流程 frameworks/base/services/core/java/com/android/server/pm/permis

研究员的自我修养 3681

Android13预置应用权限配置与实战问题解析

本文深入解析了在Android13系统中预置应用权限配置的完整流程与实战问题。针对Android13收紧的隐私安全策略,文章详细介绍了如何为特权应用创建专属的权限声明文件与默认授予文件,并编写正确的Android.mk编译脚本。通过一个车载对讲应用的实际案例,分享了从APK放置、权限配置到系统集成的全步骤,并重点剖析了开机卡死、应用闪退、权限拒绝等常见问题的排查与解决方案,为Android系统开发工程师提供了宝贵的实战指南。

weixin_28314575的博客 248

android 权限默认授予,AOSP 权限的默认授予

AOSP 权限的默认授予环境Android 8.1Android的权限等级分为normal,dangerous,signature,signatureOrSystemnormal是在AndroidManifest中声明即可获取的低风险权限;dangerous是需要在获取时提示用户的高风险权限,也就是Runtime权限;signature是request权限的app和声明权限的app签名一致的时候才...

weixin_39581972的博客 1586

Android系统预置APK实战指南:从普通应用到特权应用全解析

在Android系统开发中,应用预置是一项基础且关键的技术,它涉及将应用程序直接集成到系统镜像中,实现开箱即用的用户体验。其核心原理在于通过修改系统分区和编译配置,使应用获得不同的权限级别和安装位置。这项技术的价值在于满足设备厂商的品牌生态构建、企业设备的安全管控以及系统功能完整性等需求,广泛应用于定制ROM、企业移动管理(EMM/MDM)和运营商定制机等场景。具体实践中,根据应用是否需要高级权限(如静默安装)或与系统核心服务深度集成,开发者可以选择将其预置为普通用户应用、特权应用或系统应用。其中,特权应用

weixin_34116482的博客 318

RK3588安卓系统开机自启动实战:从原理到系统应用配置全解析

在嵌入式系统与物联网设备开发中,开机自启动是确保设备上电后核心服务或界面能自动运行的基础需求,尤其在基于安卓系统的智能终端上。其实现原理涉及对安卓系统启动流程的深度理解,包括从Bootloader到Launcher的完整链条,以及如何在合适的环节插入自启动逻辑。从技术价值看,可靠的自启动机制直接关系到设备的可用性和用户体验,是工业平板、自助终端等“上电即用”场景的关键保障。常见的实现方案包括监听系统广播、配置系统服务以及利用平台特性等,其中将应用预置为系统特权应用并监听BOOT_COMPLETED广播的组合

anheku1562的博客 416

怎么给预置应用默认赋予动态权限?

[QUESTION] 怎么给预置应用默认赋予动态权限? [ANSWER] 请注意,我们给出的方案会导致google GTS权限相关的case测试失败!如果需要过GTS测试的话请不要使用该方案。     Android6.0上新加了runtime权限机制。Android对于normal型的权限在安装应用时会默认授予权限,而对于一些重要的dangerous权限如STORAGE、LOCA

wangjicong_215的博客 3447

Android系统级应用开发:深入解析sharedUserId与android.uid.system权限机制

在Android应用开发中,权限隔离与数据共享是构建安全、高效应用架构的核心基础。Android系统基于Linux内核的用户ID(UID)机制,为每个应用创建独立的沙箱环境,实现进程与数据的隔离。通过android:sharedUserId属性,开发者可以突破默认的沙箱限制,让多个应用共享同一个UID,从而实现深度的数据共享与权限继承。这一机制在系统级应用开发中尤为重要,尤其是android.uid.system这一特殊标识,它赋予应用与系统核心进程同等的权限级别,能够访问受保护的系统API、执行静默安装等

weixin_30902251的博客 328

Android系统定制中禁止权限弹窗的四种静默授权方案详解

在Android应用开发中,运行时权限模型是保障用户隐私安全的核心机制,其原理是通过ActivityManagerService和PackageManagerService在应用请求危险权限时触发系统弹窗进行用户确认。这一机制在自动化设备、Kiosk模式等专用场景下却成为阻碍,需要实现权限的静默授予以保障流程自动化。从技术价值看,静默授权能提升专用设备的部署效率和用户体验,是系统定制与ROM开发的关键需求。针对这一痛点,本文深入解析了四种主流解决方案:通过预置授权XML文件直接写入系统权限数据库、修改Pac

weixin_34378969的博客 420

Android开机自启与霸屏启动:从BOOT_COMPLETED到系统Launcher的完整指南

在Android应用开发中,开机自启动是一个常见但复杂的工程需求,尤其在信息发布终端、工业控制设备等场景中,实现应用开机后自动运行并全屏显示(即“霸屏”)至关重要。其核心原理涉及Android系统的应用启动层次与权限机制,从普通应用层到系统应用层,不同层级拥有不同的能力边界。普通应用通过BroadcastReceiver监听BOOT_COMPLETED广播实现自启,但受Android版本迭代(如Android 8.0的后台限制、Android 10的Activity启动限制)和厂商ROM定制的影响,稳定性面

weixin_33806914的博客 370

RK3588安卓开机自启动:从广播接收到系统服务的完整方案

在嵌入式安卓系统开发中,开机自启动是保障设备功能可靠性的基础需求。其核心原理在于理解安卓系统的启动流程,特别是从Init进程到System Server的初始化顺序,以及关键的ACTION_BOOT_COMPLETED广播发送机制。这一机制的技术价值在于为应用提供了系统就绪后的启动入口,但其在Android 8.0后引入了“应用需至少启动一次”的限制,对RK3588这类常用于商显、工业HMI的无头设备构成了挑战。因此,实现稳定自启动需要综合运用多种技术方案。从基础的静态广播接收器,到监听网络变化的迂回启动,

dianchamian8747的博客 411

Android 14 (AOSP) 系统级 APK 预置实战

在 Android 底层系统定制开发(如车载信息娱乐系统、物联网智能终端等硬件设备)中,厂商通常需要将特定的自研应用或第三方合作工具深度预置到系统镜像中。找到一个地位或形态相似的 Android 官方原生系统应用(例如 Settings 或 SystemUI),反向追踪官方是如何配置它的,然后依葫芦画瓢进行仿写。掌握科学的源码检索策略,以及“面向真机排查”的逆向思维,是提升底层开发效率的关键。AOSP 的构建系统(Soong/Ninja)是一个极其庞大的机器,它遵循严格的“按需生产”逻辑。

gede7890的博客 362

Android系统集成讯飞语音引擎全流程:从权限配置到TTS调用实战

本文详细解析了将讯飞语音引擎深度集成到Android系统的全流程,涵盖从权限配置、编译脚本编写到TTS调用实战。重点讲解了如何避免授权异常等常见问题,通过修改系统配置将其设为默认TTS引擎,并提供完整的代码示例与问题排查清单,助力系统开发者实现稳定、可用的语音合成功能。

grafana6viz的博客 297

测试开机启动脚本全面测评,Android 8.0适配表现如何

本文介绍了如何在星图GPU平台上自动化部署'测试开机启动脚本'镜像,高效适配Android 8.0系统。该镜像支持在工业终端、车载设备等场景中实现设备上电后自动执行初始化服务,保障业务连续性与系统可用性,显著提升固件开发与OEM定制效率。

weixin_29607511的博客 664

RK3588安卓开机自启动:从广播到init.rc的嵌入式实战方案

在嵌入式系统开发中,开机自启动是实现设备专用化与无人值守运行的核心机制。其原理在于系统初始化后自动加载指定应用或服务,确保关键业务逻辑的持续执行。这一技术对于智能终端、工业控制等场景具有重要价值,能显著提升设备的可靠性与用户体验。在RK3588这类高性能AIoT平台上,实现稳定自启动常需权衡系统权限与启动时机。常见方案包括利用标准安卓广播、将应用预置为系统应用,或通过底层init.rc脚本直接启动。其中,涉及SELinux策略配置与系统签名等关键环节,是保障方案稳定性的基础。本文聚焦RK3588平台,深入探

anheku1562的博客 468

Android 13 将移植到AndroidStudio 的Launcher apk替换掉源码中的Launcher,让其预置到系统中

之前说了很多关于Launcher移植定制等系列,最终定制的Launcher还是需要预置到系统中,这篇我们说下Launcher如何预置到系统中。上述问题说明上面的权限文件privapp-permissions-custom.xml没有配置,或者没有配置齐全,再按照上述的配置仔细核对下。3.在该目录下privapp-permissions-custom.xml文件,如下是文件内容。2.将您的 APK 文件放入该目录,重命名为。这里我是参考原先的Launcher中的内容,如下是参考位置。

龚礼鹏的博客 167

android 预置桌面上的应用程序图标、快捷方式图标或者窗口小部件

请修改res/xml/default_workspace.xml文件,添加如下代码:         launcher:packageName="" //完整的包名         launcher:className=""      //完整包名.类名(处理main intent的类)         launcher:screen=""            //应用图标所在的屏幕(

曹浩洋的专栏 1771

Android 9 imx8mm 预安装程序和开机自启修改记录

对imx8mm的开发板进行app预安装,然后开机自动运行

习惯就好zz的专栏 365
上一篇: Android 8.1.0 源码修改之 - 屏蔽 Home 按键
下一篇: Android 开发之 - 程序异常退出处理 CrashHandler 的使用
Water_Marking
博客等级 码龄11年 18粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值