9

我正在尝试将修改后的 apk 文件安装到我的 Nook Simple Touch 上。我修改了 Reader.apk 程序,重新编译它,并用我自己的密钥对其进行了签名。

我知道如果签名密钥不同,您将无法在当前应用程序上安装应用程序。INSTALL_FAILED_UPDATE_INCOMPATIBLE但是,即使在完全卸载原始 Reader.apk 应用程序后,我也会收到错误消息。

检查 packages.xml 文件后,我删除了旧 Reader.apk 应用程序的条目。而且我仍然收到此错误。该应用程序已完全卸载,我无法安装修改后的版本。

即使使用我的新密钥签署原始源代码也会导致出现此错误(因此它与我所做的实际更改无关)。

4

3 回答 3

6

根据文档,“如果以前安装的同名软件包与新软件包具有不同的签名(并且旧软件包的数据未删除),则会出现此错误。”

如果您确定已将其删除,则可能在某些地方旧签名仍在浮动,该删除没有,嗯,删除。擦除模拟器/设备数据应该可以解决问题。

于 2014-03-10T07:46:36.693 回答
3

如果原始应用程序已完成删除,但我们仍然收到相同的消息:

INSTALL_FAILED_UPDATE_INCOMPATIBLE 

转到Settings> Apps,您将找到带有消息的应用程序:

“未为此用户安装”

,我们必须使用以下选项为所有用户手动卸载:

“为所有用户卸载”

于 2015-09-21T18:29:51.120 回答
2

解决办法是修改AndroidManifest.xml文件。您需要删除sharedUserId第二行中的属性。

Reader.apk 文件是一个系统应用程序,它是由设备本身的制造商制作的,他们还制作了其他几个应用程序。因此,他们能够设置 sharedUserId 标志,这允许他们所有的应用程序相互交互。作为安全设计,所有应用程序都必须具有相同的签名密钥。当我尝试安装修改后的应用程序时,它无法安装,因为它试图与其他应用程序共享用户 ID,但缺少正确的签名密钥。

通过移除 xml 中的标志,您可以成功安装修改后的应用程序。AndroidManifest.xml从此文件中更改以下行:

<manifest android:sharedUserId="android.media" android:versionCode="1"
    android:versionName="1.0" package="com.bn.nook.reader.activities"
    xmlns:android="http://schemas.android.com/apk/res/android">

对此:

<manifest android:versionCode="1" android:versionName="1.0"
    package="com.bn.nook.reader.activities"
    xmlns:android="http://schemas.android.com/apk/res/android">`

有关更多详细信息,请参阅此 xda 帖子。(完全披露:我写了那篇文章。)

于 2013-01-29T20:55:50.007 回答