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. ./スマリアウト
  4. mv out.dex クラス.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 ファイルを作成するのではなく、元の apk ファイルの classes.dex ファイルを置き換えることです。リソースも変更しようとしている場合は、代わりに apktool を使用して apk を抽出/再パックする必要があります。

于 2012-03-11T03:58:19.140 に答える