[Android]Linuxコマンドラインに基づいてAndroidアプリケーションを構築する(六):Androidアプリケーション署名

4939 ワード

Androidは、すべてのアプリケーションに対して、インストール前に証明書を使ってデジタル署名をする必要があります.Androidは、この証明書を使用して、証明書発行機関によって発行される必要がないアプリケーションとその著者のアイデンティティを決定します.したがって、Androidアプリケーションは常に自己署名の証明書を使用していますが、開発者は証明書の秘密鍵を保管しています.
 
デバッグとリリースの2つのモードを使って署名することができます.デバッグモードでは、Android SDKは証明書の自動生成とアプリケーション署名を担当しています.リリースモードでは、自分で自分の証明書を生成する必要があります.
 
デバッグモードの署名
 
このモードでは、Android SDKは自動的に試用証明書を作成し、デフォルトのパスワードを使ってアプリケーションに署名します.したがって、あなたのアプリケーションをデバッグする必要がある場合、構築プロセスはいかなるパスワードも入力する必要がありません.
 
Android StudioとEclipse+ADTはデバッグモードで自動的にアプリケーションに署名することができます.
 
USB接続であなたのAndroidデバイスにデバッグすることができますが、デバッグモードの署名のアプリケーションは公開発行には使えません.
 
リリースモードの署名
 
このモードでは、自分の証明書を使ってアプリケーションに署名します.
1.keystoreを作成します.keystoreとは、一連の秘密鍵を含むバイナリファイルのことです.あなたのkeystoreを安全で信頼できるところに保存してください.
2.秘密鍵を作成します.秘密鍵は、アプリケーションの識別情報を確認することができるエンティティ、例えば、ある個人または会社を表している.
3.構築項目.未署名のappkを生成します.
4.署名を適用します.あなたの秘密鍵を使って未署名のappkに署名します.
以上の4つのステップをクリアすると、Google Play上であなたのアプリケーションを発行できます.
 
署名の注意事項
 
適用されたライフサイクル全体で、同じ証明書を使って署名する必要があります.
●アップグレード:Androidシステムが一つのアプリケーションを更新してインストールすると、まず新旧二つのバージョンの証明書を比較し、両者が一致してシステムをアップグレードするしかない.新しいバージョンのアプリケーションで新しい証明書を使ったら、あなたのパッケージ名を改めて命名しなければなりません.ユーザーにとって、彼らは別のアプリケーションをインストールしています.
●モジュール性:Androidシステムは、同じ証明書の署名を持つアプリケーションを同じプロセスで実行することができます.システムにとっては同じアプリケーションです.このようにすれば、モジュールごとにアプリケーションを配置し、ユーザーは独自にモジュールをアップグレードすることができます.
●権限によってコードとデータを共有する:Androidシステムは署名に基づく権限管理システムを提供しているので、アプリケーションが特定の証明書署名を使用している場合、他のアプリケーションは指定された機能サポートを提供することができます.この権限管理システムと複数のアプリケーションに同じ証明書を使って署名すると、あなたのアプリケーションは安全にコードとデータを共有できます.
 
アプリケーションを継続的にアップグレードするには、証明書の有効期限がアプリケーションのライフサイクルより大きいことを保証しなければなりません.一般的に推奨されている有効期間は25年以上です.鍵が失効すると、ユーザはあなたのアプリケーションをうまくアップグレードできません.
 
Google Play上であなたのアプリケーションを発行するには、署名用の鍵の有効期限が2033年10月22日を超えなければなりません.これはGoogle Playがユーザーがアプリケーションをスムーズにアップグレードできるようにするための強制措置です.
 
秘密鍵を適切に保管する
 
安全で適切に秘密鍵を保管することは、あなたにとってもユーザーにとっても非常に重要です.他の人があなたの鍵を使うことを許可すると、またはkeystoreとパスワードを不安全な場所に保管すると、あなたがアプリケーションの所有者としてのアイデンティティとユーザの信頼を損なうことになります.
 
