Android APKファイルに署名する方法


111

apkファイルに署名しようとしています。どうすればいいのかわからない。良い方向を見つけることができません。私はプログラミングの経験がほとんどないので、どんな助けでもありがたいです。



2
この素晴らしいチュートリアルは、androidcookers.co.cc
2012/06 /…にあります。– Bratin

1
独自のキーストアの作成からEclipseで署名済みAPKをエクスポートするまで、この完全なチュートリアルを使用しました。mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

回答:


84

マニュアルは十分に明確です。作業を終えた後、どの部分に行き詰まるかを明記してください。

https://developer.android.com/studio/publish/app-signing.html

さて、参照や日食のない小さな概要なので、エラーのためにいくつかのスペースを残してください、しかしそれはこのように機能します

  • 日食でプロジェクトを開く
  • 右マウスボタンを押します->ツール(Androidツール?)->署名済みアプリケーションをエクスポート(apk?)
  • ウィザードを実行します。
  • 新しいキーストアを作成します。そのパスワードを覚えておいてください
  • アプリに署名する
  • 保存など

また、リンクから:

Eclipse ADTでコンパイルして署名する

ADTプラグインでEclipseを使用している場合は、エクスポートウィザードを使用して、署名された.apkをエクスポートできます(必要に応じて、新しいキーストアを作成することもできます)。エクスポートウィザードは、KeytoolおよびJarsignerとのすべてのやり取りを実行します。これにより、前述のように、手動でコンパイル、署名、および整列する手順を実行する代わりに、GUIを使用してパッケージに署名できます。ウィザードがパッケージをコンパイルして署名すると、zip alignを使用したパッケージアライメントも実行されます。エクスポートウィザードはKeytoolとJarsignerの両方を使用するため、上記の「署名の基本設定」で説明したように、コンピューターでこれらにアクセスできることを確認する必要があります。

Eclipseで署名済みで整列された.apkを作成するには:

  1. パッケージエクスプローラーでプロジェクトを選択し、[ファイル]> [エクスポート]を選択します。
  2. Androidフォルダーを開き、「Androidアプリケーションのエクスポート」を選択して、「次へ」をクリックします。

    Androidアプリケーションのエクスポートウィザードが開始され、.apkに署名する秘密鍵を選択する(または新しいキーストアと秘密鍵を作成する)手順など、アプリケーションに署名するプロセスが案内されます。

  3. エクスポートウィザードを完了すると、アプリケーションがコンパイル、署名、調整され、配布の準備が整います。

始め方がわかりません。私は日食バージョンを使用しています:Heliosサービスリリース1
chriss

2
全体を読んでください。食の最後にもいくつかのヒントがあります
ナネ

1
キーの作成で、エイリアスに何を入力する必要がありますか?
chriss

9
マニュアルを読みましたか?-alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.それは単なるエイリアスです。名前、もしそうなら。「firstkey」をお勧めします:-)
Nanne

1
よくわかりません。このエイリアスをどのように使用しますか?その目的は何ですか?
user462990

37

APKに手動で署名する方法のガイドは次のとおりです。(10/2016)apk-signerで新しく導入された情報が含まれていますbuild-tools 24.0.3

自動化されたプロセス:

このツールを使用(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

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


10

IntelliJ IDEAまたはAndroid Studioのユーザーの場合、次の手順を実行します。
*メニューからBuild/Generate signed APK
*キーストアパスを作成する必要があります。ダイアログでをクリックしますCreate new。キーを含むjksファイルを作成します。フォルダを選択し、パスワードを定義します。だからあなたのキーストアは大丈夫​​です。
*エイリアス、キーパスワード、名前などを使用して、アプリケーション用に新しいキーを作成します。
*次へをクリックします。
*ダイアログから、Proguardを選択するかどうかを選択します。

署名済みAPKファイルの準備ができました。

ヘルプファイル:https : //www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html


8

心配しないで...!以下の手順に従って、署名された.apkファイルを取得します。私もそのことを心配していましたが、これらのステップは欲求不満から私を駆り立てます。アプリケーションに署名する手順:

  1. 署名されていないパッケージをエクスポートします。

Eclipseでプロジェクトを右クリック-> Androidツール->署名のないアプリケーションパッケージをエクスポート(ここでは、GoogleDriveApp.apkをデスクトップにエクスポートします)

キーストアとjarsignerツールを使用してアプリケーションに署名します(以下の手順に従ってください)。

"jarsigner.exe"が存在するcmd-> changeディレクトリを開きます(ここでは私のシステムのように "C:\ Program Files \ Java \ jdk1.6.0_17 \ bin"に存在します)

次に、cmdにbelwoコマンドを入力します。

jarsigner -verbose -keystore c:\ users \ android \ debug.keystore c:\ users \ pir fahim \ Desktops \ GoogleDriveApp.apk my_keystore_alias

パスワードの入力を求められます:キーストアのパスフレーズを入力:APKに署名します。署名が成功したことを確認するには、次を実行します。

jarsigner -verify c:\ users \ pir fahim \ Desktops \ GoogleDriveApp.apk

jarが検証されました。

方法2

ADTでEclipseを使用している場合、ファイルをコンパイル、署名、調整し、配布用に準備するのは簡単です。次の手順に従ってください。

  • ファイル>エクスポート。
  • Androidアプリケーションをエクスポートする
  • 参照->プロジェクトを選択
  • 次へ->次へ

これらの手順により、プロジェクトがコンパイル、署名、およびzip調整され、プロジェクトを配布したり、Google Playストアにアップロードしたりできるようになります。


それがまさに私が必要としたもので、新しいオンラインビルドツールを使用していて、新しく生成されたものではなく、以前のキーストアを使用する必要がありました。私は欠けていた唯一の事は誰もが同じ問題を抱えているのであれば、ここに行く、ZIP APKを合わせたstackoverflow.com/a/22682132/826194
Larzan

5

APK署名プロセス

Android APKファイルに手動で署名するには、次の3つのコマンドを実行します。

  1. キーストアファイルを生成

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
  2. を使用してAPKファイルに署名する jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
  3. zipalignツールを使用して署名済みAPKを調整する

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

ステップ1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

例:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

キーストアのパスワード:yourApp @ 123 キーのパスワード:yourApp @ 123

CMD O / P

D:\ru\SignedBuilds\MySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

ステップ2


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate's expiration date (2044-02-07) or after an
y future revocation date.

D:\ru\SignedBuilds\MySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O / P

D:\ru\SignedBuilds\MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:\ru\SignedBuilds\MySignedApp>

ステップ3


zipalignを使用して最終的なAPKパッケージを調整する

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P

D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

注意:

確認コマンドは、APKが正しくビルドおよび署名されているかどうかを確認するだけです。

参考文献

これが1つとすべてに役立つことを願っています:)


2

私はこの問題に遭遇し、マニフェストの最小SDKバージョンをチェックすることで解決しました。15(ICS)に設定されましたが、私の電話は10(Gingerbread)を実行していました

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