android通過adb push apk放置目錄/sdcard/Download/下無法安裝

本文通過對源碼進行追蹤,并且調試各種方式,得出android通過adb push apk放置目錄/sdcard/Download/下無法安裝的原因,并從兩個修改點觸發,提出如何能修復此問題的建議。

1. 現象

把apk通過adb push的方式放在/sdcard/Download文件夾下,
(1)直接打開File(DocumentUI),直接進入Download文件夾, 點擊應用無法安裝
(2)點擊左上角,選擇Device -> Download,進入之后Download文件夾, 點擊應用可以安裝。

2. 分析

trace代碼,判定這是android正常的設計,目的是確保下載APK的來源是經過用戶同意后才能允許安裝。
(1)當APK下載保存到設備后,MediaProvider數據庫會保存apk的來源(owner_package_name),
比如 通過adb push的方式owner_package_name=com.android.shell;通過chrome瀏覽器下載的方式owner_package_name=com.android.chrome
(2)進入安裝流程,區別在于發起源不同:
a. Files -> P3000 -> Download 是通過package:com.android.documentsui直接啟動com.android.packageinstaller
b. Files -> Download 是package:com.android.documentsui轉給package:com.android.providers.downloads.ui再啟動com.android.packageinstaller

而在b的情況下,
系統會將apk對應的路徑會從 下載未安裝:raw:/storage/emulated/0/Download/XXX.apk 變為 下載已安裝:msf:1000000044(數字為系統分配),這樣做是因為android文件系統為了優化訪問性能
在這個優化過程中,改變之前可以正常安裝,改變之后安裝需要驗證來源的權限:
比如:使用chrome下載
在這里插入圖片描述

如果是通過shell放入至設備,com.android.shell并沒有申請Manifest.permission.REQUEST_INSTALL_PACKAGES的方式,所以安裝就被攔截了;
同樣,本地驗證通過Settings -> Connected devices -> USB -> File Transfer的方式將APK放入Internal shared storage -> Download 安裝同樣也會被攔截;
這是因為有些進程沒有UI申請Manifest.permission.REQUEST_INSTALL_PACKAGES的方式。

3. 結論

(1)確保Download文件夾中APK的來源是通過下載的方式
(2)其他方式存入設備的APK不要存放在Download文件夾

4. 修復方案

(1)不攔截
未知來源的APK,在兩種情況下會攔截安裝
a. originatingUid所對應的apk(也就是APK的來源)的targetSdkVersion < 0
b. originatingUid所對應的apk(也就是APK的來源)未申請權限Manifest.permission.REQUEST_INSTALL_PACKAGES

Index: frameworks/base/packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java
============================

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84008.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot整合PF4J:構建動態插拔的組件化架構

前言 在當今快速迭代的軟件開發領域,業務需求的頻繁變更對系統架構的靈活性和可擴展性提出了極高要求。傳統的單體應用架構在面對功能的不斷新增和修改時,往往會陷入代碼臃腫、維護困難、擴展性差的困境。組件化開發,為解決這些問題提供了新的思路,通過實現組件的動態插拔…

剃須效率低?電鑄多孔刀網設計如何提升毛發捕捉率

剃須效率低下常源于刀網對毛發的捕捉能力不足——傳統沖壓刀網因孔型單一、邊緣毛刺等問題&#xff0c;導致胡須滑脫或拉扯。而電鑄多孔刀網通過精密工藝革新&#xff0c;將毛發捕捉率提升40%以上。其核心優勢在于三維立體孔型設計與微米級精度控制&#xff0c;以下是技術解析&…

進一步了解git

1、什么是集中式&#xff1f;什么是分布式&#xff1f; SVN&#xff08;集中式&#xff09; 單一中央倉庫&#xff1a;所有代碼和歷史版本集中存儲在中央服務器&#xff0c;用戶本地僅保存當前工作副本。 強依賴網絡&#xff1a;提交、查看歷史等操作需實時連接服務器&#xf…

一、react18+項目初始化

npx create-rect-app 項目名稱配置antd design mobile // 安裝 npm install --save antd-mobile // 在文件中直接引入使用 import { Button } from antd-mobile <Button></Button>更改webpack配置 // 1.安裝必要的包 npm install craco --save-dev // 2.修改pack…

Azure 資源清單

Azure 資源清單 作用前置條件安裝PowerShell 7.0驗證 Azure資源清單安裝配置如果有舊版本&#xff0c;導致新模塊安裝不上&#xff0c;進行強制安裝 PowerShell 登錄到 Azure基本命令輸出詳細信息效果圖展示 作用 官方文檔&#xff1a;https://github.com/microsoft/ARI?tabr…

S11的含義-信號完整性分析

S11的含義: PCB上的互連結構是線性無源的&#xff0c;在傳輸信號時激勵源只有一個&#xff0c;即驅動器發出的信號。如果正弦信號從端口1進入&#xff0c;根據S11定義&#xff0c;S11表示端口1出來的正弦信號和端口1進入的正弦信號的比值。工程上通常把S11稱為回波損耗(Return …

基于OpenCv(開源計算機視覺庫)的圖像旋轉匹配

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習軟件庫&#xff0c;具有跨平臺特性&#xff0c;廣泛應用于工業檢測、醫療影像分析、自動駕駛、無人機、機器人視覺等多個領域。 本項目解決了圖像模板匹配時的旋轉問題。傳…

