解决:The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

2023-05-16

一般这种情况,你都可以在清单文件顶部找到类似如下的代码:

 他的作用是:在AndroidManife.xml 中添加android:sharedUser可以将不同的程序加入到同一个进程中,方便数据的共享。

但是有个前提是需要签名相同

而报这个错有可能是因为签名和系统签名不相同, android.uid.system是表示系统进程

解决方案

1.如果是自己定制的系统可以使用系统签名,如果是上传到应用市场的,每个应用市场都不相同,所以可能就用不了

2.如果不想和系统一个进程,就删掉这行代码

扩展

 从as运行的时候有时候会出现: Couldn't terminate the existing process for com.xxx.xxx  或者 一运行就wait for devxxx

我这边也有两个解决方案:

1.如果暂时测试用不到和系统进程相关的事,就暂时把这行代码删掉

2.如果需要测试和系统进程相关的事,则每次运行之前先把应用卸载掉,然后在安装,手动可能比较麻烦,但是写到运行的任务中就比较方便了,加到任务中的方式如下:

先在app:build.gradle中加入如下代码: 就是使用adb卸载当前的app(如果执行不了的请自行配置adb环境变量)

Groovy:

task unInsApk() {
    doLast {
        Runtime.getRuntime().exec("adb uninstall $android.defaultConfig.applicationId").waitFor()
    }
}

kts:

tasks.register<Task>("unInsApk") {
    doLast {
        Runtime.getRuntime().exec("adb uninstall ${android.defaultConfig.applicationId}").waitFor()
    }
}

 

 然后点上下箭头或拖动,将卸载app的task移动到执行安装apk之前,这样就可以先卸载在编译安装apk了

 然后就可以好好的玩耍了,亲测可用

ps:如果下面一直提示wait to devxxx的话可以先clean project ,然后重启所有as,卸载在重新运行一般就可以了

发现如果手动编译并安装就不会出现wait to devxxx,所以我们也可以直接写一个task,每次运行都使用它,就可以一键部署apk了,代码如下(可能需要根据你的目录小改)

Groovy:

task buildAndInstallApk(dependsOn: assemble) {
    doLast {
        def apkDir = new File(getBuildDir(), "outputs/apk/release")
        def apkFile = null
        for (File file : apkDir.listFiles().sort()) {
            if (file.name.lastIndexOf(".apk") > 0) {
                apkFile = file
                break
            }
        }
        Runtime.getRuntime().exec("adb install -r -d -t $apkFile.absolutePath").waitFor()
        //如果需要启动某个页面的话,可以用上一行的代码执行以下命令:adb shell am start xxx,命令参考:https://blog.csdn.net/qq_33505109/article/details/79515747
    }
}

kts:

tasks.register("buildAndInstallApk") {
    doLast {
        val apkFile = File(buildDir, "outputs/apk/release")
            .listFiles()
            ?.sorted()
            ?.find {
                it.name.endsWith(".apk")
            } ?: throw RuntimeException("找不到apk文件")
        Runtime.getRuntime().exec("adb install -r -d -t ${apkFile.absolutePath}").waitFor()
        //如果需要启动某个页面的话,可以用上一行的代码执行以下命令:adb shell am start xxx,命令参考:https://blog.csdn.net/qq_33505109/article/details/79515747
    }
}.dependsOn("assemble")

ps:如果有更好的方式请留言

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

