nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

Xamarin for Visual Studioで開発メンバーでdebug.keystoreを共有する

Androidの開発をしていると、debug.keystoreをチーム内で共有したいケースが発生しがちだと思います。
単一プロジェクトしか関与していなかったり、関与するプロジェクトが完全に目が届く範囲であれば、同じdebug.keystoreを使いましょうで済む話なのですが、必ずしもそうとは限らないと思います。
複数のプロジェクトに関与していて、異なるdebug.keystoreを使い分けなくてはならない場合、手で切り替えているとどうしても切り替え忘れが発生したり、そもそも煩雑です。
またその辺りの手段は、Visual Studioに限らず、統合開発環境エミュレータ側で、あまりサポートされていないように思えます。(気のせい?)

そんな分けで、debug.keystoreをプロジェクト単位で共有したい場合の方法を考えてみました。
ただ、あくまで我流なのでほかにもっと良い方法があるかもしれません。
もしもっと良い案がある方いらっしゃったらぜひ教えていただけると助かります。

前提条件

本エントリーでは、以下のような条件を想定しています。

  1. debug.keystoreはプロジェクト単位で使い分けたい
  2. 利用する際に手動で対応はしたくない
  3. 開発環境はXamarin for Visual Studio
  4. エミュレータVisual Studio Emulator for Androidを想定していますが、ほかのエミュレータでも同じはずです

概要

方法は単純というか、読んだ人はアホらしくなって回れ右しちゃうかもしれませんが、Visual Studioのビルド イベントを使いますw

前準備としてAndroidプロジェクト内に共有のdebug.keystoreを配置します。
その上で、ビルドイベントのビルド前処理としてバッチファイルを実行します。
バッチファイルの中では、エミュレータの利用するdebug.keystoreをバックアップフォルダへコピーした後に、前述のAndroidプロジェクト内の共有debug.keystoreをエミュレータの利用するパスへコピーします。

具体的な手順は以下を参照してください。

詳細手順

Androidプロジェクト内に共有のdebug.keystoreを配置する

以下のように、Androidプロジェクトの下に、共有したいdebug.keystoreファイルを配置します。

f:id:nuitsjp:20160420223343p:plain

上の例では、「Key」フォルダを作成してその中にファイルを保管しています。
なお、保管するdebug.keystoreは何でもよいので、すでにある所からとってきてコピーすればよいと思います。
一番簡単なのは、Visual Studio Emulator for Androidのdebug.keystoreの保管先である、以下のパスから取得してくることかと思います。

%ユーザフォルダ%\AppData\Local\Xamarin\Mono for Android

バッチファイルを作成する

以下の処理を実行するバッチファイルを作成します。

  1. バックアップフォルダをチェックし、フォルダがなければ作成する
  2. バックアップフォルダ内のdebug.keystoreをチェックし、ファイルがなければエミュレータのdebug.keystoreファイルをコピーして退避する
  3. Androidプロジェクト内の共有debug.keystoreファイルを、エミュレータのdebug.keystore保管フォルダへコピーする

具体的には以下のようなバッチになります。

SET KEY_DIR=%USERPROFILE%\AppData\Local\Xamarin\Mono for Android
SET BACKUP_DIR=%KEY_DIR%\back

IF NOT EXIST "%BACKUP_DIR%\" (
    MKDIR "%BACKUP_DIR%"
)

IF NOT EXIST "%BACKUP_DIR%\debug.keystore" (
    COPY "%KEY_DIR%\debug.keystore" "%BACKUP_DIR%\debug.keystore"
)

COPY debug.keystore "%KEY_DIR%\debug.keystore" /Y

今回は、上記バッチファイルを「replaceKey.cmd」ファイルとして、先ほどの共有debug.keystoreを保管したパスと同じ場所に保管することとします。

f:id:nuitsjp:20160420225111p:plain

ビルドイベントを登録する

Androidプロジェクトを右クリックし、ビルドイベントのタブを開いてください。

f:id:nuitsjp:20160420225252p:plain

上のように、ビルドイベントタブの、「ビルド前イベントのコマンドライン」に以下の処理を記載します。

  1. 共有debug.keystoreを保管したパスへカレントディレクトリを移動する
  2. 「replaceKey.cmd」を実行する

具体的には以下のコードになります。

cd $(ProjectDir)Key
replaceKey.cmd

元に戻したいとき

以下のフォルダにコピーされているので、手動で戻してくださいw

%ユーザフォルダ%\AppData\Local\Xamarin\Mono for Android\back

以上です! 参考になればよいのですが。。。