华为荣耀v8发布会优酷手机安装优酷显示UID不一致怎么办

手机安装不上QQ,提示安装签名不一致,是什么意思。怎么解决_百度知道
手机安装不上QQ,提示安装签名不一致,是什么意思。怎么解决
我有更好的答案
手机上自带的qq是在系统内的 升级手机自带软件将安装在手机内存中 而系统中仍然会保留原版本文件 只不过在内存中的软件替代了系统中的软件 相当于直接安装整个软件 更新版本卸载后会返回原系统版本 自带软件无法删除 除了root之外没有办法 但是root后就算删除原版本软件也无法增加手机内存 所以原版本软件根本没必要删除 至于你说的无法替换是软件种类不同 安装后会出现两种版本qq在手机上 相当于再安装
把以前的QQ先却
已经卸载了?然后装不上
电脑和手机不一致
这个 重新下载一个QQ程序
其他类似问题
为您推荐:
签名的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1.每个软件安装在手机的时候,手机都会分配一个UID为唯一标示,当软件App覆盖安装的时候,这个UID会发生变化吗?是不是固定不变的?2.如果系统在app覆盖安装的时候UID发生变化了,是否合理?如果不合理,那不合理的原因是什么?3.目前对于Android系统而言,有没有一些明确的规则规定系统ROM在app覆盖安装时,UID必须固定不发生变化?
UID和sharedUID并不是一回事,题主不要被误导了。下面回答问题:1.每个软件安装在手机的时候,手机都会分配一个UID为唯一标示,当软件App覆盖安装的时候,这个UID会发生变化吗?是不是固定不变的?--------一般情况下不会变化,除非出现错误或者异常. 这个是PackageManagerService在scanPackageLI中实现的,/data/system/packages.xml也就是packageSettings中保存了package的信息,其中就包括了uid,在覆盖安装的第二部覆盖中,会读取packageSetting中Uid赋给新安装的应用
pkg.applicationInfo.uid = pkgSetting.appId;
2.如果系统在app覆盖安装的时候UID发生变化了,是否合理?如果不合理,那不合理的原因是什么?-----------不合理,你要知道,data下面的/data/data/com.douniwan.douniwan/这个目录的owner就是你的应用(你可以ls下看看),如果uid发生变化了,那么新安装后的应用就会对这个目录失去读写权限而导致问题(如保存的用户数据没了),因此,在Pms安装的过程中会对这一异常进行检查,如果发现UID不匹配就会报INSTALL_FAILED_UID_CHANGED异常。然后,对于特殊的app,如system的app,pms还会进行修复,也就是删除这个更新的包,重新创建data目录。3.目前对于Android系统而言,有没有一些明确的规则规定系统ROM在app覆盖安装时,UID必须固定不发生变化------如上面的回答1和2,现有的机制就是保证。sharedUid是另外一种权限控制,不要搞混淆了。
注意:以下部分为从各渠道零碎资料整理而成的理解,并不一定准确,希望能抛砖引玉。&br&&br&UID的作用是为了确保本应用的资源不会被其他程序非法获取。&br&类似于Linux的UID,简单理解为权限管理即可。&br&应用在第一次被安装的时候分配一个范围在[Process.&a href=&///?target=http%3A///reference/android/os/Process.html%23FIRST_APPLICATION_UID& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FIRST_APPLICATION_UID&i class=&icon-external&&&/i&&/a&,Process.&a href=&///?target=http%3A///reference/android/os/Process.html%23LAST_APPLICATION_UID& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LAST_APPLICATION_UID&i class=&icon-external&&&/i&&/a&]的UID,也就是[]。&br&下面回答这三个问题&br&&br&&b&1.覆盖安装(同版本覆盖以及升级)时,一般UID不会发生变化,一般都是在安装时确定的。&/b&&br&
PackageManager中定义了一个INSTALL_FAILED_UID_CHANGED变量。&br&&blockquote&&div class=&highlight&&&pre&&code class=&language-text&&Installation return code: this is passed to the {@link IPackageInstallObserver} by
{@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
the new package is assigned a different UID than it previously held.
&/code&&/pre&&/div&&/blockquote&意思就是说在安装包时如果出现UID不一致,就会安装失败。&br&实际测试使用统一包名应用进行升级、覆盖安装UID不变,卸载后重新安装UID会递增,与之前不同。&br&&br&&b&2.既然前面说到了一般情形,那肯定有例外。&/b&&br&一般任何两个应用的UID都不一样,那如果多个应用要互相访问数据(数据库,缓存,文件),而除此之外的其他应用不能访问他们的数据该怎么办?&br&这时候android:sharedUserId(AndroidManfest.xml manifest节点属性)就发挥作用了。只要不同应用使用了相同的android:sharedUserId,而且,使用了相同的秘钥进行签名。就可以完成之前说的应用之前数据互访。&br&上面说的有什么卵用呢?&br&考虑这样一种情形,手机安装了A的1.0版本、B的1.0版本,都没有定义android:sharedUserId属性。安装完成后UID都不同。现在2.0版本之后都带上这个属性。根据Android官方描述,他们升级后要UID要一样,那肯定A或者B肯定有一个的UID要变化。&br&&img src=&/1a6bbb0f8_b.png& data-rawwidth=&751& data-rawheight=&186& class=&origin_image zh-lightbox-thumb& width=&751& data-original=&/1a6bbb0f8_r.png&&什么?你说有可能根本不能升级,那这就是个bug了。可以报给Google了。&br&另外一种情形,就是root后可以通过使用root权限,人为修改uid。理论上绝对可信。但是貌似没什么卵用。要拿数据的话,直接拿就行了,没必要多此一举改uid。当然,这是特殊情形。&br&&br&&b&3.根据公开的文档,并没有像JVM一样有虚拟机规范类似的东西。只是代码逻辑里面是不变的。&/b&&br&具体细节官方PackageManagerService(附录第一个链接),代码太壮观了。比如PackageManagerService的scanPackageLI方法太壮观了。。。&br&&br&&br&具体是如何实现的,我觉得可研究下apk的安装过程,里面会有详细的介绍。&br&然后也没必要纠结于UID的变化,一般是不会变化的,除了一些特殊情形。&br&&br&参考&br&&ul&&li&PackageManagerService &a href=&///?target=http%3A///file//java/ext/com.google.android/android/4.4.1_r1/com/android/server/pm/PackageManagerService.java%23PackageManagerService.getPackageUid%2528java.lang.String%252Cint%2529& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/file/repos&/span&&span class=&invisible&&/java/ext/com.google.android/android/4.4.1_r1/com/android/server/pm/PackageManagerService.java#PackageManagerService.getPackageUid%28java.lang.String%2Cint%29&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/li&&li&android:sharedUserId &a href=&///?target=http%3A///intl/zh-cn/guide/topics/manifest/manifest-element.html%23uid& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&manifest& | Android Developers&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///questions//android-install-failed-uid-changed& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Android INSTALL_FAILED_UID_CHANGED&i class=&icon-external&&&/i&&/a&&br&&/li&&li&查看UID工具(此程序只能查看运行中应用的UID) &a href=&///?target=https%3A///store/apps/details%3Fid%3Dcom.sayhello2theworld.te& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Activity Express Task Manager&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///intl/zh-cn/reference/android/os/Process.html%23myUid%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Process | Android Developers&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=https%3A///codesearch/view/l-546& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/codesear&/span&&span class=&invisible&&ch/view/2440146/#l-546&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///developerworks/aix/library/au-satuidgid/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Changing UIDs and GIDs&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///questions/9783765/what-is-shareduserid-in-android-and-how-is-it-used& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&java - What is sharedUserId in Android, and how is it used?&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A///questions/9796246/android-security-changing-uid& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Android Security Changing UID&i class=&icon-external&&&/i&&/a&&/li&&/ul&
注意:以下部分为从各渠道零碎资料整理而成的理解,并不一定准确,希望能抛砖引玉。UID的作用是为了确保本应用的资源不会被其他程序非法获取。类似于Linux的UID,简单理解为权限管理即可。应用在第一次被安装的时候分配一个范围在[Process.
&a data-title=&@王赟RxRead& data-editable=&true& class=&member_mention& href=&///people/54a10bc8c8bdff89f7db& data-hash=&54a10bc8c8bdff89f7db& data-tip=&p$b$54a10bc8c8bdff89f7db&&@王赟RxRead&/a& 针对第2条:例外情况&br&如果应用1.0版本没有android:sharedUserId, 安装到手机上。&br&升级到2.0,添加了android:sharedUserId,那么真的就无法安装了,错误的提示就是&br&Failure [INSTALL_FAILED_UID_CHANGED]&br&&br&So 没有例外。&br&所以,如果第一次发版是没有android:sharedUserId,那么,以后就没有机会有了。当然,你可以霸气的放弃老用户,或者说服他们卸载重新安装。&br&&br&在Nexus S with CyanogenMod Android 4.3 和Galaxy S4 with Android 5.0 下测试。&br&&br&额外补充:&br&1. 添加和删除 android:sharedUserId 都会触发UID改变,造成无法安装&br& 2. 在测试Nexus S with CyanogenMod Android 4.3 的过程中发现,升级失败后,原应用无法使用,使用的jni库无法加载。&br&
2.1 原因是/data/data/&package_name&lib如链接到/data/app-lib/&package_name&-1, 但升级后,链接到/data/app-lib/&package_name&-2,同时这个目录不存在,所以无法正常启动。&br&
2.2 重启手机后/data/app-lib/&package_name&-2会被重新建立,则应用可以正常工作。但/data/app-lib/&package_name&-1目录一直存在,即使在设置页面卸载应用,仍然存在。&br&
2.3 在一次正常(成功)的升级过程中&br&
/data/app-lib/&package_name&-1会被删除&br&
链接/data/data/&package_name&lib到/data/app-lib/&package_name&-2&br&
从APK中释放so到/data/app-lib/&package_name&-2&br&
看起来好像执行的顺序有问题,在升级失败的时候,已经链接过去,但是lib库没有从APK中释放出来到/data/app-lib/&package_name&-2。造成升级失败,而且原来的应用也无法使用了。&br&&br&(我去,本来写评论的,写成新答案了。补充一下结论就是 UID 一旦安装就不会改变。)
针对第2条:例外情况如果应用1.0版本没有android:sharedUserId, 安装到手机上。升级到2.0,添加了android:sharedUserId,那么真的就无法安装了,错误的提示就是Failure [INSTALL_FAILED_UID_CHANGED]So 没有例外。所以,如果第一次发版是没有a…
已有帐号?
无法登录?
社交帐号登录淘宝被卸载之后就无法再次安装了 手机淘宝安装失败,原因 UID不一样,如_百度知道
淘宝被卸载之后就无法再次安装了 手机淘宝安装失败,原因 UID不一样,如
你之前手机安装过手机淘宝 然后卸载了,但卸载前没有清除缓存。再次安装手机淘宝时有时就会出现应用未安装。
那怎么解决呢
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
手机淘宝的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 华为荣耀v8发布会优酷 的文章

 

随机推荐