android 5.0 apk 安装失败提示INSTALL_FAILED_INVALID_URI

无线网调试下,成功用adb命令获取安卓log 4、PC端--win+R,打开命令窗口,输入adb pair ip:端口号,下面箭头中的ip地址和端口号,输入回车键。7、输入adb devices,显示 device,连接成功,可以进行下一步如输入 adb logcat命令。5、弹出,Enter pairing code: 此时输入 WLAN 配对码。6、输入命令 adb connect ip:端口号,此时显示连接。3、点击 无线调试--》使用配对码配对设备。2、开发者选项中-----打开 无线调试。1、打开安卓手机的开发者选项。 阅读详情

在android 5.0 项目上开发的时候,进入U盘目录,通过pm 命令安装apk,发现安装失败,提示apk路径不对。

安装log信息如下:

cd /mnt/usb/2D80-E3ED/APK_backup

shell@yjw:/mnt/usb/2D80-E3ED/APK_backup # pm install AndyKeyTest.apk      
        pkg: AndyKeyTest.apk
Failure [INSTALL_FAILED_INVALID_URI]

logcat信息:

01-01 08:20:49.955 D/AndroidRuntime( 2952): Calling main entry com.android.commands.pm.Pm
01-01 08:20:49.968 W/asset   ( 2734): Asset path /AndyKeyTest.apk is neither a directory nor file (type=1).
--------- beginning of system
01-01 08:20:49.968 W/DefContainer( 2734): Failed to parse package at /AndyKeyTest.apk: android.content.pm.PackageParser$PackageParserException: Failed to parse /AndyKeyTest.apk


通过log信息及测试发现,原来在android5.0中不能直接在u盘目录下执行pm install 安装apk ,必须到要在pm 命令带上apk所在路劲。更早的android版本没有这个要求

改为在根目录下,执行下面命令,则安装apk成功

shell@yjw:/ # pm install mnt/usb/2D80-E3ED/APK_backup/AndyKeyTest.apk
       pkg: mnt/usb/2D80-E3ED/APK_backup/AndyKeyTest.apk
Success


针对上面的问题,查看了一下源码,发现android 5.0 的parsePackage功能在细节上有一些更改,所以出现上面的情况。

相关代码如下:

PackageParser.java@

    /**
     * Parse only lightweight details about the package at the given location.
     * Automatically detects if the package is a monolithic style (single APK
     * file) or cluster style (directory of APKs).
     * <p>
     * This performs sanity checking on cluster style packages, such as
     * requiring identical package name and version codes, a single base APK,
     * and unique split names.
     *
     * @see PackageParser#parsePackage(File, int)
     */
    public static PackageLite parsePackageLite(File packageFile, int flags)
            throws PackageParserException {
        if (packageFile.isDirectory()) {
            return parseClusterPackageLite(packageFile, flags);
        } else {
            return parseMonolithicPackageLite(packageFile, flags);
        }
    }


DefaultContainerService.java@

        /**
         * Parse given package and return minimal details.
         *
         * @param packagePath absolute path to the package to be copied. Can be
         *            a single monolithic APK file or a cluster directory
         *            containing one or more APKs.
         */
        @Override
        public PackageInfoLite getMinimalPackageInfo(String packagePath, int flags,
                String abiOverride) {
            final Context context = DefaultContainerService.this;
            final boolean isForwardLocked = (flags & PackageManager.INSTALL_FORWARD_LOCK) != 0;

            PackageInfoLite ret = new PackageInfoLite();
            if (packagePath == null) {
                Slog.i(TAG, "Invalid package file " + packagePath);
                ret.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INVALID_APK;
                return ret;
            }

            final File packageFile = new File(packagePath);
            final PackageParser.PackageLite pkg;
            final long sizeBytes;
            try {
                pkg = PackageParser.parsePackageLite(packageFile, 0);
                sizeBytes = PackageHelper.calculateInstalledSize(pkg, isForwardLocked, abiOverride);
            } catch (PackageParserException | IOException e) {
                Slog.w(TAG, "Failed to parse package at " + packagePath + ": " + e);

                if (!packageFile.exists()) {
                    ret.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INVALID_URI;
                } else {
                    ret.recommendedInstallLocation = PackageHelper.RECOMMEND_FAILED_INVALID_APK;
                }

                return ret;
            }

            ret.packageName = pkg.packageName;
            ret.versionCode = pkg.versionCode;
            ret.installLocation = pkg.installLocation;
            ret.verifiers = pkg.verifiers;
            ret.recommendedInstallLocation = PackageHelper.resolveInstallLocation(context,
                    pkg.packageName, pkg.installLocation, sizeBytes, flags);
            ret.multiArch = pkg.multiArch;

            return ret;
        }


