【问题标题】:Android INSTALL_FAILED_UID_CHANGEDAndroid INSTALL_FAILED_UID_CHANGED
【发布时间】:2013-04-29 11:23:26
【问题描述】:

我一直在使用我的 Nexus 4 在 Android 上进行调试,但是我最近在这里遇到了这个错误。在对此错误进行了一些研究之后,这似乎是应用程序未正确删除的问题。我正在调试的应用程序在我的其他 Android 设备以及模拟器上运行良好,此错误仅发生在我的 Nexus 4 上。我将设备插入计算机,并尝试删除数据/数据文件夹,但我仍然得到同样的问题。我还检查了设置应用程序以检查它肯定已卸载。

有人知道如何解决这个问题吗?根据一些用户的说法,我需要 root 访问权限才能正确删除数据/数据,这是真的吗?还是有其他方法可以解决这个问题?

【问题讨论】:

标签: android


【解决方案1】:

有时您还必须卸载数据文件夹。对我来说,我在com.kikin.cts 的用户空间中有一个包,在/data/data/com.kikin.cts 中还有一个文件夹目录。一直收到INSTALL_FAILED_UID_CHANGED,但删除数据文件夹后,错误消失了。

【讨论】:

  • 我也遇到了同样的问题,但是当我尝试删除文件夹时,出现权限被拒绝错误
  • 我的设备安装在 /data/local/tmp/com(...) 中,这种方法不起作用。 (HTC One,IntelliJ 13)
  • 找到任何解决方案了吗?我可以从我的 mac 正常构建我的项目。但是当我切换到我的 Windows 电脑时,我得到了这个错误。在我的 windows pc 上构建项目后,我的设备坏了,我将无法再次用我的 mac 构建,因为我会得到同样的错误..
  • 对于没有root的设备,也许我们必须尝试最坏的解决方案:恢复出厂设置。
  • 其实是 adb shell rm -R /data/data/ 因为是文件夹,所以 -R 会删除文件夹和里面的所有东西。
【解决方案2】:

对于根设备:

运行以下命令

adb rm -rf /data/data/<your.package.name>

对于非根设备:

  1. 更改应用的ApplicationId。请参考此link 进行更改 应用程序 ID。
  2. 构建并安装应用程序。应用将成功安装,因为它被视为新应用。
  3. 现在卸载这个应用程序。这将清除数据。
  4. 现在将 ApplicationId 更改为之前的。
  5. 构建和安装。魔术..它将安装。

【讨论】:

  • 天才。我试试看。
  • 不,不会。没有帮助我。
  • 在执行卸载 #3 之前可能需要重启手机。
  • 谢谢!我使用的是 kotlin 1.0.0-beta-1083,将其切换到 1.0.0-beta-1103,然后应用您的解决方案(需要同时使用,令人毛骨悚然的错误)并解决了问题!
  • 它仅适用于我在第 3 步之后和第 5 步之前重新启动设备的情况。但它有效!酷!
【解决方案3】:

重新启动您的设备,并清除您的项目。 基本上,如果没有,卸载会为您完成此操作,然后尝试重新启动。

【讨论】:

  • 这个好像可以了,我重启了设备,又试了一次,同样的问题,我去吃午饭了,回来重新插上手机,好像又可以了
  • @adamm 这似乎对我不起作用。我猜这与午餐有关。你还记得那天你吃了什么吗? :p
  • 我吃了比萨、面条、三明治对我没用
【解决方案4】:

您可能引入了导致此问题的 SharedUserID。

【讨论】:

  • 我没有在我的应用中使用共享用户 ID
  • 绝对!这就是我的原因:),谢谢。
  • 这对我来说是个问题。谢谢你,先生。 :)
【解决方案5】:

我有另一个解决方案适合我。您可以更改应用程序的包名,以便设备将其识别为不同的应用程序并成功完成安装。对于那些没有root访问权限并且不想重置设备的人可能会有所帮助。

