「Google Play services」のOAuth2認証に依存したAndroidアプリを書くとエミュレーターでデバッグできなくなるのではないか?
追記12.11.19:少なくとも、先日リリースされたGoogle APIs API Level 17エミュならデバッグできることがわかった。
琴線探査: Android 4.2のエミュレーターには予め「Google Play開発者サービス」がインストールされている!
----
先日Android DevブログでOAuth2関連の気になる記事が出ていた。
琴線探査: AndroidのOAuth2関連で要注意な記事「Google Play services and OAuth Identity Tools」
ひとまず下記を参考に、サンプルを動かしてみることにした。
Google+ Platform for Mobile — Google Developers
Eclipseで「Window」>「Android SDK Manager」を開く。
「Extras」>「Google Play Services」をチェックして「Install Packages」。
「File」>「Import」>「Existing Android Code Into Workspace」からの「Next」。
「Browse」で$ANDROID_SDK_HOME/extras/google/google_play_services/samples/plusを「開く」。
「Copy projects into Workspace」をチェックして「Finish」。
インポートされた「com.google.android.gms.samples.plus.MainActivity」プロジェクトを右クリックして「Properties」。
「Java Build Path」>「Libraries」>「Add External Jars」。
$ANDROID_SDK_HOME/extras/google/google_play_services/libs/google_play_services.jarを選択して「開く」。
もう一回「Add External Jars」。
$ANDROID_SDK_HOME/extras/android/support/v4/android-support-v4.jarを選択して「開く」。(これを選択するには「Android Support Library」がインストールされていなければならない)
「Order and Export」タブ>google_play_services.jarとandroid-support-v4.jarをチェック。「OK」で閉じる。
「Run」>「Debug」。
アプリが起動し次第「Sign in」をクリック。するとこのようなダイアログが表示される。
ここで「Get Services」をクリックするとエラー(ノ∀`)
LogCatを見ると。。。
と出ていた。
エミュのAPI Levelによるのかも?と思って、「Google APIs」系のエミュでAPI Level 10(Gingerbread)、15(ICS)、16(JellyBean)で試したが、どれも同じエラーで終了。
ただし、JellyBeanではダイアログのメッセージがこのように違っていた。
そこで、Gingerbreadの実機で起動してみる。すると、エミュで起動した時とは違うダイアログが表示される。
ここで「Play開発者サービスを入手」をクリックしたら、Google Playの「Google Play開発者サービス」というアプリのページに飛ばされてインストールするように促される。ちなみに、ユーザーコメントでは「勝手に入れるな」とか「スパイウェアか?」的な話が散見された(^^);
ここで「インストール」してバックボタンでアプリの初期画面まで戻り、再び「Sign in」をクリックするとこのようにGoogle+のボタンが表示される。
ここで「Sign in」ボタンをクリックするとアカウント選択画面になる。
これはGingerbreadのシステムのアカウント選択画面とは微妙に違う。Intentによって「Google Play開発者サービス」APKに入っているActivityが起動されたのだろう。
アカウントを選択して「OK」するとアクセス許可の画面になる。これもGingerbreadのアクセス許可画面とは明らかに違う。
GingerbreadでOAuth2認証した場合、複数のサービスの許可を一度に得ることはできず、サービス名はURLで表示されるから。
この画面もIntentによって「Google Play開発者サービス」APKに入っているActivityが起動されたのだろう。この部分は確かに改善されたと言える。
ここで「許可」すると、このように「Signed in.」となる。
つまり何が言いたいかというと、「Google Play services」のOAuth2認証に依存したアプリを書くとエミュレーターでデバッグできなくなるのではないか?ということ。
エミュには「Google Play開発者サービス」をダウンロードするための「Playストア」が無いので、そのためだと思われる。
追記12.10.04:がんばってみたけど、やっぱりダメだった_| ̄|○
琴線探査: 「Google Play Store」をエミュレーターにインストールできるか?
しかし、これではあまりにも不便。Google APIに依存する必要があるためにx86エミュが使えないばかりか、エミュそのものまでも使えなくなるなんて。
何とかエミュでも動作させる方法は無いのだろうか・・・もしあるなら、誰か教えてください・・・
琴線探査: Android 4.2のエミュレーターには予め「Google Play開発者サービス」がインストールされている!
----
先日Android DevブログでOAuth2関連の気になる記事が出ていた。
琴線探査: AndroidのOAuth2関連で要注意な記事「Google Play services and OAuth Identity Tools」
ひとまず下記を参考に、サンプルを動かしてみることにした。
Google+ Platform for Mobile — Google Developers
Eclipseで「Window」>「Android SDK Manager」を開く。
「Extras」>「Google Play Services」をチェックして「Install Packages」。
「File」>「Import」>「Existing Android Code Into Workspace」からの「Next」。
「Browse」で$ANDROID_SDK_HOME/extras/google/google_play_services/samples/plusを「開く」。
「Copy projects into Workspace」をチェックして「Finish」。
インポートされた「com.google.android.gms.samples.plus.MainActivity」プロジェクトを右クリックして「Properties」。
「Java Build Path」>「Libraries」>「Add External Jars」。
$ANDROID_SDK_HOME/extras/google/google_play_services/libs/google_play_services.jarを選択して「開く」。
もう一回「Add External Jars」。
$ANDROID_SDK_HOME/extras/android/support/v4/android-support-v4.jarを選択して「開く」。(これを選択するには「Android Support Library」がインストールされていなければならない)
「Order and Export」タブ>google_play_services.jarとandroid-support-v4.jarをチェック。「OK」で閉じる。
「Run」>「Debug」。
アプリが起動し次第「Sign in」をクリック。するとこのようなダイアログが表示される。
ここで「Get Services」をクリックするとエラー(ノ∀`)
LogCatを見ると。。。
10-01 15:56:03.510: E/SettingsRedirect(664): Can't redirect to app settings for Google Play Services
10-01 15:56:03.520: E/SignInActivity(664): Unable to install Google Play services.
と出ていた。
エミュのAPI Levelによるのかも?と思って、「Google APIs」系のエミュでAPI Level 10(Gingerbread)、15(ICS)、16(JellyBean)で試したが、どれも同じエラーで終了。
ただし、JellyBeanではダイアログのメッセージがこのように違っていた。
そこで、Gingerbreadの実機で起動してみる。すると、エミュで起動した時とは違うダイアログが表示される。
ここで「Play開発者サービスを入手」をクリックしたら、Google Playの「Google Play開発者サービス」というアプリのページに飛ばされてインストールするように促される。ちなみに、ユーザーコメントでは「勝手に入れるな」とか「スパイウェアか?」的な話が散見された(^^);
ここで「インストール」してバックボタンでアプリの初期画面まで戻り、再び「Sign in」をクリックするとこのようにGoogle+のボタンが表示される。
ここで「Sign in」ボタンをクリックするとアカウント選択画面になる。
これはGingerbreadのシステムのアカウント選択画面とは微妙に違う。Intentによって「Google Play開発者サービス」APKに入っているActivityが起動されたのだろう。
アカウントを選択して「OK」するとアクセス許可の画面になる。これもGingerbreadのアクセス許可画面とは明らかに違う。
GingerbreadでOAuth2認証した場合、複数のサービスの許可を一度に得ることはできず、サービス名はURLで表示されるから。
この画面もIntentによって「Google Play開発者サービス」APKに入っているActivityが起動されたのだろう。この部分は確かに改善されたと言える。
ここで「許可」すると、このように「Signed in.」となる。
つまり何が言いたいかというと、「Google Play services」のOAuth2認証に依存したアプリを書くとエミュレーターでデバッグできなくなるのではないか?ということ。
エミュには「Google Play開発者サービス」をダウンロードするための「Playストア」が無いので、そのためだと思われる。
追記12.10.04:がんばってみたけど、やっぱりダメだった_| ̄|○
琴線探査: 「Google Play Store」をエミュレーターにインストールできるか?
しかし、これではあまりにも不便。Google APIに依存する必要があるためにx86エミュが使えないばかりか、エミュそのものまでも使えなくなるなんて。
何とかエミュでも動作させる方法は無いのだろうか・・・もしあるなら、誰か教えてください・・・
はじめまして!
返信削除大変参考になるエントリでした。まことに勝手ですがリンクを貼らせて頂きました。
Google Play開発者サービスについて・・・:chimtty.net
もし不都合等ありましたらお知らせくださいm(_ _)m