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;
    }

  4. 稍微"温柔"一点(只让安装流程放行)

    // 只针对系统安装器包名
    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 无法持有。

相关推荐
开维游戏引擎6 小时前
AI自动生成游戏时,deepseek和mimo对比
android·游戏·语言模型·游戏引擎·ai编程
BreezeDove12 小时前
【Android】AS项目自动连接mumu模拟器配置
android
乐世东方客15 小时前
备份脚本记录(binlog文件+mysql+mongo)
android·数据库·mysql
私人珍藏库16 小时前
[Android] 视频下载鸟 v20.02 会员
android·人工智能·智能手机·app·工具·多功能
zh_xuan16 小时前
tv浏览网页工具
android·tv浏览网页
Carson带你学Android18 小时前
Compose 终于上线 FlexBox:换行与弹性伸缩 都轻松搞定!
android·composer
私人珍藏库18 小时前
[Android] 三维山水全景地图-3D地形全景观测地图
android·3d·app·工具·软件·多功能
dengyuezhe806018 小时前
《C++ 异常机制与智能指针:从原理到实现》
android·java·c++
Wonderful U18 小时前
Python+Django实战|企业办公用品申领管理系统:物资入库、库存预警、申领审批、归还登记、损耗统计、供应商对账
android·python·django
plainGeekDev18 小时前
网络状态监听 → ConnectivityManager + Flow
android·java·kotlin