2015年07月15日

Google Maps Android API v2でリリースしたapkの地図が表示されない

 Google Maps Android API v2で、デバッグでは正常表示されていても、リリースしたapkをインストールすると地図が表示されませんでした。
 原因は、デバッグ用のフィンガープリントのままAPI keyを使っていたこと。参考になったのは、

Getting Android Google Map v2 working in release version by generating SHA1 fingerprint for API key - Stack Overflow

 Android toolsからExport Android Applicationでapkを出力する時、以下のページの画像にあるようにSHA1とMD5のcertificate fingerprintsが表示されます。

How to obtain Signing certificate fingerprint (SHA1) for OAuth 2.0 on Android? - Stack Overflow

 これがうまくいかない場合、keytool コマンドを利用しても取得できる筈です(リリース用には使っていないので未確認)。以下参照(デバッグの例ですが日本語)。

Google Maps Android API v2 を利用するための API キーの取得方法 - Android 開発入門

 これを使い、Google Developers Console https://console.developers.google.com にアクセス、「APIと認証」から既にデバッグ用に作成しているAndroidアプリのキーの「認可対象Androidアプリを編集」をクリック、既に登録しているデバッグ用のフィンガープリントに加えてリリース用のフィンガープリントを追加します。

20150715api_key.png
posted by ふみこ at 13:17| Android

2015年07月02日

Nexus7がGoogle Playで"このアイテムはお使いの端末に対応していません"(This item is not compatible with your device)

 Nexus7(2012)で開発した当のアプリが、Google Playで"このアイテムはお使いの端末に対応していません"(This item is not compatible with your device)と表示されて焦りました。
 結論から言うと、カメラ回りのuses-permissionとuses-featureが原因でした。
 このアプリはカメラを使うことのあるアプリだったので、

<uses-permission android:name="android.permission.CAMERA" />

 をAndroidManifest.xmlに宣言してあります。これがなければ、そもそもカメラを使えません。
 しかし、このuses-permissionがあると、暗黙的に

<uses-feature android:name="android.hardware.camera" android:required="true" />

 が宣言されているものとみなされてしまうそうです。
 つまりカメラ機能が「必須」と判断され、それが使えない端末はGoogle Playで"このアイテムはお使いの端末に対応していません"(This item is not compatible with your device)と表示されてしまうのです。
 Nexus7は一応フロントカメラが付いているのですが、何故か「カメラなし」と判定されるようで、この結果になってしまいます。
 「カメラ機能を使う場合があるけれど、なければなくて良し、必須ではない」という場合、

<uses-feature android:name="android.hardware.camera" android:required="false" />

 を併せて明示的に宣言しなければなりません。
 その他、uses-permissionを宣言することでuses-featureが暗黙的に宣言されてしまうケースがあるようなので、「使う場合もあるけれど必須ではない」機能を追加する場合、required="false"でuses-featureを追加しておいた方が良いでしょう。


For example, if an application requests the CAMERA permission but does not declare a element for android.hardware.camera, Google Play considers that the application requires a camera and should not be shown to users whose devices do not offer a camera.

If you don't want Google Play to filter based on a specific implied feature, you can disable that behavior. To do so, declare the feature explicitly in a element and include an android:required="false" attribute. For example, to disable filtering derived from the CAMERA permission, you would declare the feature as shown below.

<uses-feature android:name="android.hardware.camera" android:required="false" />

| Android Developers


 以下が参考になります。

uses-permissionの落とし穴、サポートデバイスを増やすmanifestの記述 | Program Resource
Android - 設定の罠 - Qiita
タグ:nexus7
posted by ふみこ at 12:35| Android

2015年06月25日

Eclipse Androidエミュレータのスクロールが戻らない

 EclipseのAndroidエミュレータでスクロールが一番下まで行って戻らない、という事象がありました。
 ListViewでもScrollViewでも、一見正常に表示されているようなのですが、一度スクロールに触るとそのまま勝手に一番下までスクロールし、その後上に戻そうとしてもビヨーンと一番下までまたスクロールして戻ってしまう、という状態です。
 エミュレータだけで発生し、実機では問題ありません。
 これはアプリ側の問題ではなく、エミュレータの問題です。

eclipse - Android emulator doesn't scroll back UP - Stack Overflow

 エミュレータを作成する時に、CPUをARMにすると正常動作します。
 これで上手く行ったのですが、一般的な環境で皆が皆ARMで作成しているとも思えませんし、Google Maps APIを利用するアプリなどはx86で作ってやらないとデバッグできない筈です。どうやって解決しているのでしょうか・・・。
posted by ふみこ at 12:48| Android
↓応援クリックお願いします☆
ブログランキング・にほんブログ村へ