2

我试图从 samli 生成的 classes.dex 生成 .apk。但我得到了这些错误:

失败 [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE](当我尝试在模拟器上安装 .apk 时)

失败 [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES](当我尝试在手机上安装 .apk 时)。

以下是我所做的步骤:

  1. 从现有 .apk 中提取的 classes.dex
  2. ./baksmali classes.dex
  3. ./smali out
  4. mv out.dex classes.dex
  5. 提取文件夹中的整个 .apk 内容并替换新的 classes.dex
  6. 生成一个 .zip 文件并将其重命名为 *.apk
  7. 签署应用程序:jarsigner -verbose -keystore my-release-key.keystore MyFieldTest.apk mykey

这是清单的开头:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:sharedUserId="android.uid.phone"
            package="com.htc.fieldtest"
            android:versionCode="1"
            android:versionName="1.0" >

<application android:label="Field Test">
    <activity android:label="@string/app_name" 
              android:name="FieldTestActivity" 
              android:process="com.android.phone" 
              android:launchMode="singleInstance">

我知道该应用程序最初由 HTC 开发人员签名,现在由我签名。但是有没有可能解决这个问题?

谢谢!菲利克斯

4

1 回答 1

3

听起来您可能在新的 apk 文件中有多个签名。在创建新的 zip 之前尝试删除 META-INF 目录中的文件。

此外,您的新 apk 现在可能已压缩资源。我不确定android将如何处理。在aapt生成的apk文件中,资源(图片、xml等)没有被压缩,因此可以直接映射到内存中,无需解压。

如果您不修改资源,最好的办法是替换原始 apk 文件中的 classes.dex 文件,而不是创建一个新文件。如果您也尝试修改资源,则应该使用 apktool 来提取/重新打包 apk。

于 2012-03-11T03:58:19.140 回答