web-dev-qa-db-ja.com

コンパイル済みのAPKに署名する方法

元のソースコードが失われたため、apktoolでAPKをデコードしたため、レイアウトxmlファイルの問題を修正できました。次に、apktoolでバックアップを再構築し、デバイスにインストールしようとしたときに(adb:adb install appname.apkを使用して)このエラーが発生しました:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

ただし、元のapkはキーストア(Eclipse IDE)によって署名されましたが、これはそうではありません。Eclipseの外部にある元のキーストーンファイルで適切に署名するにはどうすればよいですか?

101
svarog

を使用してキーを作成する

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

次に、を使用してapkに署名します。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

詳細はこちらをご覧ください

223
user3854546

自動化プロセス:

このツールを使用します(Googleの新しいapksignerを使用します):

https://github.com/patrickfav/uber-apk-signer

免責事項:開発者です:)

手動プロセス:

ステップ1:キーストアの生成(1回のみ)

キーストアを一度生成し、それを使用してunsigned apkに署名する必要があります。 keytoolJDKが提供%Java_HOME%/bin/にあります

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

ステップ2または4:Zipalign

zipalignAndroid SDKが提供するツール APKをPlayストアにアップロードする場合、%Android_HOME%/sdk/build-tools/24.0.2/は必須の最適化手順です。

zipalign -p 4 my.apk my-aligned.apk

注:古いjarsignerを使用する場合、zip調整する必要がありますAFTER signing。新しいapksignerメソッドを使用する場合は、それを行いますBEFORE signing(わかりにくい)。 appksignerが正常に動作する前にzipalignを呼び出す apksignerはAPKのアライメントと圧縮を保持するため(jarsignerとは異なります)。

verifyとのアライメント

zipalign -c 4 my-aligned.apk

ステップ3:署名と検証

Build-tools 24.0.2以前を使用する

jarsigner を使用します。これは、keytoolと同様に、 JDKディストリビューションに付属%Java_HOME%/bin/にあり、次のように使用します。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

で確認できます

jarsigner -verify -verbose my_application.apk

Build-tools 24.0.3以降を使用する

Android 7.0では、APK Signature Scheme v2が導入されました。これは、アプリのインストール時間を短縮し、APKファイルへの不正な変更に対する保護を強化する新しいアプリ署名スキームです(詳細は here および here を参照してください)詳細)。そのため、Googleは apksignerというapk署名者 (duh!)を実装しました。スクリプトファイルは%Android_HOME%/sdk/build-tools/24.0.3/にあります(.jarは/libサブフォルダーにあります)。このように使用します

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

で確認できます

apksigner verify my-app.apk

公式ドキュメントはここにあります。

53
patrickf

最速の方法は、デバッグキーストアで署名することです。

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.Android/debug.keystore app.apk androiddebugkey -storepass Android

またはWindowsの場合:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.Android/debug.keystore test.apk androiddebugkey -storepass Android
12
Pellet

Jarsignerを使用してAPKに署名します。元のキーストアで署名する必要はなく、新しいキーストアを生成するだけです。詳細をお読みください: http://developer.Android.com/guide/publishing/app-signing.html

6
Nikolay Elenkov

すべてのプロジェクトで編集するためにbatファイルを作成したくない場合、またはkeytoolsおよびjarsignerプログラムに関連するすべてのコマンドを覚えて、1つのプロセスでそれを実行したくない場合は、このプログラムを使用してください。

http://lukealderton.com/projects/programs/Android-apk-signer-aligner.aspx

毎回すべてのファイルの場所を入力しなければならない長いプロセスにうんざりしていたので、私はそれを作りました。

このプログラムは設定を保存できるので、次回起動するときに、Generateを押すだけで処理されます。それでおしまい。

インストールする必要はありません。完全に移植可能で、同じフォルダ内のCSVに構成を保存します。

4
Luke Alderton

更新された回答

チェック https://shatter-box.com/knowledgebase/Android-apk-signing-tool-apk-signer/

古い回答

check apk-signer アプリに署名する良い方法

4
shereifhawary