Apkがある場合、現在の署名を削除し、別の.keystoreファイルを使用して再署名してもアプリケーションをインストールできますか?
更新:Jorgesysのソリューションで動作するようになりましたが、前に混乱したのは、.apkを解凍し、META-INFフォルダーを削除してからファイルの拡張子を元に戻した.apk。私がやるべきことは、winzipでそれを開き、winzip内のフォルダーを削除することです。
これを試して
1).apkの拡張子を.Zipに変更します
2)META-INFフォルダを開いて削除します
3)拡張子を.apkに変更します
4)新しいキーストアでjarsignerとzipalignを使用します。
それが役に立てば幸い
簡単な解決策を探している場合は、オープンソースのapk-resignerスクリプトまたはGoogleのapksignerツールを使用できます
オープンソースのapk-resignerスクリプト https://github.com/onbiron/apk-resigner
必要な作業は、スクリプトをダウンロードして、次のように入力するだけです。
./signapk.sh application.apk keystore key-pass alias
apksigner
コマンドラインツールを使用できます。apksigner sign --ks release.jks application.apk
Apksignerツールの詳細については、開発者Androidサイトをご覧ください。
https://developer.Android.com/studio/command-line/apksigner.html
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
v2署名スキーマ (ASでbuild-tools 24.0.3+を使用すると自動的になります)を使用する場合、v2が署名データを追加するため、APKからMETA-INFフォルダーを削除することはできませんZipメタブロックに。
Googleの 新しいapksigner build-tools 24.03(Android 7)で導入されたものは、APKを再署名できます。署名コマンドを繰り返すだけで、新しいキーストア/証明書で署名できます(古いキーストア/証明書は削除されます)。
apksigner sign --ks keystore.jks signed_app.apk
恥知らずのプラグ:複数のapkに署名でき、ログ出力の使用がより簡単なツールが必要な場合: https://github.com/patrickfav/uber-apk-signer (バックグラウンドでGoogleのapksigner.jarを使用)
リリースの署名:$ 1.apk-> $ 1_release.apk "GeneralMills&GoogleApps#2012ステップ1:以前の署名を削除する.apkの拡張子を.Zipに変更するフォルダーMETA-INFを開いて削除する拡張子を.apkまたはコマンドに変更:•Zip [originalapk]例:•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- verbose -keystore release.keystore -signedjar "$ 1" _unaligned.apk "$ 1" .apk release
ステップ3:整列コマンド:•zipalign -f 4 [unalignedapk] [releaseapk]例:•C:\ Users\G535940\Downloads\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\too ls> 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
上記のすべてのソリューションが機能します。再圧縮したときにうまくいかなかった理由に注意してください:
.apk内のファイルの一部は、保存されたままにする必要があります(0%の圧縮)。これは、Androidはメモリマッピング(mmap)を使用して、メモリにアンパックせずにコンテンツを読み取るためです。このようなファイルは.oggといくつかのアイコンです。
キーが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以降、余分な-sigfile CERT
オプションが必要と思われます。