解决:The application could not be installed: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 的相关文章

  • Gradle sync failed: Could not GET gradle-3.0.0-beta4.pom

    在不电脑间移动android工程项目时出现Gradle sync fail Could not resolve com android tools build gradle 3 0 0 beta4 以为是android studio版本的问
  • To Fill or Not to Fill(贪心算法)

    题目描述 有了高速公路 xff0c 开车从杭州到任何其他城市都很容易 但由于汽车的油箱容量有限 xff0c 我们必须不时地在路上找到加油站 不同的加油站可能会给出不同的价格 你被要求仔细设计最便宜的路线去 输入描述 对于每个测试实例 第一行
  • 廊坊师范学院IT提高班,你真正了解多少?

    最近在csdn博文中经常看到博友们问 什么是提高班 更有人对提高班怀有疑惑 or 不理解 廊坊师范学院信息技术提高班到底是怎样的一个地方 你对这个地方又有怎样的认识 你对这个地方是否怀有一份好奇心呢 让这篇文章解开你心中的某些疑惑吧 我一个
  • AndroidManifest.xml中一些常用的属性

    一 关于AndroidManifest xml AndroidManifest xml 是每个android程序中必须的文件 它位于整个项目的根目录 描述了package中暴露的组件 activities services 等等 他们各自的
  • QT 常用部件 之窗体篇 widget 属性(一)

    这里介绍的是widget 窗体的属性 最完整的属性请查看qt自带的帮助文档 这里之拿了一部分做说明 窗体属性 object name 物件名称 qwidget enable 使能本部件 geometry 窗口位置和大小设置 sizepoli
  • 用tornado ,Supervisord ,nginx架网站

    最近使用 Tornado 重写了博客 于是查看了很多关于部署基于 Tornado 开发的网站的资料 比较成熟的方案就是使用 Nginx 来做反向代理 使用 Supervisord 来作为进程管理工具 至于什么叫反向代理 为什么 Tornad
  • Flex4,textArea控件的htmlText属性

    它现在包含Text布局框架 Text Layout Framework TLF 而TLF可以作为许多 Spark text组件的基础 例如RichText RichEditableText TextArea和 TextInput等组件 以及
  • springboot读取yaml数组配置

    前提 我们常见的读取方式 test list TEST LIST http xxx com http ac com http cd com list2 http xxx com http ab com Configuration publi
  • 嵌入式开发八:ARM cortex A8/9 - Android NDK - NEON介绍以及优化

    ARM cortex A8 9 Android NDK NEON介绍以及优化 资源的整理总结 1 What is NDK Android开发官网介绍 http developer android com sdk ndk overview h
  • *** FATAL ERROR L232: APPLICATION CONTAINS TOO MANY RECURSIONS错误的解决方案

    最近一直在用KEIL写一个单片机的程序 遇到了一个很棘手的无法正常链接的问题 FATAL ERROR L232 APPLICATION CONTAINS TOO MANY RECURSIONS 在网上搜索了大量的文章 以及网页也没找到什么有
  • flex阶段总结

    关于从XML中读取到的中英文乱码 在flex应用程序中加入语句 flash system System useCodePage true 处理中文乱码 日期格式的修改 var datefamate DateFormatter new Dat
  • [Flex]在TextArea中嵌入圖像

    TextArea的htmlText支持多種html標簽 如 a b br font img 等 這裏使用 img 標簽來將圖片嵌入到TextArea中 img 標簽可用于嵌入JPEG GIF PNG及SWF等媒體文件到文本框中 文本會自動分
  • mysql安装error:the security setting could not be applied

    在安装mysql时 出现 The security settings could not be applied to the database because the connection has failed with the follo
  • 如何在 Ubuntu 20.04 上安装 Skype

    Skype 是一种电信应用程序 提供用户和用户组之间的聊天和视频等功能 大多数现代操作系统 移动设备和智能手表都提供此功能 它还提供了通过移动网络跨境呼叫的选项 本教程将帮助您在 Ubuntu 20 04 LTS Focal Fossa L
  • Transaction rolled back because it has been marked as rollback-only

    http hsyd iteye com blog 586772 错误信息 Transaction rolled back because it has been marked as rollback only 原因 事务提交多次 检查代码
  • 大佬,一款小而美的Application组件,了解一下

    简介 Android开发过程中 Application类的角色不容忽视 它不仅是程序启动的入口 同时也代表着整个应用程序的生命周期 在Application中 我们通常执行以下操作 初始化各种第三方库 注册ActivityLifecycle
  • “应用程序配置不正确,应用程序未能启动” 错误的解决

    转载自 http hi baidu com xunxun129 blog item 6b311ccf24f4900992457e87 html 一 问题描述 今天在虚拟机上装了XP系统 但运行一个win32 Console程序时弹出对话框
  • DataOutputStream 类与BufferedOutputStream类的区别是什么

    DataOutputStream 类与Buffere dOutputStream类的区别是什么 DataOutputStream dataout new DataOutputStream new FileOutputStream file
  • 推荐几本Linux相关的好书

    应用层开发的 可以看看 Linux Application Development Advanced Linux Programming 第二本废人同学曾经翻译过 译稿可从这里获取 另外Linux和Unix渊源极深 因此 应用层开发也可以看
  • WPF自学篇--第一篇--Hello world

    主要知识点为 1 WPF如何修改启动页面 2 如何写Hello Word Sample 内容 1 由于专案是先加window wpf想加web wpf是调试找启动页面找了很久 终于发现在app config中Application下 Sta

随机推荐