Android INSTALL_FAILED_UID_CHANGED


75

我一直在使用Nexus 4在Android上进行调试,但是最近在这里遇到了此错误。在研究了此错误之后,似乎是应用程序未正确删除的问题。我正在调试的应用程序可以在其他Android设备以及仿真器上正常运行,此错误仅在Nexus 4上出现。我将设备插入计算机,并尝试删除数据/数据文件夹,但仍然可以同样的问题。我还检查了settings-apps来检查它是否确实已卸载。

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


4
您需要从/data/data/your.package.name和删除应用程序数据/data/app,好像还没有完全卸载它。
Marek Sebera


这解决了我的问题:请参阅链接
Sayem

Answers:


78

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


11
我遇到了同样的问题,但是当我尝试删除该文件夹时,我遇到了权限被拒绝的错误
山姆

7
我的设备安装在/ data / local / tmp / com(...),此方法无效。(HTC One,IntelliJ 13)
Nilzor 2014年

2
找到任何解决方案吗?我可以从Mac正常构建项目。但是,当我切换到Windows PC时,出现此错误。对我的Windows PC生成项目后我的设备坏了,我将无法再次建立与我的MAC,因为我会得到同样的错误..
卢西亚诺

对于无根设备,也许我们必须尝试最差的解决方案:恢复出厂设置。
RxRead

它实际上是adb shell rm -R / data / data / <app-package>,因为它是一个文件夹,所以-R将删除该文件夹以及其中的所有内容。
Christoph

26

对于有根设备:

运行以下命令

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

对于非根设备:

  1. 更改应用程序的ApplicationId。参考此链接以更改ApplicationId。
  2. 生成并安装该应用程序。应用将成功安装,因为它被视为新应用。
  3. 现在卸载该应用程序。这将清除数据。
  4. 现在将ApplicationId更改为上一个。
  5. 生成并安装。魔术..它将安装。

天才。我会尝试一下。
bonnyz 2015年

2
不,不会。没有帮助我。
Roman Minenok

卸载#3之前可能需要重启手机。
VinceStyling,2015年

谢谢!我使用的是kotlin 1.0.0-beta-1083,将其切换为1.0.0-beta-1103,然后应用了您的解决方案(都需要运行,出现kreepy错误)并解决了问题!
Deepscorn

1
仅当您在第3步之后和第5步之前重新启动设备时,它才对我有用。凉!
SILINIK '16

17

重新启动设备,然后清除项目。基本上,如果不尝试重新启动,则卸载将为您完成。


3
这似乎很有效,我重新启动设备,尝试再次运行它,同样的问题,我去吃了午饭,当我回来再次插入电话时,它似乎
又能

17
@adamm这似乎不适用于我。我猜这与午餐有关。你还记得那天吃什么吗?:p
Nilzor 2014年

61
我吃了比萨,面条,三明治对我没有用
卢西亚诺


3

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


4
除非您只是一起砍东西,否则这几乎不是解决方案……有点像在家里闻起来,然后通过移动解决问题。
帕特里克

6
Google Play不仅将手机识别为单独的应用程序。更改电话总比更改软件包名称好,因为我的应用程序已经有1000个用户。
2014年

@SeshuVinay对,不建议用于生产。但可以在应用程序上线之前使用。
Ayush Goyal 2014年

3

我确实在Nexus 5上拥有root用户,但没有任何效果,因此我必须根据有效的设置进行恢复出厂设置。


3

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


1
谢谢你这个 我开始担心不得不将设备恢复出厂设置。
珍妮·奥克桑宁

3

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

我没有运气就尝试了这里建议的大多数东西。我的手机上没有明显的APK痕迹,也找不到我可以删除的任何数据文件,但由于某些原因,我无法将APK加载到手机上。我也无法从Google Play下载以前的Beta测试版本-下载进行到100%,但随后失败,并显示一条消息“未知错误”和一个数字(可能为-24)。

