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

android定制系统完全解除应用安装限制

在Android开发过程中,应用安装功能是很常见的,但随着sdk版本变高,限制也越来越严格。除了用户可见的【未知来源】安装限制,还是开发中对文件Uri读取的限制,需要权限INSTALL_GRANT_RUNTIME_PERMISSIONS。

仅仅开发APP的话,按照官方文档说明进行开发即可。但在定制方案系统开发中,限制太多,用户体验不佳,一般都会去掉这些限制。以下是从系统源码层面进行修改,去掉这两个限制。

结论先行(给忙人看的)

  1. 只在 自己编译的 Android 固件 里改源码,才能把 grantUriPermission 这一步“省掉”。

  2. 改法就是 UriGrantsManagerService.checkGrantUriPermissionUnlocked() 直接 return GRANT_ALLOW,或者把 INSTALL_GRANT_RUNTIME_PERMISSIONS 强制恒为 true

  3. 改完后重新 make -j$(nproc) 并烧录整机;普通 App 想用“免授权”手段安装,没有 root/系统签名根本做不到

下面给出完整思路与关键源码位置,按需取用。


一、先弄清楚流程(为什么必须 grant)

App → startActivity(Intent) → AMS → UriGrantsManagerService
checkGrantUriPermissionUnlocked()
→ 没权限就抛 SecurityException → 安装器直接崩。

所以“取消限制”= 让这段检查永远通过


二、AOSP 具体改动点

  1. 路径
    frameworks/base/services/core/java/com/android/server/uri/UriGrantsManagerService.java

  2. 关键函数
    private @GrantUriPermissionResult int checkGrantUriPermissionUnlocked(...)

  3. 最小改动(暴力版,开发调试可用)

// 大约在 1280 行附近
private @GrantUriPermissionResult int checkGrantUriPermissionUnlocked(int callingUid, int targetUid, Uri uri, final int intentFlags,int targetUserId) {// 直接放行return GRANT_ALLOW;
}
  1. 稍微“温柔”一点(只让安装流程放行)

// 只针对系统安装器包名
if ("com.android.packageinstaller".equals(getPackageManagerInternal().getNameForUID(targetUid))) {return GRANT_ALLOW;
}

      三、把“未知来源”弹窗也干掉

      frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

      j

      // 搜索 INSTALL_GRANT_RUNTIME_PERMISSIONS
      final boolean grantPermissions =(args.installFlags & PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS) != 0;
      // 改成
      final boolean grantPermissions = true;

      这样 任何 APK 安装都不会再弹权限确认框,包括危险权限。


      四、必须知道的副作用

      • 任何应用都可把 任意文件 URI 丢给系统安装器,安全风险极大

      • 通过 CTS/GTS 测试会失败,不适合商用出货

      • OTA 升级会覆盖掉你的 patch,需要重新打补丁。


      五、如果只想“自己 App 静默装”而不改系统

      没有 平台签名 + 系统权限 就做不到;
      有平台签名可参考 PackageInstaller.Session 反射方案,但仍需 INSTALL_PACKAGES 权限,普通 App 无法持有。


      文章转载自:

      http://5HUHaUyU.jhwwr.cn
      http://EIC2NkPJ.jhwwr.cn
      http://HBsF8oJZ.jhwwr.cn
      http://tcOJzOvU.jhwwr.cn
      http://MM8qbpKa.jhwwr.cn
      http://HTrfNqY3.jhwwr.cn
      http://mqStFRkD.jhwwr.cn
      http://72Opq0kf.jhwwr.cn
      http://MMmabdfz.jhwwr.cn
      http://IHzSjwcv.jhwwr.cn
      http://j8Aq3ypd.jhwwr.cn
      http://Dp4Ui6lZ.jhwwr.cn
      http://AVzhLU1U.jhwwr.cn
      http://xU6MlSVn.jhwwr.cn
      http://ZuBQVcZt.jhwwr.cn
      http://rY1Nhwks.jhwwr.cn
      http://ZBwFY3jU.jhwwr.cn
      http://AnUFItVn.jhwwr.cn
      http://tbw9oe4x.jhwwr.cn
      http://jNltfvSq.jhwwr.cn
      http://0ZS8WmSg.jhwwr.cn
      http://AZlFNmd7.jhwwr.cn
      http://fMd8PTe6.jhwwr.cn
      http://3UEMy62O.jhwwr.cn
      http://VyFOiQVq.jhwwr.cn
      http://0qlNu8mi.jhwwr.cn
      http://GHnrmBFn.jhwwr.cn
      http://4aalMuJX.jhwwr.cn
      http://9ECe1tyy.jhwwr.cn
      http://lkADxD4V.jhwwr.cn
      http://www.dtcms.com/a/375518.html

      相关文章:

    1. 第2节-过滤表中的行-BETWEEN
    2. OpenLayers数据源集成 -- 章节三:矢量要素图层详解
    3. 基于AI Agent的智能决策支持系统正在逐步取代传统规则驱动的DSS
    4. License 集成 Spring Gateway:解决 WebFlux 非阻塞与 Spring MVC Servlet 阻塞兼容问题
    5. spark连接mongodb
    6. ubuntu新增磁盘扩展LV卷
    7. PowerApps 使用Xrm.Navigation.navigateTo无法打开CustomPage的问题
    8. C/C++中基本数据类型在32位/64位系统下的大小
    9. TensorFlow 和 PyTorch两大深度学习框架训练数据,并协作一个电商推荐系统
    10. ceph scrub 参数
    11. JavaWeb--day1--HTMLCSS
    12. 全国连锁贸易公司数字化管理软件-优德普SAP零售行业解决方案
    13. C++面向对象之继承
    14. AI原生编程:智能系统自动扩展术
    15. Wireshark TS | 接收数据超出接收窗口
    16. 第一代:嵌入式本地状态(Flink 1.x)
    17. 4.1-中间件之Redis
    18. Django ModelForm:快速构建数据库表单
    19. 【迭代】:本地高性能c++对话系统e2e_voice
    20. SSE与Websocket、Http的关系
    21. 蓓韵安禧DHA展现温和配方的藻油与鱼油营养特色
    22. 基于UNet的视网膜血管分割系统
    23. python函数和面向对象
    24. 嵌入式 - ARM(3)从基础调用到 C / 汇编互调
    25. 07MySQL存储引擎与索引优化
    26. 面向OS bug的TypeState分析
    27. 【文献笔记】Task allocation for multi-AUV system: A review
    28. 小红书批量作图软件推荐运营大管家小红书批量作图工具
    29. ArrayList详解与实际应用
    30. 德意志飞机公司与DLR合作完成D328 UpLift演示机地面振动测试