Elasticsearch Open Inference API 新增對 Cohere 的 Rerank 3 模型支持

作者&#xff1a;來自 Elastic Serena Chou 及 Max Hniebergall 了解 Cohere reranking&#xff0c;如何將 Cohere 的 Rerank 3 模型與 Elasticsearch 的 open inference API 一起使用&#xff0c;以及 Elastic 在語義 reranking 方面的路線圖。 注&#xff1a;原文在 2024 年 …

九日集訓第六天

目錄 兩個數對之間最大的乘積差 三角形的最大周長 數組拆分 救生艇 擺動排序|| 分發餅干 最少操作使數組遞增 使數組唯一的最小增量 有效三角形的個數 兩個數對之間最大的乘積差 class Solution { public:int maxProductDifference(vector<int>& nums) {so…

【軟件工程】Waitress + Nginx 部署 Python Web 服務

下面是完整的 Windows 系統部署方案,使用 Waitress 作為 WSGI 服務器運行 Python 后端,Nginx 作為反向代理同時提供前端服務: 項目結構 text 復制 下載 myapp/ ├── backend/ # Python后端 │ ├── app.py # Flask應用入口 │ ├──…

JS數據類型檢測方法總結

在 JavaScript 中&#xff0c;數據類型檢測是開發中的常見需求。以下是主要檢測方法及其優缺點&#xff1a; 1. typeof 操作符 最基礎的檢測方式&#xff0c;返回類型字符串&#xff1a; typeof 42; // "number" typeof "hello"; // &qu…

AEO:從搜索引擎到答案引擎,AI時代搜索優化的新戰場

在 ChatGPT、DeepSeek、Google SGE 等生成式AI崛起的時代&#xff0c;搜索正在經歷一場根本性變革&#xff1a; 過去&#xff1a;搜索引擎優化&#xff08;SEO&#xff09; 現在&#xff1a;答案引擎優化&#xff08;AEO&#xff09; 當搜索結果開始由AI直接生成“答案”而非…

搭建Node.js服務器

1.基礎HTTP服務器: 添加了路由處理添加了404錯誤處理添加了服務器錯誤監聽 2.靜態資源服務器: 使用異步文件操作支持目錄自動索引(默認加載 index.html)自動檢測文件類型并設置正確Content-Type更完善的錯誤處理 3.處理GET請求參數 提供了一個HTML表單用于測試使用url模塊…

Linux grep 命令

grep 是 Linux/Unix 系統中用于文本搜索的強大工具&#xff0c;支持基于正則表達式的模式匹配。以下是其詳細用法及實際應用示例&#xff1a; 基本語法 grep [選項] 模式 [文件...]模式&#xff1a;要搜索的字符串或正則表達式。文件&#xff1a;可以是單個文件或多個文件&…

oracle 11g通過rman做備份和還原

ORACLE RMAN增量備份完整恢復測試 1.創建測試環境: 1.1.創建測試表空間 SQL> create tablespace tablespace1 datafile ‘/data/u01/app/oracle/oradata/orcl/tablespace1.dbf’ size 10m; SQL> 1.2.創建測試用戶并指定為默認表空間: SQL> create user user1 iden…

為什么TCP有粘包問題,而UDP沒有

TCP粘包問題源于其面向字節流的設計&#xff0c;而UDP無此問題因其基于數據報的傳輸機制。 &#x1f50d; 一、TCP粘包問題的原因 字節流傳輸特性 TCP將數據視為連續的字節流&#xff0c;而非獨立的消息包。發送端多次寫入的小數據可能被合并為一個TCP段發送&#xff1b;接收端…

ELM:Embodied Understanding of Driving Scenarios

1. ELM 的創新點與核心思路 ELM 的核心在于 “具身理解”(Embodied Understanding),即通過常識與環境交互并進行推理,這一理念適用于自動駕駛車輛、機器人和無人機等多種應用場景。具身智能體(Embodied Agent)需具備四大核心能力:首先,它能夠描述周圍環境,對交通物體的…

實景VR知識科普

實景VR的定義與技術特點 實景VR&#xff0c;即基于真實場景的虛擬現實技術&#xff0c;是通過計算機生成的三維環境&#xff0c;旨在模擬并再現真實世界場景。用戶佩戴VR設備&#xff08;如VR頭盔、手柄等&#xff09;后&#xff0c;能夠沉浸在一個高度仿真的虛擬環境中&#…

CppCon 2016 學習:ITERATOR HAIKU

這組幻燈片講解了 C 中**范圍&#xff08;Ranges&#xff09;和迭代器&#xff08;Iterators&#xff09;**的核心概念&#xff0c;特別是 C14 標準定義的五種迭代器類別&#xff0c;以及范圍的基本使用方式。我幫你理個思路&#xff1a; 1. RANGE-SEQUENCE: 元素范圍&#xf…

開源飛控fmt軟件在環仿真環境搭建

tags: 飛控 fmt開發環境搭建 fmt是國產開源飛控&#xff0c;特點是支持基于模型設計&#xff08;基于simulink仿真&#xff09;&#xff0c;源碼結構目錄較清晰&#xff0c;項目體積較小。 此項目操作系統選擇的是國產實時操作系統rt-thread&#xff0c;也是開源項目。&#…