GADGET FACTORY 雑記帳

iPhone アプリ / Flash コンテンツ /Adobe AIR などを開発していて気づいたことや備忘録、TIPS、HACKなど

Androidアプリ用keystoreファイルをAdobe AIR アプリで利用する方法の調査 [未解決]

AndroidのアプリをGoogle Play Storeへ登録する際に利用するkeystoreファイル。

その keystore ファイルを利用して、Flash Professional で Android 用の Adobe AIR アプリを制作する必要が発生しました。

いつもなら、Flash Professional だけで作成する、Adobe AIR のアプリなので、Flash で p12ファイルを作って、それをそのまま利用するので、データの整合性を考えずに済むのですが、今回は受け仕事で先方から kesystore ファイルが到着している以上、対応する必要があるので、かなりの大変な状態になってしまっております。

keystoreファイルは、ネイティブのAndroidアプリ開発であれば、そのまま組込めば良いそうですが、Adobe AIRアプリの場合、それをそのまま利用することはできませんので、Flashへ組み込んで利用できる p12ファイルへ変換する必要があります。

その変換方法について、調査してみました。

なお、現時点で p12ファイルの生成まではできているのですが、Flash での利用で失敗しております。
まだ何か足らない可能性があるので、さらに調査を進めている途中段階での記事です。

ターミナルの文字エンコーディングを変更

ファイルを生成するにはターミナルから、keytool を利用して変換することになります。

keytoolを利用すると、途中で日本語でパスワード関連の質問が表示されます。
ターミナルで利用する文字エンコーディングを「Unicode(UTF-8)」にしていると、この日本語が文字化けするので、あらかじめエンコーディングを「日本語(Mac OS)」に設定しておく必要があります。

ターミナルを起動している状態で、

処理が終了した後、再度「Unicode(UTF-8)」へ戻すことをお忘れなく。


Androidキーストアファイル(JKS)からp12(PKCS12)ファイルへの変換

Androidのキーストアファイルは、JKS(Java Key Store)形式のファイルです。
それを、p12ファイル(PKCS12形式)のファイルへコンバートします。

ターミナルで入力するコマンドは以下の形です。

sudo keytool -importkeystore -srckeystore [keystoreファイル名] -srcstoretype JKS  -srcalias [取り出すalias名] -destkeystore [p12ファイル名]  -deststoretype PKCS12

ファイル名はパスを合わせておく必要がありますので、最初にkeystoreファイルがあるフォルダへ移動してから、コマンドを入力した方が良いかもしれません。

フォルダへの移動は、

cd [フォルダ名]

通常であれば、「cd 」と入力したあと、finderから移動したいフォルダをターミナルへドラッグドロップすれば、そのフォルダ名が表示されますが、ターミナルのエンコードを「日本語(Mac OS)」にしているとこれが利用できません。

先に、フォルダへ移動してから、ターミナルのエンコードを変更した方が良いかもしれません。

実際のコマンドとしては、例えば以下のような条件の場合、

元のkeystoreファイル名 : hoge.keystore
ailias名 : fuga
生成するp12ファイル名 : hoge.p12

ターミナルで以下のコマンドを入力します。

sudo keytool -importkeystore -srckeystore hoge.keystore -srcstoretype JKS  -srcalias fuga -destkeystore hoge.p12 -deststoretype PKCS12

sudo は管理者権限で実行するためのコマンドです。

Password:

で止まっていた場合は、管理者のパスワードを入力する必要があります。

その後、

出力先キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
ソースキーストアのパスワードを入力してください:
の鍵パスワードを入力してください。

と、順番にパスワードを入力する画面で止まるので、1つずつ順番にパスワードを入力していくことで、p12 ファイルが生成されます。

「出力先キーストアのパスワード」「新規パスワード」は、今回生成する p12 ファイルを利用するのに使うパスワードです。
「ソースキーストアのパスワード」は、keystoreファイルのパスワードです。
の鍵パスワード」は、alias の のパスワードです。

上記が正常に終了すれば、p12ファイルが同一フォルダ内に生成されます。

keytool エラー: java.security.UnrecoverableKeyException: Cannot recover key

と表示される場合は、パスワードの入力関係で間違っている可能性があります。

P12ファイルを Flash Professional CS6 へ組み込む

現在、この部分がうまく行っておりません。

本来であれば、Flash Professional の「AIR for Android 設定」の「デプロイ」タブの「証明書」に、上記で作成した p12ファイルを指定し、「パスワード」の部分に、設定したパスワードを入力すれば、利用できるはずです。

しかし、現在利用している keystore ファイルから生成した p12 ファイルを上記欄に指定すると、書き出し時にエラーが出て停止してしまっております。

元の keystore ファイル自体に問題があるのか、生成した p12ファイルに問題があるのか、何かやり残しているものがあるのか・・・

原因については、現時点で不明なため、引き続き調査を行い、原因が判明次第、後日このブログで報告したいと思っております。