52

APK がある場合、現在の署名を削除して、別の .keystore ファイルで再署名し、アプリケーションをインストールする方法はありますか?

更新: Jorgesys のソリューションで動作させることができましたが、以前に失敗したのは、.apk を解凍し、META-INF フォルダーを削除してから再圧縮し、ファイル拡張子を .apk に戻したところです。私がすべきだったのは、それをwinzipで開き、winzip内のフォルダーを削除することだけでした。

4

7 に答える 7

74

これを試して

1) .apk の拡張子を .zip に変更します

2) META-INF フォルダーを開いて削除します。

3) 拡張子を .apk に変更します

4) jarsigner を使用し、新しいキーストアで zipalign を実行します。

それが役に立てば幸い

于 2010-07-16T17:27:30.113 に答える
30

手早く簡単な解決策を探している場合は、リビジョン 24.0.3 以降で利用可能なGoogle のapksignerコマンド ラインツールを使用できます。

apksigner sign --ks release.jks application.apk

apksigner ツールの詳細については、開発者の Android サイトをご覧ください。

https://developer.android.com/studio/command-line/apksigner.html

または、代わりに、オープンソースの apk-resigner スクリプトを使用することもできます

オープン ソースの apk-resigner スクリプトhttps://github.com/onbiron/apk-resigner

スクリプトをダウンロードして、次のように入力するだけです。

   ./signapk.sh application.apk keystore key-pass alias
于 2013-04-22T11:31:22.520 に答える
11

v2 署名スキーマ(AS で build-tools 24.0.3+を使用すると自動的に使用されます) を使用する場合、v2 はその署名データを zip メタ ブロックに追加するため、APK から META-INF フォルダーを削除することはできません。

ただし、build-tools 24.03 (Android 7) で導入されたGoogle の新しい apksignerは、APK を再署名できます。署名コマンドを繰り返すだけで、新しいキーストア/証明書で署名できます (古いものは削除されます)。

apksigner sign --ks keystore.jks signed_app.apk

恥知らずなプラグイン: 複数の apk に署名でき、より優れたログ出力を備えたより簡単なツールが必要な場合: https://github.com/patrickfav/uber-apk-signer (バックグラウンドで Google の apksigner.jar を使用)

于 2016-11-18T15:31:40.537 に答える
9
zip -d my_application.apk META-INF/\*
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
于 2016-01-17T21:05:19.503 に答える
7

リリースの署名: $1.apk -> $1_release.apk" GeneralMills&GoogleApps#2012 ステップ 1: 以前の署名を削除する .apk の拡張子を .zip に変更します フォルダを開いて削除します META-INF 拡張子を .apk に変更します またはコマンド: • zip [元の apk] 例: • zip "$1".apk -d

ステップ 2: release.keystore で署名. コマンド: • jarsigner –verbose –keystore [keystorefile] –signedjar [unalignedapk] [originalapk] alias_name 例: • C:\Program Files\Java\jdk1.6.0_43\bin> jarsigner -詳細 -keystore release.keystore -signedjar "$1"_unaligned.apk "$1".apk リリース

ステップ 3: 整列 コマンド: • zipalign -f 4 [unalignedapk] [releaseapk] 例: • C:\Users\G535940\Downloads\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\tools> zipalign -f 4 "$1"_unaligned.apk "$1"_release.apk

ステップ 4: クリーンアップ コマンド: • rm 4 [unalignedapk] 例: • rm "$1"_unaligned.apk

追加のコマンドが役立つ場合があります。

  1. keytool keytool -genkey -alias -keystore で新しい鍵を生成するには

  2. キーを一覧表示する keytool -list -keystore

Facebook 機能のキーハッシュを生成するコマンド

コマンド: • keytool -exportcert -alias alias_name -keystore [keystorefile] | openssl sha1 -バイナリ | openssl base64

例: • C:\Program Files\Java\jdk1.6.0_43\bin>keytool -exportcert -alias release -keyst ore release.keystore |opens l sha1 -binary | openssl base64

注: APK に署名するために、JDK を 1.7 から 1.6.0_43 アップデートにダウングレードしました。

理由: JDK 7 以降、デフォルトの署名アルゴリズムが変更されたため、APK に署名するときに署名アルゴリズムとダイジェスト アルゴリズム (-sigalg および -digestalg) を指定する必要があります。

コマンド: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] [originalapk] alias_name

于 2013-04-08T08:59:44.163 に答える
3

キーが に保存されていると仮定するとkeys.keystore、次を実行できます。

$ keytool -list -keystore keys.keystore
Your keystore contains 1 entry

your_key_alias, Jan 3, 2013, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 8C:C3:6A:DC:7E:B6:12:F1:4C:D5:EE:F1:AE:17:FB:90:89:73:50:53

キーのエイリアスを決定します。次に実行します。

zip -d your_app.apk "META-INF/*"
jarsigner -verbose -keystore keys.keystore \
   -sigalg MD5withRSA -digestalg SHA1 -sigfile CERT \
   your_app.apk your_key_alias

your_app.apkという名前のキーで再署名しますyour_key_alias

JDK 8 以降では、 extra-sigfile CERTオプションが必要なようです。

于 2016-10-13T13:27:39.790 に答える
3

上記のすべてのソリューションが機能します。再圧縮したときに機能しなかった理由をメモしてください。

.apk 内の一部のファイルは保存しておく必要があります (圧縮率 0%)。これは、Android がメモリ マッピング (mmap) を使用して、メモリにアンパックせずにコンテンツを読み取るためです。このようなファイルは、.ogg と一部のアイコンです。

于 2013-06-11T11:07:58.663 に答える