もし他の人があなたが知らない、または許可されていない状況であなたの鍵を取得しようとすれば、彼はあなたのアプリケーションの代わりに悪意のあるアプリケーションを発行することができます.彼はあなたの名義で他のアプリケーションやシステムを攻撃して、ユーザーのデータを盗むこともできます.
 
あなたのアプリケーションの将来のすべてのバージョンは、あなたの秘密鍵を使って署名されます.秘密鍵をなくしたら、発行済みアプリケーションを更新することはできません.また、秘密鍵を再生成することもできません.
 
開発者としてのあなたの評判は鍵を適切に保管しているかどうかによって決まります.以下は鍵の安全を保障するいくつかの提案です.
●キーと鍵のための強固なパスワードを設定します.
●秘密鍵を他の誰にも渡さず、誰にも教えない.
●keystoreと秘密鍵ファイルを安全で信頼できる場所に保管する.
 
一般的には、鍵を生成し、使用し、保管する際に、一つの普遍的な安全意識に従う限り、すべては安全である.
 
デバッグ証明書が失効しました
 
デバッグモードで使用した証明書の有効期限は365日です.証明書が有効期限が切れたら、構築エラーが発生します.
 
この問題を修復するには、debug.keystoreファイルを削除すればいいです.このファイルのデフォルトの保存経路は~/.android/(OS XまたはLinux)またはC:\Docomments and Settings\.android\(Windows XP)またはC:\Users\user'.android\(Windows VistaとWindows 7)です.
 
次に構築すると、構築ツールが自動的に新しいkeystoreとデバッグ鍵を生成します.
 
手動署名アプリケーション
 
Android SDKとJDKが提供する標準ツールを使って、あなたのアプリケーションに手動で署名することができます.コマンドラインに署名する方法を説明します.
 
1.keytoolツール(JDKによって提供される)を使用して秘密鍵を生成する:
$ keytool -genkey -v -keystore my-release-key.keystore

-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
  
以上の例では、keystoreと秘密鍵のパスワードを入力してください.個人情報を入力してください.最後にmy-release-key.keystoreというファイルを作成します.このキーには秘密鍵が含まれています.有効期間は10000日間です.aliasオプションで提供されるエイリアスは後で署名アプリケーションで使用されます.
 
2.リリースモードで未署名のアプリをコンパイルします.
 
3.jarsignerツール(JDKによって提供される)+秘密鍵を使用して、アプリケーションに署名する:
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1

-keystore my-release-key.keystore my_application.apk alias_name
 
上記の例では、キーと秘密鍵のパスワードを入力することが要求されます.APKファイルを変更して署名を完了します.異なる鍵を使ってAPKファイルに複数の署名をすることができます.
 
4.APKが署名されているか確認する:
$ jarsigner -verify -verbose -certs my_application.apk
 
5.ziplignツール(Android SDKによって提供される)を使って最終的なAPKパッケージを調整する:
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
 
ziplignツールは、すべての圧縮されていないデータが特別なバイトで開始され、ファイルの開始点と比較的に整然としていることを確認します.このように、アプリケーションのRAM占有率を減らすことができる.
 
 
注:
[1]キーと秘密鍵を安全で信頼できるところに保存し、安全なバックアップを保管してください.それらをなくしたら、Google Playでアプリケーションを更新できなくなります.同じ鍵を使って同じアプリケーションのすべてのバージョンに署名しなければなりません.
[2]もしあなたの開発環境がグレゴリオ暦を使っていないと(正確にはグレゴリオ暦です)、ツールを構築して誤ってもう期限が切れたデバッグ証明書を生成してしまい、アプリケーションをコンパイルできなくなります.この問題を解決するには、I can't comple my ap because the build tools generated an expired debug certificateを参照してください.
 
添付:
1.Signing Your Application s