在旧安卓手机上部署Hermes Agent实现本地AI协作者 Hermes Agent是一种面向边缘终端的轻量级本地智能体运行时,其核心原理是将大模型推理、任务规划与工具调用全部下沉至设备端,无需云端API或数据上传。依托Termux构建的类Linux环境,它绕过Android图形栈限制,以纯CLI方式运行Python进程,显著降低硬件门槛与部署复杂度。该技术路径具备强隐私性、低功耗和高可控性,适用于废旧手机改造为离线AI助手、自动化文件处理、语音转写、本地知识库问答等场景。本文聚焦于在ARM64安卓设备(Android 10~12)上基于Termux+Python 阅读详情

相关推荐

安卓键值测试软件--KeyTest.apk

安卓键值测试软件--KeyTest.apk,可测试遥控器的键值,或物理按键的键值!!

预置第三方apk到MTK项目相关问题总结

原文链接 目前5.0之后项目预置方式通用步骤为: 建立apk文件夹; 置目标apk到该文件夹下; 解压缩apk查看是否包含lib/文件夹(apk项目是否包含lib库文件); 在该文件夹下编写Android.mk脚本 ; 理论上apk文件夹可以建立在项目内任意目录,编译系统会自动搜索并根据其内Android.mk (编译脚本) 来进行编译。 编译系统采用的是递归搜索,在搜索到父文件目...

ShoppingChen的博客 845

安卓键值测试软件 KeyTest 升级版

安卓键值测试软件,根据https://github.com/chrisboyle/keytest开源项目,二次更新的升级版,支持多行显示和自动滚动

Android 5.0 6.0 7.0 8.0 9.0 10.0 适配文件管理器应用安装

安装应用一般需要添加的权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses

wq892373445的博客 3679

android测试键值 apk

一个测试键值的apk,将apk安装到系统,操作键盘或者遥控器,会把相应键值打印出来 一个测试键值的apk,将apk安装到系统,操作键盘或者遥控器,会把相应键值打印出来

keytest,安卓 查看实体键键值的工具

安卓 查看实体键键值的工具,scancode就是键值。

Apk安装失败

这样的问题主要是签名冲突造成的,比如你使用了ADB的debug权限签名,但后来使用标准sign签名后再安装同一个文件会出现这样的错误提示,解决的方法除了只有先老老实实从手机上卸载原有版本再进行安装,而adb install -r参数也无法解决这个问题。如果是apk包,请重新下载。4、INSTALL_FAILED_INVALID_INSTALL_LOCATION:无效的安装位置。INSTALL_FAILED_INVALID_INSTALL_LOCATION 无效的安装路径。修改为英文名就OK了。

嗯... 1081

深入LSM6DSL的FIFO连续模式:基于STM32和MEMS库的数据流高效处理指南

本文深入探讨了LSM6DSL的FIFO连续模式,结合STM32硬件平台和ST官方MEMS库,提供了高效的数据流处理方案。通过优化I2C通信时序、中断驱动设计以及动态ODR调整,实现低功耗数据采集与处理,显著提升嵌入式传感器应用的性能和续航能力。

weixin_30387799的博客 349

adb install 报错

INSTALL_FAILED_ALREADY_EXISTS = -1; 解释:apk已经存在。 解决:adb install -r 强制安装 INSTALL_FAILED_INVALID_APK = -2; 解释: 无效的apk 解决: 排查方式与INSTALL_FAILED_INVALID_URI 类似 INSTALL_FAILED_INVALID_URI = -3; 解释:无效的apk uri路径 解决:可能的原因 文件路径有问题,比如输入绝对路径/文件路径是否有空格,符号半角全角问题。 .

Sim的博客 4893

