【问题标题】:classes.dex generated by smali not working in .apksmali 生成的 classes.dex 在 .apk 中不起作用
【发布时间】:2012-03-27 15:48:07
【问题描述】:

我尝试从 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 开发人员签名,现在由我签名。但是有没有可能解决这个问题?

谢谢! 费利克斯

【问题讨论】:

    标签: android reverse-engineering smali


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!现在我替换了原始 apk 中的 classes.dex。现在我的设备和模拟器出现以下故障:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]。第二点我想知道,samli 生成的 classes.dex 长度为 91'048B,原始长度为 91'060B。合理优化。还是?
    • 我用“aapt r ...”删除了 META-INF 文件夹中的所有文件。在签名之前,我在安装应用程序时遇到了失败:“失败 [INSTALL_PARSE_FAILED_NO_CERTIFICATES]”。在签署“失败 [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]”之后。知道该怎么做吗? "
    猜你喜欢
    • 2012-12-23
    • 2019-06-21
    • 2018-12-17
    • 2017-03-27
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多