Android 解析软件包时出现问题 -- Error staging apk from content URI

2023-11-13

Android Version : 8.1

使用场景 : 在Rk3288w Android 8.1 的测试设备上安装 "文件管理器" 应用程序 , 若打开***.apk文件,会出现  解析包错误  提示,即安装失败,影响使用.

 如下为ActivityManagerService.java 中的Log信息.

06-29 08:37:56.559 W/ActivityManager(  369): For security reasons, the system cannot issue a Uri permission grant to content://com.example.filetest.fileprovider/root_path/D007-6A31/Android_APK/weibo.apk [user 0]; use startActivityAsCaller() instead
06-29 08:37:56.561 E/ActivityManager(  369): getPackageFerformanceMode--ComponentInfo{com.android.packageinstaller/com.android.packageinstaller.InstallStart}----com.android.packageinstaller

最终 错误信息 的Log.

06-29 08:37:56.768 W/ActivityManager(  369): Permission Denial: opening provider androidx.core.content.FileProvider from ProcessRecord{91d037 1469:com.android.packageinstaller/u0a14} (pid=1469, uid=10014) that is not exported from UID 1000
06-29 08:37:56.759 E/hwc_rk  (  236): hwc_get_handle_layername:cann't get value from gralloc
06-29 08:37:56.768 W/InstallStaging( 1469): Error staging apk from content URI
06-29 08:37:56.768 W/InstallStaging( 1469): java.lang.SecurityException: Permission Denial: opening provider androidx.core.content.FileProvider from ProcessRecord{91d037 1469:com.android.packageinstaller/u0a14} (pid=1469, uid=10014) that is not exported from UID 1000
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.os.Parcel.readException(Parcel.java:2013)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.os.Parcel.readException(Parcel.java:1959)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:4758)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.app.ActivityThread.acquireProvider(ActivityThread.java:5836)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2526)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1780)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1394)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1247)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.content.ContentResolver.openInputStream(ContentResolver.java:967)
06-29 08:37:56.768 W/InstallStaging( 1469):     at com.android.packageinstaller.InstallStaging$StagingAsyncTask.doInBackground(InstallStaging.java:180)
06-29 08:37:56.768 W/InstallStaging( 1469):     at com.android.packageinstaller.InstallStaging$StagingAsyncTask.doInBackground(InstallStaging.java:174)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.os.AsyncTask$2.call(AsyncTask.java:333)
06-29 08:37:56.768 W/InstallStaging( 1469):     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
06-29 08:37:56.768 W/InstallStaging( 1469):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
06-29 08:37:56.768 W/InstallStaging( 1469):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
06-29 08:37:56.768 W/InstallStaging( 1469):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
06-29 08:37:56.768 W/InstallStaging( 1469):     at java.lang.Thread.run(Thread.java:764)

根据Log中显示 ,主要是FileProvider权限不足以使用系统UID所导致.

结合ActivityManagerService中的Log,定位至:frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java

    int checkGrantUriPermissionLocked(int callingUid, String targetPkg, GrantUri grantUri,
            final int modeFlags, int lastTargetUid) {

    ****************************************************************
        // Bail early if system is trying to hand out permissions directly; it
        // must always grant permissions on behalf of someone explicit.
        final int callingAppId = UserHandle.getAppId(callingUid);
        if ((callingAppId == SYSTEM_UID) || (callingAppId == ROOT_UID)) {
            if ("com.android.settings.files".equals(grantUri.uri.getAuthority())
                || "com.example.filetest.fileprovider".equals(grantUri.uri.getAuthority())) {
                // Exempted authority for cropping user photos in Settings app
            } else {
                Slog.w(TAG, "For security reasons, the system cannot issue a Uri permission"
                        + " grant to " + grantUri + "; use startActivityAsCaller() instead");
                return -1;
            }
        }
    ****************************************************************
    }

有此可以看出来,AMS打出错误信息是因为 com.example.filetest 具有  android:sharedUserId="android.uid.system"  属性;

若按照Android 8.0 以上修改,默认拥有权限的只有   com.android.settings.files   其他均不授予权限,直接跳出方法.

故而解决办法如上,在 checkGrantUriPermissionLocked() 此方法中,添加包名,即可不跳出此方法,授予安装权限.

