由smali生成的classes.dex不在.apk中工作

时间:2012-03-10 13:31:31

标签: android reverse-engineering smali

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

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

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

以下是我所做的步骤:

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

    <?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 devloper签署,现在由我签署。但有可能解决这个问题吗?

    谢谢! 菲利克斯

1 个答案:

答案 0 :(得分:3)

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

此外,您的新apk现在可能已经压缩了资源。我不确定android会如何处理。在aapt生成的apk文件中,资源(图像,xml等)压缩,因此它们可以直接映射到内存中,而不必提取它们。

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