![](/img/trans.png)
[英]Android APK INSTALL_FAILED_UID_CHANGED Now Premission Denied
[英]Android INSTALL_FAILED_UID_CHANGED
我一直在使用我的 Nexus 4 在 Android 上进行调试,但是我最近在这里遇到了这个错误。 在对这个错误做了一些研究之后,这似乎是应用程序没有被正确删除的问题。 我正在调试的应用程序在我的其他 Android 设备以及模拟器上运行良好,此错误仅发生在我的 Nexus 4 上。我将设备插入计算机,并尝试删除数据/数据文件夹,但我仍然收到同样的问题。 我还检查了设置应用程序以检查它是否确实已卸载。
有谁知道如何解决这个问题? 根据一些用户的说法,我需要 root 访问权限才能正确删除数据/数据,这是真的吗? 或者还有其他方法可以解决这个问题吗?
有时您还必须卸载数据文件夹。 对于我来说,我在用户空间的包com.kikin.cts
,并在文件夹目录/data/data/com.kikin.cts
。 保持获取INSTALL_FAILED_UID_CHANGED
,但在删除数据文件夹后,错误消失了。
对于有根设备:
运行以下命令
adb rm -rf /data/data/<your.package.name>
对于非root设备:
重新启动您的设备,并清除您的项目。 基本上,卸载会为您完成此操作,以防万一然后尝试重新启动。
您可能引入了导致这种情况的 SharedUserID。
我得到了另一个适合我的解决方案。 您可以更改应用程序的包名,以便设备将其识别为不同的应用程序并成功完成安装。 对于那些没有 root 访问权限并且也不想重置设备的人来说可能会有所帮助。
我的 Nexus 5 上确实有 root,但没有任何效果,所以我不得不从有效的设置中恢复出厂设置。
对我来说,这个技巧是通过取消选中“开发人员选项”部分中的“通过 USB 验证应用程序”来完成的。
我想我会分享这个以防万一它对某人有帮助......我在 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 版本之间的冲突时才有效,但如果您处于类似情况,则值得一试。
在大多数情况下, INSTALL_FAILED_DEXOPT
或INSTALL_FAILED_UID_CHANGED
意味着您没有足够的空间来安装应用程序。
从您的设备中删除一些未使用的应用程序或至少删除您的应用程序的当前版本。
adb uninstall package-name
在极少数情况下,应用程序数据可能存在问题。 根据您的设备是否已植根,您有两个选择
无根
恢复出厂Settings -> Backup and reset -> Factory data reset
(至少对于三星 S5)
植根(或模拟器)
adb shell "rm -rf /data/data/package-name"
这对我有用:
adb shell rm -rf /system/app/<package.name>
在 ADB shell 中,您可以通过两种方式找到解决方案。 1. 保留数据并找到解决方案 2. 解决方案不持久化数据
1. 的解决方案是通过命令提示符从 ADB 路径运行命令adb chown -R UID:UID /data/data/your.package.name
。
2.的解决方案是从同一路径运行命令adb rm -r /data/data/your.package.name
。
过去几天我在我的 Galaxy Note 3 测试设备上遇到了这个问题。 我一直在使用 Calabash-Andrdoid 并在 install_app 方法尝试执行时不断收到错误 INSTALL_FAILED_UID_CHANGED。 我一直在努力解决这个问题,因为我有两个测试设备遇到了这个问题。 我尝试了以上所有方法,包括清空我的 /data/data/ app 和 app.test 文件夹。 我什至删除了 Xamarin 安装的检测后端内容,因为这是我用来开发应用程序的平台。 我找不到任何其他东西可以从设备上手动删除。 当我尝试在第三台设备上完成工作并发现一切运行成功时,我意识到问题出在设备上。 最后,唯一对我有用的是对其中一个设备执行出厂重置。 我希望这有帮助。
谢谢,-Shah
这是现有答案未涵盖的内容。 这发生在我身上的模拟器上。 如果我重置用户数据,我会第一次得到 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 不喜欢某些方法名称,但这就是问题所在。
好的,所以对于我的LG NEXUS 4 来说,这里是解决方案:(
和
假设它是: 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"
在职的?
我删除了/data/data/my.package.name
和/data/app/my.package.name.apk
,问题仍然存在。
但是我找到了一个文件夹/data/user/0/my.package.name
,将其删除并解决了问题。
只需卸载应用程序本身(而不是数据文件夹)然后重新安装它,它应该没问题。 Android 的抱怨是因为您之前可能已经从另一台计算机上调试过该应用程序。
对我来说,还有一点。 简单地删除/data/data/appfolder
没有帮助。
另一个原因是我的外部库没有包含在.apk
文件中,因为文件夹的名称是lib而不是libs 。 这导致[INSTALL_FAILED_DEXOPT]
在apk
安装过程中出现[INSTALL_FAILED_UID_CHANGED]
。
因此,在这种情况下,更改 libs 文件夹名称对我有用。
无根设备的解决方案。 转到应用程序管理器并卸载名为“Selendroid”的应用程序,然后重试。 这个解决方案对我有用。
我解决了这个问题,也许其他人也能用。
我正在重新启动手机,然后再删除一些应用程序。 并再次尝试安装,它的工作!
也许问题是关于存储。 我不知道为什么,但现在可以了。 祝你好运! (抱歉英语不好)
采用
亚行外壳
去壳。
然后运行以下命令:
rm -rf /data/data/包名
请用您自己的包名替换包名,例如 com.map.map
对于从他们的计算机运行 Junit 样式测试并收到此错误的任何人 - 虽然控制台告诉我我的应用程序存在问题(以“com.myapp.stuff”格式打包),但真正的问题是我的测试代码包,如果您在设备上运行,它会作为一个单独的应用程序安装,包名称类似于“com.myapp.stuff.test”。 使用应用程序管理器删除测试代码“应用程序”并删除我的实际应用程序为我解决了这个问题。 我在这里发布这个答案是为了挽救其他人的“废话”时刻。
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 工作正常,我不必(再次)恢复出厂设置。
希望能帮助到你
我找到了一个既适用于无根设备又适用于模拟器的解决方案。 虽然您无法直接删除非 root 设备上的数据文件夹,但您可以使用pm
命令来执行此操作:
adb shell
pm uninstall <app name>
(即 com.example.myapp)pm uninstall <test app name>
(ie com.example.myapp.test) - 如果之前没有安装过测试应用,你可能会收到一个错误。 似乎出于某种原因,当从 Android UI 卸载应用程序时这不起作用(可能它不会删除数据文件夹)但是当通过pm
命令卸载pm
它确实起作用。
在“Nexus 5”和“OnePlus One”上进行了尝试。
显然是因为卸载不当(可能是由于电缆连接错误)。
解决方案从游戏商店下载SDMaid ,并删除尸体文件(垃圾文件)。 重新运行应用程序。 (但你需要让你的设备植根)
我遇到了类似的问题。 原因是您没有卸载应用程序的所有组件。我的解决方案是:手动删除/data/data/com.eg.android.AlipayGphone。
对我来说很好。
我希望它对你有帮助!
安装应用程序更新时会发生这种情况,并且更新版本无法使用与先前版本相同的用户 ID 运行。
Android 通常会自行分配用户 ID,当应用更新时,它会继承之前版本的用户 ID。 有一个例外:Android 允许多个应用在同一个用户 ID 上运行, android:sharedUserId
是它们在其清单中指定(通过在<manifest>
元素中设置android:sharedUserId
属性)。 如果新版本请求共享用户 ID,但先前安装的用户 ID 没有,则用户 ID 将更改,您将收到错误消息。 (大概也是在尝试从共享用户 ID 升级到没有的版本时。)
您得到的错误取决于 Android 版本:在 Android 4.4.4 上我看到了INSTALL_FAILED_UID_CHANGED
,而 Android 10 报告INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
。
如果应用程序在未删除其数据的情况下被卸载(这可以通过adb shell
和pm uninstall -k
——如果您知道自己在做什么),您也可能会收到此错误。
两个应用程序数据位置在这里发挥作用:
/data/data/packageID
找到数据。/Android/data/packageID
。从中恢复本质上意味着确保没有包(或剩余的应用程序数据)具有相同的包名称和不兼容的用户 ID。 有多种方法可以实现这一点:
如果您在您的设备上拥有 root 权限,您可以执行一些操作以在更新期间保留您的应用程序数据:
/sdcard/Android/data/packageID
),请在设备上打开 shell,输入su
切换到 root 模式,并重命名目录(将包 ID 更改为不存在的)。 这也会将目录的文件所有权从应用程序的用户更改为sdcard
。如果您在您的设备上没有 root 权限,您的选择会更加有限。
/sdcard/Android/data/packageID
),您(可能)可以在卸载前备份它,并在安装新版本后恢复它。 如果应用程序允许,最新版本的 Android 支持备份私有应用程序数据; 您也许可以使用备份应用程序以这种方式保存您的应用程序数据,但我还没有尝试过。生根和恢复出厂设置对我来说不是一种选择,但我能够找到我的 APK 的旧版本并安装它(我猜它是同一个未能正确卸载的)。 再次卸载后,我能够安装新版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.