最后单编 framework 层 Push进机器中,问题解决.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 解析软件包时出现问题 -- Error staging apk from content URI 的相关文章

  • 如何让 MediaRouteSelector 显示可用的 MiraCast 和 Chromecast 设备?

    我正在尝试让我的媒体路由选择器同时显示 MiraCast 和 Chromecast 设备 我有一个 Chromecast 接收器应用程序 并且还使用 Android 中的演示 API 因此理想情况下 用户只需单击媒体路由器按钮并选择他们拥有
  • 如何将TabLayout与Recyclerview同步?

    我有一个TabLayout with Recyclerview这样当单击选项卡时Recyclerview滚动到特定位置 我也想要相反的过程 这样当Recyclerview滚动到特定位置 然后该特定选项卡会突出显示 例如 如果有 4 个选项卡
  • 鼠标在两个视图上移动,如何让它们都处理`ACTION_MOVE`事件

    我有两个视图 较大的一个在底部 较小的一个在顶部 如下图所示 现在我在 view1 view2 外部 上按鼠标 然后移动到 view2 我发现即使鼠标在移动过程中位于view2内部 view2也不会得到ACTION MOVE事件 只有vie
  • Android 重新启动我的 Activity

    我怎样才能做到这一点 单击按钮 mycontext finish 然后 重新开始 你可以尝试这个 MyActivity finish Intent intent new Intent MyActivity this MyActivity c
  • Android BuildConfig 字段错误生成字符串

    在开始新项目的最后一天 我在构建配置中创建了一些变量 作为在发布和调试构建之间单独处理它们的好习惯 如下所示 buildTypes release minifyEnabled false buildConfigField String PA
  • 将 Android 应用程序部署到手机:错误:[install_itemfolder_01] 错误 1 ​​Windows

    我已经安装了我可能需要的所有组件 我已经上网两天了 但找不到这个问题的答案 我检查了我的 apache ant javac java JRE JDK Qt 变量一切正常 Qt 喜欢我的所有设置 除了当我尝试将应用程序部署到模拟器或设备时出现
  • GCM 条款和条件

    有谁知道在哪里可以找到有关哪些内容可以通过 GCM 通知发送以及哪些内容不可以发送的条款和条件 我似乎在任何地方都找不到任何文档 当您注册开设 Google API 帐户时 您会得到这些条款和条件 https developers goog
  • 以编程方式创建进度绘制

    我有一个场景 我需要有大量的进度条可绘制对象 我无法为所有这些创建 xml 资源 因为我希望用户选择一种颜色 然后用于动态创建可绘制对象 下面是 xml 中的一个这样的可绘制对象 我如何以编程方式创建这个精确的可绘制对象
  • 使用自定义布局时 AlertDialog 按钮不可见

    我想要在弹出窗口中使用自定义布局 所以我使用了警报对话框 由于弹出窗口中的子视图数量是动态决定的 所以我使用了 ScrollView 现在 扭曲来了 当没有剩余空间并且滚动开始运行时 正向和负向按钮将变得不可见 下面是代码 AlertDia
  • Android - 如何创建布局选择器(如 ImageButton 选择器)

    我有一个 ImageButton 和一个包裹该按钮的 LinearLayout 如下所示
  • 如何提高加速度计和指南针传感器的精度?

    我正在创建一个增强现实应用程序 当手机面向兴趣点 GPS 位置存储在手机上 时 它可以简单地可视化文本视图 文本视图绘制在屏幕中的兴趣点位置上 它工作正常 问题是指南针和加速度计非常 变体 并且文本视图由于传感器的准确性而不断左右上下移动
  • 字符串包含相同的字符但仍然不同[重复]

    这个问题在这里已经有答案了 我正在尝试读取一个 txt 文件并使用每个句子作为团队的名称 同时使用该名称查找另一个 txt 文件以获取其内容 所有 txt 文件都位于我的资产文件夹的根目录中 第一个 txt 文件工作正常 我使用assetm
  • 在 Android 中下载文件

    我正在使用以下代码在 Android 中下载文件 public class FileDownloadActivity extends Activity ProgressDialog mProgressDialog Called when t
  • Intent.ACTION_DIAL 号码以 # 结尾

    所以我尝试通过以下方式发送号码Intent ACTION DIAL以 结尾 例如 123 但是当Android Dialer应用程序启动时 只有 123 不见了 我正在使用以下代码来触发 Android 的拨号应用程序 Uri number
  • 当按下 flutter 中编写的按钮时,有没有办法运行 python 脚本?

    本质上 我想做的是 按下我在 Flutter 中编程的按钮 当按下该按钮时 Python 脚本应该开始在我的 Android 设备上运行 我想在 python 中使用 youtube dl 用于下载 Youtube 视频 库 但我想知道是否
  • 如何反序列化数组 google-gson 内的数组

    我有这样的 JSON Answers Locale Ru Name Name1 Locale En Name Name2 Locale Ru Name Name3 Locale En Name Name4 正如你所看到的 我的数组里面有数组
  • 如何:获取 AVD 的端口号并向其自身发送消息

    我该如何执行以下操作 获取我的 AVD 的端口号 从我的代码而不是命令行 使用步骤 1 中获得的端口号从 AVD 向自身发送消息 这是可能的 模拟器可以给自己发送短信吗 https stackoverflow com questions 8
  • 如何启用 Genymotion 模拟器使用主机正在使用的 WIFI 互联网

    我在 Genymotion 模拟器上运行的应用程序需要互联网 互联网似乎无法在 Genymotion 模拟器上运行 我试图通过打开浏览器来确认这一点 这就是我得到的 我在我的笔记本电脑上运行 Windows 7 并使用 Wifi 互联网 我
  • pytube 在 Android 中传输视频所需的时间太长

    我在用pytube在 Android 中流式传输视频 借助chaquopy 视频文件 py from pytube import YouTube def video link yt YouTube f https www youtube c
  • SecurityException: getSerial: 用户 10134 不满足访问设备标识符的要求

    我想从 Android 手机获取 Build getSerial 在 Android O 之前 我需要 Manifest permission READ PHONE STATE 权限 但是在 Android 10 中我遇到了上述异常 我所做