三模冗余设计

在数字电路设计中,Voter模块(表决器) 和 三模冗余(Triple Modular Redundancy, TMR) 是高可靠性系统的核心设计技术,主要用于容错和抗辐射(如航天、医疗设备等关键领域)。容错机制:若任一模块故障(如SEU,单粒子翻转),其他两个模块仍能保证正确输出。功耗与面积:TMR会显著增加资源占用(约3倍),需权衡可靠性和成本。航天电子:抗辐射芯片(如FPGA)中用于防止单粒子翻转(SEU)。故障检测:可扩展设计以检测并隔离故障模块(如通过BIST)。

qq_45776815的博客 2053

Windows下飞桨PaddlePaddle 2.6.1 GPU版环境搭建全攻略(含CUDA 11.7配置避坑指南)

本文详细介绍了在Windows系统下搭建飞桨PaddlePaddle 2.6.1 GPU版环境的完整流程,特别针对CUDA 11.7和cuDNN的安装提供了避坑指南。从Anaconda环境配置、CUDA Toolkit安装到飞桨GPU版的验证,手把手帮助开发者高效完成深度学习环境搭建,解决常见问题并优化性能。

x8y9z0的博客 1095

安卓设备实现静默安装(已ROOT)

市面上很多应用都实现了静默安装的功能,例如各种手机市场。但是很多应用 必须要有静默安装的功能(各种电梯或者地铁广告机),因为这些设备都不会 有人去操作。 本文介绍的静默安装的方式是通过命令行的方式,方法是通过在网上搜集自己 整理得来,只适用于已Root设备,只在4.2.2设备上测试可行,其他的设备没有 Root权限,因此还不知道可行不可行。 主题安装代码来自网络,本文将它整理在一个类中

朝哥的博客 730

中国境内及周边2839个站点的日降水量逐日降水数据集(1961-2022,0.1°/0.25°/0.5°)1、数据年份:1961-2022,日数据2、数据范围:中国境内及周边2839个站点的日降

CHM_PRE数据集基于中国境内及周边1961至今共2839个站点的日降水观测,在传统的“降水背景场+ 降水比值场”的数据集构建思路上,尝试应用月值降水约束和地形特征校正,并依据中国范围内约4万个高密度站点2015–2019年的日降水量插值后数据进行精度评价。

yushibing717的博客 2788

adb和机顶盒一些常识

1、adb install强制安装在SD卡 因为盒子/data/空间不够了。而默认apk就安装在了/data/目录下。因此需要更改默认安装位置 命令参照 进入adb shell $adb shell $pm set-install-location 0 pm set-install-location 0 由app自行决定软件能否安装在sd卡 pm set-install...

weixin_30348519的博客 2762

睿思综述智能体:100篇高质量文献一键生成万字长文,还能联网PubMed,科研效率拉满!

对一个主题进行文献综述,是日常科研人绕不过去的工作,无论是写论文前言,综述论文,或者基金申请书的立项依据,需要根据主题,从海量文献中提取相关信息,梳理出清晰的逻辑线,再组织成流畅的文字。4 一键生成万字全文:大纲确认后,它会基于对所有论文的深度理解,逐个章节进行详细撰写,最终生成一篇逻辑连贯、内容翔实、引用规范的万字综述长文,并直接保存为Word(.docx)文件。3 智能撰写大纲:你可以提供自己的大纲,也可以让它根据所有文献内容,智能生成一个逻辑清晰的综述大纲,并支持你在此基础上修改。

dinaxuejie的博客 821

基于simulink的电气弹簧ES稳压控制模型仿真

若要补偿母线电压的谐波,需控制ES上的谐波,即在单闭环母线电压有效值控制的基础上,增加谐波抑制环节来进行谐波控制,现有的各种检测和抑制谐波的方法有采用模拟滤波器、傅里叶分析进行谐波分析、基于瞬时无功功率理论的方法等。当关键负载ZC为电流源型非线性负载时,电路原理图如图7所示,由于电流源型非线性负载可以等效为谐波电流源,关键负载电流ic便会含有谐波分量,导致输电线电流is和母线电压VS同样会含有谐波分量,导致供电质量的严重下降,对用电设备的正常工作造成影响。分别为流过线路阻抗、非关键负载、关键负载的电流,

