APK がある場合、現在の署名を削除して、別の .keystore ファイルで再署名し、アプリケーションをインストールする方法はありますか?
更新: Jorgesys のソリューションで動作させることができましたが、以前に失敗したのは、.apk を解凍し、META-INF フォルダーを削除してから再圧縮し、ファイル拡張子を .apk に戻したところです。私がすべきだったのは、それをwinzipで開き、winzip内のフォルダーを削除することだけでした。
これを試して
1) .apk の拡張子を .zip に変更します
2) META-INF フォルダーを開いて削除します。
3) 拡張子を .apk に変更します
4) jarsigner を使用し、新しいキーストアで zipalign を実行します。
それが役に立てば幸い
手早く簡単な解決策を探している場合は、リビジョン 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
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 を使用)
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
リリースの署名: $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
追加のコマンドが役立つ場合があります。
keytool keytool -genkey -alias -keystore で新しい鍵を生成するには
キーを一覧表示する 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
キーが に保存されていると仮定すると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オプションが必要なようです。
上記のすべてのソリューションが機能します。再圧縮したときに機能しなかった理由をメモしてください。
.apk 内の一部のファイルは保存しておく必要があります (圧縮率 0%)。これは、Android がメモリ マッピング (mmap) を使用して、メモリにアンパックせずにコンテンツを読み取るためです。このようなファイルは、.ogg と一部のアイコンです。