【讨论】:

  • 几乎没有解决办法,除非你只是在拼凑一些东西......有点像你的房子里有气味,然后你通过移动来解决问题。
  • 不仅是手机,Google Play 也将其识别为单独的应用程序。换手机比换包名好,因为我的应用已经有 1000 多个用户了。
  • @SeshuVinay 正确,不推荐用于生产。但可以在应用上线之前使用。
【解决方案6】:

我的 Nexus 5 确实有 root 权限,但没有任何效果,所以我不得不从有效的设置中恢复出厂设置。

【讨论】:

    【解决方案7】:

    对我来说,这个技巧是通过取消选中“开发人员选项”部分中的“通过 USB 验证应用程序”来完成的。

    【讨论】:

    • 谢谢你的这个。一想到必须将设备恢复出厂设置,我就开始感到焦虑。
    【解决方案8】:

    以为我会分享这个以防它对某人有所帮助...我在 eclipse 中编写了我的应用程序的新版本并尝试在我的手机上运行它,尽管我从 Google Play 下载的手机版本稍旧店铺。 Eclipse 弹出一个对话框,询问我是否愿意卸载现有的手机版本,我同意了。卸载有缺陷并导致 INSTALL_FAILED_UID_CHANGED。

    我尝试了这里建议的大部分内容,但没有成功。我的手机上没有明显的 APK 痕迹,也没有我能找到要删除的任何数据文件,但有些东西阻止了我从 Eclipse 将 APK 加载到手机上。我也无法从 Google Play 下载我以前的 beta 测试版本 - 下载继续进行到 100%,但随后失败并显示报告“未知错误”的消息和一个数字(可能是 -24)。

    我在重命名我的包时犹豫不决,因为我已经使用旧包名设置了 beta 测试人员和应用内产品,但我在 eclipse 中更改了包名临时 并且我能够将新版本安装到手机上,然后也下载旧的 Google Play 版本。两个版本在手机上愉快地坐在彼此旁边,具有相同的应用程序名称和图标(但幕后的包名称不同)。然后,我可以通过将应用程序图标拖到手机的卸载图标上来手动卸载其中一个或两个。手动卸载消除了冲突并修复了eclipse有缺陷的卸载,所以我简单地将我的eclipse包重命名为原始名称并像以前一样进行。

    这比恢复出厂设置或永久包重命名要少得多。它可能仅在错误来源是 eclipse 版本和 Google Play 版本之间的冲突时才有效,但如果您处于类似情况,则值得一试。

    【讨论】:

      【解决方案9】:

      在大多数情况下INSTALL_FAILED_DEXOPT 或INSTALL_FAILED_UID_CHANGED 表示您没有足够的空间来安装应用程序。

      从您的设备中删除一些未使用的应用程序,或者至少删除您当前版本的 应用程序。

      adb uninstall package-name
      

      在极少数情况下,应用程序数据可能存在问题。根据您的设备是否已植根,您有两种选择

      无根

      恢复出厂设置Settings -&gt; Backup and reset -&gt; Factory data reset(至少对于三星 S5)

      植根(或模拟器)

      adb shell "rm -rf /data/data/package-name" 
      

      【讨论】:

        【解决方案10】:

        这对我有用:

        adb shell rm -rf /system/app/<package.name>
        

        【讨论】:

        • 这似乎对我不起作用。仍然得到同样的错误
        【解决方案11】:

        在 ADB shell 中,您可以通过两种方式找到解决方案。 1.保留数据并找到解决方案 2.不持久化数据的解决方案

        1.的解决方案是从ADB路径通过命令提示符运行commandadb chown -R UID:UID /data/data/your.package.name。

        2.的解决方案是从同一路径运行命令adb rm -r /data/data/your.package.name。

        【讨论】:

          【解决方案12】:

          过去几天我在 Galaxy Note 3 测试设备上遇到了这个问题。每当 install_app 方法尝试执行时,我一直在使用 Calabash-Andrdoid 并不断收到错误 INSTALL_FAILED_UID_CHANGED。我一直在努力解决这个问题,因为我有两个测试设备遇到了这个问题。我尝试了上面的一切,包括清空我的 /data/data/ app 和 app.test 文件夹。我什至删除了 Xamarin 安装的检测后端东西,因为那是我用来开发我的应用程序的平台。我找不到其他可以手动删除设备的内容。当我尝试在第三台设备上进行工作并发现一切运行成功时,我意识到问题出在设备上。最后,唯一对我有用的是对其中一个设备执行恢复出厂设置。我希望这会有所帮助。

          谢谢, -沙阿

          【讨论】:

            【解决方案13】:

            这是现有答案未涵盖的内容。这发生在我的模拟器上。如果我重置用户数据,我会第一次得到 INSTALL_FAILED_DEXOPT,但之后会得到 INSTALL_FAILED_UID_CHANGED。我发现 rm -r /data/data/com.foo.bar 足以重置到第一个状态。

            在我的案例中,真正的罪魁祸首是导致 dexopt 失败的 java 方法名称。密切关注 logcat 中的内容。以下是它所泄露的内容:

            I/PackageManager( 1275): Running dexopt on: com.foo.bar
            E/dalvikvm( 2857): Invalid name: '__jni_setLocation'
            E/dalvikvm( 2857): Trouble with item 14787 @ offset 0x43b68
            E/dalvikvm( 2857): Cross-item verify of section type 0005 failed
            E/dalvikvm( 2857): ERROR: Byte swap + verify failed
            E/dalvikvm( 2857): Optimization failed
            W/installd(  941): DexInv: --- END '/data/app/com.foo.bar-1.apk' --- status=0xff00, process failed
            E/installd(  941): dexopt in='/data/app/com.foo.bar-1.apk' out='/data/dalvik-cache/data@app@com.foo.bar-1.apk@classes.dex' res=65280
            W/PackageManager( 1275): Package couldn't be installed in /data/app/com.foo.bar-1.apk
            

            我无法告诉你为什么 dexopt 不喜欢某些方法名称,但这就是问题所在。

            【讨论】:

              【解决方案14】:

              好的,所以对于我的 LG NEXUS 4 根,这是解决方案:(

              • 确保您的工作应用 apk 已签名或未签名)

              和

              • 您已从手机中卸载了此文件(当然如果存在)

              假设它是:app-debug-unaligned.apk

              现在在控制台你写:

              adb push app-debug-unaligned.apk /sdcard/
              adb shell
              su
              rm -fr /data/local/tmp/app-debug-unaligned.apk
              rm -fr /data/data/app-debug-unaligned.apk
              

              现在退出 adb 并调用

              adb shell su -c "pm install /sdcard/app-debug-unaligned.apk"
              

              工作吗?

              【讨论】:

                【解决方案15】:

                我删除了/data/data/my.package.name和/data/app/my.package.name.apk, 问题依然存在。

                但是我找到了一个文件夹/data/user/0/my.package.name,删除它并解决问题。

                【讨论】:

                  【解决方案16】:

                  只需卸载应用程序本身(而不是数据文件夹)然后重新安装它,应该没问题。 Android 的抱怨是因为您之前可能曾从另一台计算机上调试过该应用程序。

                  【讨论】:

                  • 我已经删除了该应用程序,当我尝试重新安装它时出现错误。而且我所有的调试都是在同一台机器上完成的
                  • 好吧,看来你还是解决了这个问题。我唯一一次看到这个错误发生在我尝试在另一台计算机上调试时;)
                  • 我不确定我使用的哪种方法解决了这个问题,我尝试删除应用程序数据文件夹,重新启动设备,eclipse清理项目,重命名项目,但仍然出现错误,但当回来时从午餐开始,它又开始工作了。只是希望我不会再得到它,因为这个问题似乎没有一个可靠的解决方案
                  • 看起来是时候为我吃午饭了——同样的错误,没有任何帮助
                  【解决方案17】:

                  无根设备的解决方案。转到应用程序管理器并卸载名为“Selendroid”的应用程序,然后重试。这个解决方案对我有用。

                  【讨论】:

                    【解决方案18】:

                    我解决了这个问题,也许其他人也可以。

                    我要重启手机,然后再删除一些应用。 然后再次尝试安装,成功了!

                    也许问题即将存储。我不知道为什么,但它现在可以工作了。祝你好运! (抱歉英语不好)

                    【讨论】:

                      【解决方案19】:

                      使用

                      adb 外壳

                      转到外壳。
                      然后运行以下命令:

                      rm -rf /data/data/包名

                      请用您自己的替换包名,例如 com.map.map

                      【讨论】:

                        【解决方案20】:

                        对于任何从他们的计算机运行 Junit 样式测试并收到此错误的人 - 虽然控制台告诉我我的 应用程序 存在问题(以“com.myapp.stuff”格式打包) ,真正的问题是我的测试代码包,如果你在设备上运行,它会被安装为一个单独的应用程序,包名如“com.myapp.stuff.test”。使用应用程序管理器删除测试代码“应用程序”并删除我的实际应用程序为我解决了这个问题。我在这里发布这个答案是为了给别人一个“Duh”的时刻。

                        【讨论】:

                          【解决方案21】:

                          Mediacom 设备上的同样问题,首先是

                          $ adb install -r platforms/android/out/android-debug-unaligned.apk
                          3958 KB/s (22887489 bytes in 5.647s)
                               pkg: /data/local/tmp/android-debug-unaligned.apk
                               Failure [INSTALL_FAILED_DEXOPT]
                          

                          然后一个非常持久:

                          $ adb install -r platforms/android/out/android-debug-unaligned.apk
                          4949 KB/s (22887489 bytes in 4.515s)
                               pkg: /data/local/tmp/android-debug-unaligned.apk
                               Failure [INSTALL_FAILED_UID_CHANGED]
                          

                          恢复出厂设置并没有改变动态(我依次遇到了两个错误)。

                          • 使用不同的 ID 安装相同的应用程序有效
                          • 使用以前的 id 安装不同的应用程序不会

                          生根不是一个选项,对我来说解决方案是缓存擦除:现在有问题的应用程序 ID 工作正常,我不必(再次)恢复出厂设置。

                          希望对你有帮助

                          【讨论】:

                            【解决方案22】:

                            对我来说,还有更多。简单地删除 /data/data/appfolder 并没有帮助。

                            另一个原因是我的外部库未包含在 .apk 文件中,因为文件夹的名称是 lib 而不是 libs。这导致在apk 安装期间[INSTALL_FAILED_DEXOPT] 之后是[INSTALL_FAILED_UID_CHANGED]。

                            所以在这种情况下更改 libs 文件夹名称对我有用。

                            【讨论】:

                              【解决方案23】:

                              我找到了一个既适用于非 root 设备又适用于模拟器的解决方案。 虽然您无法直接删除非 root 设备上的数据文件夹,但您可以使用 pm 命令来执行此操作:

                              1. 运行adb shell
                              2. 运行pm uninstall &lt;app name&gt;(即com.example.myapp)
                              3. 运行 pm uninstall &lt;test app name&gt;(即 com.example.myapp.test) - 如果之前未安装测试应用,您可能会收到错误消息。

                              似乎由于某种原因,从 Android UI 卸载应用程序时这不起作用(可能它不会删除数据文件夹),但是通过 pm 命令卸载时它确实起作用。

                              在“Nexus 5”和“OnePlus One”上试过。

                              【讨论】:

                                【解决方案24】:

                                很明显是因为卸载不当(可能是电缆连接错误)。

                                解决方案 从 play-store 下载SDMaid,并删除尸体文件(垃圾文件)。 重新运行应用程序。 (但你需要让你的设备植根)

                                【讨论】:

                                  【解决方案25】:

                                  我遇到了类似的问题。原因是您没有卸载应用程序的所有组件。我的解决方案是: 手动删除 /data/data/com.eg.android.AlipayGphone。

                                  对我来说很好。

                                  希望对你有帮助!

                                  【讨论】:

                                    【解决方案26】:

                                    安装更新到应用程序时会发生这种情况,更新后的版本无法使用与以前版本相同的用户 ID 运行。

                                    为什么会这样

                                    Android 通常会自行分配用户 ID,当应用更新时,它会继承之前版本的用户 ID。有一个例外:Android 允许多个应用程序在同一个用户 ID 上运行,前提是它们在清单中指定(通过在 &lt;manifest&gt; 元素中设置 android:sharedUserId 属性)。如果新版本请求共享用户 ID,但之前安装的没有,则用户 ID 将更改,您将收到错误消息。 (大概在尝试从共享用户 ID 升级到没有的版本时也是如此。)

                                    您收到的错误取决于 Android 版本:在 Android 4.4.4 上我看到了INSTALL_FAILED_UID_CHANGED,而 Android 10 报告了INSTALL_FAILED_SHARED_USER_INCOMPATIBLE。

                                    如果应用在未删除其数据的情况下被卸载(可以通过adb shell 和pm uninstall -k 完成,如果您知道自己在做什么),您也可能会收到此错误。

                                    这里有两个应用数据位置:

                                    • 应用程序专用存储。最终用户通常无法访问此数据;如果您有 root 访问权限,您可以在文件系统广告/data/data/packageID 中找到数据。
                                    • 私人共享存储:位于您的 SD 卡上,地址为 /Android/data/packageID。

                                    如何恢复

                                    从中恢复本质上意味着确保没有具有相同包名和不兼容用户 ID 的包(或剩余的应用程序数据)。有多种方法可以实现这一点:

                                    如果您在设备上拥有 root 权限,您可以执行一些手术以在更新期间保留您的应用数据:

                                    • 备份现有应用数据,删除现有版本,重新安装新版本并恢复数据。这是如何做:
                                      • 使用oandbackup 或类似名称,备份您应用的私人数据。 (您无需备份 APK,但不会有任何影响。)
                                      • 如果您的应用有私有共享存储目录(/sdcard/Android/data/packageID),请在设备上打开一个shell,输入su切换到root模式,并重命名该目录(将包ID更改为不存在的)。这也会将目录的文件所有权从应用的用户更改为 sdcard。
                                      • 卸载现有应用。
                                      • 安装新版本。
                                      • 使用与上述相同的备份工具恢复应用的私有数据(不是 APK)。
                                      • 如果您已将私有共享存储目录移走,请将其移回其旧位置(与上述步骤相同)。这会将文件所有者更改为应用的(新)用户 ID。

                                    如果您的设备没有 root 权限,您的选择会比较有限。

                                    • 卸载现有应用程序,然后安装新版本。 您将丢失应用程序的私有数据。如果您的应用程序有私有共享存储目录 (/sdcard/Android/data/packageID),您可以(可能)在卸载前备份它并在安装新版本后恢复它。如果应用允许,最新版本的 Android 支持备份私有应用数据;您也许可以使用备份应用程序以这种方式保存您的应用程序数据,但我还没有尝试过。
                                    • 如果您已经卸载了旧版本但保留了数据,请重新安装旧版本,然后按照上述步骤(卸载并安装新版本)。
                                    • 如果您只是想尝试一下,您可以给新版本一个不同的包名称。这将使 Android(和应用商店)将其视为不同的应用。新版本将看不到之前版本的私有数据,如果您将更改了包名称的应用程序部署到应用商店,它将显示为不同的应用程序,而不是对现有应用程序的升级。这绝对不建议在生产环境中使用,但可以在实验室环境中为您服务。
                                    • 如果没有其他方法,请执行恢复出厂设置。这更具破坏性会删除您的所有应用及其数据。

                                    【讨论】:

                                      【解决方案27】:

                                      生根和恢复出厂设置对我来说不是一个选项,但我能够找到我的 APK 的旧版本并安装它(我猜它是同一个无法正确卸载的版本)。再次卸载后,我能够安装新版本。

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2023-03-24
                                        • 1970-01-01
                                        • 2014-01-20
                                        • 2013-03-28
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多