我不愿意重命名我的程序包,因为我已经使用旧的程序包名称设置了Beta测试仪和应用内产品,但是我暂时在eclipse中更改了程序包名称,因此能够将该新版本安装到手机上,然后下载以及较旧的Google Play版本。两种版本在手机上彼此快乐地坐在一起,并且具有相同的应用程序名称和图标(但幕后名称不同)。然后,我可以通过将应用程序图标拖动到手机的卸载图标上来手动卸载这两者之一。手动卸载消除了冲突并修复了eclipse的有缺陷的卸载,因此我只是将eclipse软件包重命名为原始名称,并像以前一样进行。

这比恢复出厂设置或永久软件包重命名的痛苦要小得多。仅当错误源是eclipse版本与Google Play版本之间存在冲突时,它才可能起作用,但是如果您处于类似情况,则值得尝试。


3

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

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

adb uninstall package-name

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

无根

恢复出厂设置Settings -> Backup and reset -> Factory data reset(至少适用于Samsung S5)

扎根(或仿真器)

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


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从同一路径运行命令。


2

在过去的几天中,我在Galaxy Note 3测试设备上遇到了此问题。每当使用install_app方法执行时,我一直在使用Calabash-Andrdoid并不断收到错误INSTALL_FAILED_UID_CHANGED。我在这个问题上苦苦挣扎,因为我有两个测试设备遇到了这个问题。我尝试了上述所有操作,包括清空/ data / data / app和app.test文件夹。我什至删除了Xamarin安装的仪器后端内容,因为这是我用来开发应用程序的平台。我找不到其他要手动删除的设备。当我尝试在第三台设备上进行工作时,发现一切运行正常时,我意识到问题出在设备上。最后,对我而言唯一有效的方法是执行恢复出厂设置其中一种设备。我希望这有帮助。

谢谢,-Shah


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不喜欢某些方法名称,但这就是问题所在。


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"

加工?


1

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

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


0

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


1
我已经删除了该应用,尝试重新安装该应用时会出现错误。同样,我所有的调试工作都是在同一台计算机上完成的
AdamM 2013年

好吧,看来您还是解决了这个问题。我唯一一次看到此错误发生的时间是当我尝试在另一台计算机上调试时;)
FX

我不确定使用哪种方法解决了该问题,我尝试删除应用程序数据文件夹,重新启动设备,蚀清洗项目,重命名项目,但是仍然出现错误,但是当午餐回来时,它又可以工作了。只是希望我别再说了,因为似乎没有一个可靠的解决方案
AdamM 2013年

2
像它看起来是时候有一个午餐对我来说-同样的错误,并没有任何帮助
VIR我们

0

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


0

我解决了这个问题,也许其他任何人都可以使用。

我要重新启动手机,然后再删除一些应用程序。然后再尝试安装,就可以了!

也许问题将要存储。我不知道为什么,但是现在可以正常工作。祝好运!(对不起英语不好)


0

采用

亚行外壳

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

rm -rf /数据/数据/软件包名称

请使用您自己的名称补充软件包名称,例如com.map.map


0

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


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可以正常工作,而我不必再次进行出厂重置。

希望能帮助到你


0

对我来说,还有更多。只需删除/data/data/appfolder并没有帮助。

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

因此,在这种情况下,更改libs文件夹名称对我有用。


0

我找到了一种在非根设备和模拟器上均可使用的解决方案。虽然您不能直接删除非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”上进行了试用。


0

显然是由于卸载不当(很可能是由于电缆连接错误)引起的。

解决方案:从播放商店 下载SDMaid,然后删除尸体文件(垃圾文件)。重新运行应用程序。(但是您需要植根设备)


0

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

为我工作。

希望对您有帮助!


-1

根目录设置和恢复出厂设置不是我的选择,但我能够找到较旧版本的APK并进行安装(我猜这与未能正确卸载的版本相同)。再次卸载该版本后,我能够安装新版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.