猫の手も借りたい

ソフトウエア開発者の多忙な生活

AndroidでGoogle Mapを使うのに必要なAPIキーは、デバッグ版とリリース版(リリース用に署名したもの)で異なりますが、これは開発者にとって共通の頭痛の種のようです。僕も困りました。まず、APIキーを指定する方法は2つあります。

  • レイアウトファイルに、android:apiKey= で記述する。

  • MapViewのコンストラクターで渡す。


MapViewをコードで生成する場合は、デバッグ版かリリース版かに応じて渡すキーを切り替えればいいので簡単です。が、MapViewを使う画面のレイアウトが複雑で、XMLで書いたレイアウトを使いたい場合は前者に目が行きます。僕もそうでした。で、こちらにある方法を試したのですが、どうしても、インフレートしたViewStubをMapViewとして使えません。かと言って、デバッグ版とリリース版で、apiKeyだけ違うXMLファイルを持つのはメンテナンス性が悪いので避けたいです。で、stackoverflowを見ていると、同じ悩みを持っている人への回答として、「MapViewをコードで生成してレイアウトに追加すれば良い」とありました。なるほど。

それで、そのMapVIewを使う画面のレイアウトはXMLで記述しますが、MapViewを入れるところは空のLinearLayoutにし、
    <LinearLayout
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

コードでMapViewを生成してaddViewしました。
        setContentView(R.layout.map);
ViewGroup layout = (ViewGroup)findViewById(R.id.mapview);
String mapKey;
if(BuildOption.isDebugBuild(context))
{
mapKey = mapKeyDebug;
}
else
{
mapKey = mapKeyRelease;
}
mapView = new MapView(context,mapKey);
mapView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
layout.addView(mapView);
mapView.setEnabled(true);
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);

この方法ではMapViewのコンストラクターにAPIキーを渡すので、.javaのコード中に文字列としてキーを持てば良く、レイアウトファイルに書く必要はありません。僕はこの方が好きです。で、デバッグ版かリリース版かの判定ですが、正しくは、デバッグ用の署名をしているか、リリース用の署名をしているかの判定をしたいところです。こちらには、AndroidManifest.xmlにあるandroid:debuggableの状態を使う例があります。ほとんどの場合はこれでもいいと思いますが、stackoverflowに署名を見て判断する方法があったので、それを使うことにしました。リンク先にある、「Had the same hassle with the API key. Here's a full solution, based on the above link and example from Bijarni (which somehow didn't work for me), I use now this method:」で始まる回答です。ちょいと分かりにくいですが、最初はDEBUG_SIGNATURE_HASHを0などにし、for文の中で sigs[i].hashCode() をログに出して、署名のハッシュを表示させます。署名せずに動かせば、デバッグ版の自動署名の値が手に入ります。それを、DEBUG_SIGNATURE_HASHに入れます。あと、そのコードには、

private static Boolean _isDebugBuild = null;

が抜けていますね。

[...] Map用APIキーの自動選択 [...]

2013.07.24 21:39 URL | Androidアプリの署名<KeyStore Keytool AndroidDebugKey> | android manifest configChanges #79D/WHSg [ 編集 ]













管理者にだけ表示

トラックバック URL↓
http://nekonotesoft.net/tb.php/188-85a7792e