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


120

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

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

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


ええ、証明書の全体のポイントは、あなたが、元の証明書をお持ちでない場合は、再生成1に持っているつもりです...これをやってから人々を停止することです
edthethird

それだけです、私は元の証明書を持っていますが、apkをデコード/再構築するとそれが削除されました。
svarog

回答:


284

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

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

詳細はここをチェック


11
これが答えになるはずです。元の答えの3に対して、27の賛成票が出てきます。
カイル

1
これを実行してAPKをインストールしようとすると、INSTALL_FAILED_DUPLICATE_PERMISSIONエラーが発生する可能性があります。これは、元のAPKを上書きできないときに発生します(たとえば、システムまたは組み込みアプリ)
Couitchy

@Couitchy adb shell pm install -r /data/tmp/myapk.apk
Dr Deo

13
jarsignerの-verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore〜/ .android / debug.keystore app.apk androiddebugkey -storepassアンドロイド:あなたがして、デバッグキーを使用することができ、キー作成邪魔したくない場合
ペレット

3
とを使用するjarsignerと違いがありapksignerますか?1つは署名してからzipaligningを行い、もう1つはzipaligningしてからsigninigを行う必要があります
Maria Ines Parnisari

72

自動化されたプロセス:

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

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

免責事項:開発者イム:)

手動プロセス:

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

一度キーストアを生成し、それを使用してunsignedAPK に署名する必要があります。にあるJDKによって提供されるkeytool %JAVA_HOME%/bin/

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

手順2または4:Zipalign

zipalign これは、たとえばAndroid SDKで提供されるツールで%ANDROID_HOME%/sdk/build-tools/24.0.2/、APKをPlayストアにアップロードする場合の必須の最適化手順です。

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

注:古いものを使用しているときjarsigner、あなたはzipalignに必要AFTERの署名。新しいapksigner方法を使用するときは、署名する前に行います(混乱するでしょう、私は知っています)。apksignerはAPKアライメントと圧縮を保持するため(jarsignerとは異なり)、apksignerの前にzipalignを呼び出すと正常に機能します。

あなたはアライメントを確認することができます

zipalign -c 4 my-aligned.apk

手順3:署名して確認する

build-tools 24.0.2以前の使用

使用jarsignerキーツールのように、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署名スキームv2が導入されています。これは、アプリのインストール時間を短縮し、APKファイルへの不正な変更に対する保護を強化する新しいアプリ署名スキームです(詳細については、こちらこちらをご覧ください)。したがって、Google apksigner(duh!)という独自のapk署名者を実装しました。スクリプトファイルは%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

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


6
uber-apk-signerをありがとう!素晴らしいツール!
カントーニ2017年

2
build-tools 24.0.3の場合、zipalignを呼び出す正しい方法は次のとおりです:zipalign -p 4 my.apk my-aligned.apk
kinORnirvana

あなたの説明をありがとう!最初にuber-apk-signerを試しましたが、おそらくoracles "official" javaではなくopenJDKがシステムにインストールされているために失敗しました。だから私は手動で試しましたが、失敗しました(まだ同じエラーです[INSTALL_PARSE_FAILED_NO_CERTIFICATES])。uber-apk-signerで確認すると、さらに洞察が得られましたsignature VERIFY FAILED[...] ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.RSA uses digest algorithm 2.16.840.1.101.3.4.2.1 and signature algorithm 1.2.840.113549.1.1.1 which is not supported on API Levels [[15, 17]]。はい、Android 4.2.2、SHA256はありませんか?アイデア?
アンチプレックス2017

@antiplexはSOではなくgithubで問題を報告してください
Patrick Favre

@ for3stあなたは私の問題がapk署名に関する私の限られた知識によるものではなく、uber-apk-signerの何らかの形の非互換性によるものであるかもしれないことを意味しますか?しかし、それでも手動の方法も失敗しますが、これはツールとは無関係のようです...
アンチプレックス

14

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

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


4

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

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

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

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.