FPGA/MATLAB学习教程/源码/项目合作开发 1632

Android常用代码之普通及系统权限静默安装APK

Android常用代码之APK root权限静默安装 本文主要介绍程序如何利用root权限静默安装(卸载)APK,如何自动选择普通安装(卸载)还是静默安装(卸载)。   1、root权限静默安装(卸载)调用 引入TrineaAndroidCommon@Github(欢迎star和fork^_^)作为你项目的library(如何拉取代码及添加公共库),或自己抽取Packa

weifanyite505的博客 1354

Simulink开发项1000例实战专栏--实例161:基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 189

“解析错误”的魔咒:应用内更新为何总在最后一步崩盘?——FileProvider 与 APK 安装权限全攻克

文章摘要 在移动应用内更新过程中,开发者常遇到“解析包错误”或安装静默失败的问题。这主要源于Android系统对安装权限的层层限制:7.0+要求使用FileProvider替代file://URI,8.0+需要“安装未知来源”权限,10.0+引入分区存储限制。常见失败原因包括未正确配置FileProvider、缺少运行时权限、APK文件损坏、签名不一致等。解决方案需完整实现:1)正确配置FileProvider的路径和权限;2)构建安装Intent时添加FLAG_GRANT_READ_URI_PERMISS

深山技术宅的博客 320

OPENSSL使用方法

预备知识KEY 通常指私钥。CSR 是 Certificate Signing Request 的缩写,即证书签名请求,这不是证书,只是包含申请证书的基本信息。生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。CRT 即 certificate的缩写,即证书。 X.509 是一种证书格式。对X.509证书来说,认证者总是CA或由CA指定的人,一份...

zxm8513优快云博客 1212

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

adb install的坑

adb install 的坑 1. C:\Users\WIN7&gt;adb shell pm install C:\Users\WIN7\Desktop\Mello.apk error: more than one device/emulator 提示我大于1个设备,需要选定 C:\Users\WIN7&gt;adb -s AILVIF8T99999999 shell pm install C...

weixin_39577647的博客 1279

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android系统级应用安装管控:深入PackageManagerService与PackageInstaller的屏蔽机制

本文深入探讨了Android系统级应用安装管控机制,重点分析了PackageManagerService与PackageInstaller的屏蔽技术。通过解析四种应用安装途径,详细介绍了PMS的核心管控机制和代码实现,以及如何通过系统属性和设备管理API实现企业级部署的完整解决方案。文章还提供了常见问题排查、性能优化和安全加固的实用建议,帮助开发者有效管理第三方应用安装。

weixin_33858485的博客 381

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

我的Android进阶之旅------>Android中adb install 安装错误常见列表

adb的安装过程分为传输与安装两步。 在出错后,adb会报告错误信息,但是信息可能只是一个代号,需要自己定位分析出错的原因。 下面是从网上找到的几种常见的错误及解决方法: 1、INSTALL_FAILED_INVALID_APK:无效的安装包,安装包已损坏 请检查安装包是否完整。如果是xpk包,可以通过手...

weixin_34111790的博客 145

Android应用一键安装与依赖管理:SMAPI Installer的设计与实现

在Android应用开发与部署中,运行时依赖管理是一个常见且棘手的问题。许多应用,特别是基于跨平台框架如.NET MAUI或Mono构建的应用,需要特定的运行时库支持才能正常运行。传统手动安装依赖的方式不仅繁琐,还容易因版本不匹配或架构错误导致安装失败或应用闪退。为了解决这一痛点,自动化依赖管理工具应运而生,它们通过智能检测设备环境、自动匹配并安装所需依赖,极大简化了复杂应用的部署流程。这类工具的核心价值在于将技术细节封装,提供一键式的安装体验,降低了用户门槛。其应用场景广泛,尤其适合需要特定运行环境的游戏

weixin_34245749的博客 965

android 命令启动服务,adb 命令

Android 调试桥adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。adb 的工作...

weixin_39924486的博客 1919
上一篇: android 5.0 64bit系统加载库文件失败问题浅析
下一篇: Android 6.0 adb remount后没有写权限,提示Read-only file system
杨毅
博客等级 码龄14年 26粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值