76

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

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

4

27 回答 27

79

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

于 2013-06-16T12:40:40.420 回答
26

对于有根设备:

运行以下命令

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

对于非根设备:

  1. 更改应用的 ApplicationId。请参阅此链接以更改 ApplicationId。
  2. 构建并安装应用程序。应用程序将成功安装,因为它被视为新应用程序。
  3. 现在卸载这个应用程序。这将清除数据。
  4. 现在将 ApplicationId 更改为上一个。
  5. 构建和安装。魔术..它将安装。
于 2015-01-21T13:57:55.883 回答
17

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

于 2013-04-29T11:46:59.427 回答
7

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

于 2013-04-29T11:54:20.427 回答
3

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

于 2014-07-17T17:25:21.003 回答
3

I do have root on my Nexus 5, but nothing worked, so I had to run a factory reset from the settings which worked.

于 2014-08-07T14:57:40.450 回答
3

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

于 2014-09-24T23:00:46.667 回答
3

在大多数情况下INSTALL_FAILED_DEXOPTINSTALL_FAILED_UID_CHANGED意味着您没有足够的空间来安装该应用程序。

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

adb uninstall package-name

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

无根

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

植根(或模拟器)

adb shell "rm -rf /data/data/package-name" 
于 2014-12-16T13:32:43.913 回答
3

以为我会分享这个以防它对某人有所帮助......我在 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 版本之间的冲突时才有效,但如果您处于类似情况,则值得一试。

于 2014-12-15T12:43:45.393 回答
2

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

谢谢,-沙阿

于 2014-10-31T13:50:24.440 回答
2

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

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

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

于 2014-10-15T10:19:38.950 回答
2

这对我有用:

adb shell rm -rf /system/app/<package.name>
于 2014-07-29T21:17:16.850 回答
2

这是现有答案未涵盖的内容。这发生在我的模拟器上。如果我重置用户数据,我会第一次得到 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 不喜欢某些方法名称,但这就是问题所在。

于 2015-04-10T01:03:45.493 回答
1

好的,所以对于我的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"

在职的?

于 2014-06-05T20:07:55.963 回答
1

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

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

于 2015-04-09T14:34:30.307 回答
0

For me, there was a bit more to it. Simply removing /data/data/appfolder didn't help.

The additional reason was that my external libs weren't included in .apk file because the name of folder was lib instead of libs. This has caused [INSTALL_FAILED_DEXOPT] during apk installation followed by [INSTALL_FAILED_UID_CHANGED].

So changing libs folder name worked for me in this case.

于 2014-09-02T13:07:18.717 回答
0

我解决了这个问题,也许它会对其他人有用。

我正在重新启动手机,然后删除更多应用程序。并再次尝试安装,它的工作!

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

于 2014-10-24T21:49:47.397 回答
0

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

于 2013-04-29T11:27:11.757 回答
0

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

于 2014-09-15T18:06:28.520 回答
0

利用

亚行外壳

去壳。
然后运行以下命令:

rm -rf /数据/数据/包名

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

于 2014-10-28T08:14:45.960 回答
0

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 工作正常,我不必(再次)恢复出厂设置。

希望能帮助到你

于 2015-04-08T11:41:15.163 回答
0

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

于 2015-01-19T19:27:55.970 回答
0

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

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

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

在“Nexus 5”和“OnePlus One”上进行了尝试。

于 2015-04-21T14:19:08.023 回答
0

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

为什么会发生这种情况

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

您收到的错误取决于 Android 版本:在 Android 4.4.4 我见过INSTALL_FAILED_UID_CHANGED,而 Android 10 报告INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

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

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

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

如何恢复

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

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

  • 备份现有应用数据,删除现有版本,重新安装新版本并恢复数据。就是这样:
    • 使用oandbackup或类似工具,备份您应用的私人数据。(您不需要备份 APK,但它不会受到伤害。)
    • 如果您的应用有私有共享存储/sdcard/Android/data/packageID目录su(这也会将目录的文件所有权从应用程序的用户更改为sdcard.
    • 卸载现有应用程序。
    • 安装新版本。
    • 使用与上述相同的备份工具恢复应用程序的私有数据(不是APK)。
    • 如果您已将私有共享存储目录移走,请将其移回其旧位置(与上述步骤相同)。这会将文件所有者更改为应用程序的(新)用户 ID。

如果您在设备上没有 root 权限,则您的选择会受到更多限制。

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

这显然是因为卸载不当(可能是由于电缆连接错误)。

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

于 2015-11-07T23:53:04.447 回答
0

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

为我工作得很好。

我希望它对你有帮助!

于 2016-03-24T03:19:27.883 回答
-1

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

于 2014-10-06T19:42:13.680 回答