随机推荐

  • 从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3

    上一篇我们已经讲了如何搭建一个多线程的服务器模型 可以支持多个客户端同时连接服务器 本篇我们来实现多个客户端 如何实现向服务器注册信息 并实现登录的功能 想了解更多Linux 编程知识 请关注 公众号 一口Linux 数据结构 接着上一篇的
  • Redis学习:哨兵模式

    主从切换技术的方法是 当主服务器宕机后 需要手动把一台从服务器切换为主服务器 这就需要人工干预 费事费力 还会造成一段时间内服务不可用 这不是一种推荐的方式 更多时候 我们优先考虑哨兵模式 一个典型哨兵模式 哨兵配置文件 sentinel
  • freeCAD part工作台,两个物体做合集相加的布尔组合先后顺序区别

    两个紧挨 空间尺寸上无缝隙 的物体 在part 工作台下做union的布尔操作 先选中和后选中的物体顺序还是有区别的 之前一直没注意 一直遇到问题才发现 例如有如图的2个物体 这里面的cut和fusion003已经做好了 现在我想把他组合到
  • c语言中英文转换器在线转换器,汉英转换器

    路由器之家网今天精心准备的是 汉英转换器 下面是详解 汉译英 英语是国际语言 因此我们非常重视英语的 English is an international language Thus we attach great importance
  • 深入学习jquery源码之isFunction()和isPlainObject()

    深入学习jquery源码之isFunction 和isPlainObject isArray obj 概述 测试对象是否为数组 参数 obj Object 用于测试是否为数组的对象 b append isArray b true b isF
  • 网关Netfilx Zuul:---(Eureka高可用操作)

    之前我们创建完成了3个Eureka的客户端的服务操作 你会发现我们还是没有能够通过微服来进行对他访问 还是必须通过自己服务的端口号来进行访问 那么我们的微服务是没有能够完成的 这个时候我们就需要通过网关进行操作 其实网关就是为客户端提供统一
  • 使用IntelliJ IDEA中的Spring Initializr来快速构建Spring Boot/Cloud工程

    我相信许多初学者都看了Spring Boot和Spring Cloud相关的博文中 都会涉及Spring Boot工程的创建的问题 而一般所看到的都是使用IntelliJ IDEA 工具来创建 并且方便许多 而创建的方式多种多样之前我是通过
  • 标签下载文件重命名失败,download 无效

    最近用到 a 标签实现文件下载并对文件进行重新命名 遇到了一些问题 文件重命名一直失败 所幸最终还是解决了 在此记录一下 避免后来者踩坑 HTML a 元素可以创建一个到其他网页 文件 同一页面内的位置 电子邮件地址或任何其他URL的超链接
  • 极验滑块识别-通用滑块识别

    遇到滑块问题 在写爬虫的时候 经常会遇到滑块问题 很多次都想过尝试如何攻破滑块 但是每次都没成功 除了最开始的极验滑块 当时通过原图和滑块图的对比 能够得出缺口坐标 但是随着极验 网易 腾讯滑块的更新 已经不能够找到原图了 下面给出滑块通杀
  • MATLAB中表示点形状、颜色的常见符号

    颜色字符串有 c m y r g b w 和k 分别表示青 红紫 黄 红 绿 白和黑 线型字符串有 为实线 为虚线 为点线 为点虚线 及 none 表示不用线型 标记形式有 o 和 x 填入 s 代表正方形 d 代表菱形 A 为上三角形 v
  • 2020第十一届蓝桥杯10月份省赛真题(JavaB组题解)

    2020第十一届蓝桥杯10月份省赛真题 JavaB组题解 试题 A 门牌制作 试题 B 寻找 2020 试题 C 蛇形填数 试题 D 七段码 试题 E 排序 试题 F 成绩分析 试题 G 单词分析 试题 H 数字三角形 试题 I 子串分值和
  • 代码质量的评价标准

    如何评价代码质量 代码质量的评价比较主观 一般会使用以下几个词汇 可读性 可扩展性 可维护性 灵活 优雅 可重用性 可测试性 这些是从不同方面来评价 但是各个维度都彼此关联 譬如可读性和可扩展性好 我们就说这段代码的可维护性比较好 代码质量
  • QT多线程下的信号与槽机制

    目录 1 QThread类 2 创建并启动线程 3 多线程信号与槽 4 信号与槽的调用线程 5 调整信号与槽所在线程的依附关系 6 信号与槽的连接方式 QT 中 QObject 作QT中类的最终父类 具有自定义信号与槽的能力 只要继承自这个
  • javaj经典程序编程50题

    JAVA基础编程练习50题 本文对50道经典的java程序题进行详细解说 对于初学者可以跳过一些逻辑性太强的题目 比如第一题用到了方法的递归 初学者可能不理解 最好先看那些有if for while可以简单解决的程序题 但是 对于比较深入学
  • 4键电子手表说明书_4键电子手表怎么调时间的方法

    现在除了很多喜欢购买机械表以外 还有很多人喜欢购买石英表 其中就有很多人购买了4键电子手表 但是很多人往往却并不知道4键电子手表怎么调时间 那么我们今天拿卡西欧4键电子手表为例子 给大家讲解以下4键电子手表怎么调时间 首先 我们可以轻松观察
  • Linux删除文件夹命令

    Linux删除文件夹命令 linux删除目录很简单 很多人还是习惯用rmdir 不过一旦目录非空 就陷入深深的苦恼之中 现在使用rm rf命令即可 直接rm就可以了 不过要加两个参数 rf 即 rm rf 目录名字 r 就是向下递归 不管有
  • milvus笔记01--部署测试版本 milvus

    milvus笔记01 部署测试版本milvus 1 milvus 简介 2 milvus cpu 部署 2 1 基于sqlite部署milvus 2 2 基于mysql部署milvus 3 常见命令 3 1 api 案例 3 2 RESTf
  • 使用 Github Action 将 github 仓库同步到 gitee

    背景 最近将 CI CD 流程改造了一波 使用 ArgoCD 做 gitops 这样所有的集群 Yaml 文件就都存放在了 github 上的一次仓库里 但是小服务器放在家里 从 github 上拉代码时总是时不时有网络问题 导致集群资源无
  • -1. HTML&CSS 基础总结

    HTML CSS Favorite 1 基础知识 1 HTML 1 1基本结构标签 1 骨架 2 排版标签 标题标签 h1 标题文本 h1 h1 gt h1 h6 段落标签 p 段落文本内容 p 水平线标签 hr 水平线 换行标签 br 换
  • Android 解析软件包时出现问题 -- Error staging apk from content URI

    Android Version 8 1 使用场景 在Rk3288w Android 8 1 的测试设备上安装 文件管理器 应用程序 若打开 apk文件 会出现 解析包错误 提示 即安装失败 影响使用 如下为ActivityManagerSe