ソフトコミュ開発ブログ

SoftCommu は Javaアプリ、Androidアプリの開発を行うディベロッパーです。人材教育もやっています。企業の新人研修の講師からスカイプでのオンライン家庭教師まで!技術書の執筆や翻訳もしています。
2017.02.27 Monday
エミュレータの Google Play Services のバージョンが古いために Google Maps などを使用したアプリが動作しない場合の対応策

Google Map を使用するアンドロイドアプリを開発し、動作確認のためにエミュレータで実行しようとすると下記のようなエラーが表示されて、実行できない場合があります。

 

 

 

表示されているメッセージは、

 

"My Application won't run unless you update Google Play services."

 

です。

 

日本語にすると、

 

「エミュレータの Google Play サービスをアップデートしないとアプリは実行できません」

 

ということですね。

 

で、すぐ下に "UPDATE" というボタンがあるので、それをクリックすればいいのかと思うと・・・あれっ?ボタンをクリックしても何も起きません。

 

出ました!Google の製品で良くある「ユーザーのクリックを平気で無視するやつ」です。困りましたね。

 

さて、この問題の原因は何でしょうか?

 

原因は、開発したアプリ内の Google Play サービスのバージョンが

実行しようとしているエミュレータ端末のバージョンより新しいことです。

 

例えば、

開発したアプリ内の Google Play サービスのバージョンが 10.2.0 とかになっていて、

実行しようとしているエミュレータ端末の Google Play サービスが 9.8.79 などの古いバージョンになっているとうまく動きません。

 

アプリで使用している Google Play サービスのバージョンの確認方法

 

まず、アプリ側で使用している Google Play サービスのバージョンをチェックしてみましょう。

 

これは、build.gradle というファイル内に記述してあるはずです。(この名前のファイルは二つあると思いますが、appフォルダの直下にある方を参照してください)

 

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.google.android.gms:play-services:10.2.0'
    testCompile 'junit:junit:4.12'
}

 

上記の

 

com.google.android.gms:play-services:10.2.0

 

という記述を見ると、アプリ側で使用している Google Play サービスのバージョンがわかります。

 

このアプリで使用しているバージョンは、10.2.0 ということになりますね。

 

 

エミュレータ端末で使用している Google Play サービスのバージョンの確認方法

 

エミュレータ端末の Google Play サービスのバージョンを確認するには、エミュレータを起動して端末の「設定」あるいは「Settings」の画面からメニューをたどっていきます。

 

 

上記の赤枠内「Settings」をクリックすると下記のような画面が表示されますので「Apps」をクリックしてください。

 

 

スクロールしていくと、Google Play services という項目が見つかるかと思いますので、それをクリック。(もし Google Play setvices という項目がない場合は、そもそもエミュレータ上の端末を作成するときに、Google APIs が含まれない端末イメージを使用したのだと思います。その場合、バージョンの問題以前の問題として、そもそも Google Maps などの Google Play setvices 機能がまったく使えない状態になっていますので、Google API 付きエミュレータ端末を作成しなおしてください。)

 

 

上記の Google Play services をクリックすると下記のようにバージョン番号が表示されます。

 

 

上記の赤枠内を見ると、このエミュレータ端末の Google Play サービスのバージョンは 9.8.79 であることがわかりますね。

 

解決策

 

さて、この問題を解決するにはどうすれば良いでしょうか?

 

方法は大きく分けて二つあります。

 

解決策その1 : アプリ側で使用している Google Play サービスのバージョンを落とす(つまり古いバージョンにする)

解決策その2 : エミュレータ端末側で使用している Google Play サービスのバージョンをアップする(つまり新しいバージョンにする)

 

今回は、簡単にできる前者の方法をご紹介します(後者に関しても後日このブログ内でご紹介する予定です)。

 

アプリ側で使用している Google Play サービスのバージョンを設定しているのは、appフォルダ内の build.graidle というファイル内でしたね。

 

上記でもすでに引用しましたが、その中の dependencies セクションには下記のような記述があると思います。

 

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.google.android.gms:play-services:10.2.0'
    testCompile 'junit:junit:4.12'
}

 

上記の

 

'com.google.android.gms:play-services:10.2.0'

 

という記述をエミュレータ端末の Google Play サービスのバージョンと合わせて変更してみましょう。

 

たとえば、エミュレータ端末の Google Play サービスのバージョンバージョンが 9.8.79 となっている場合、ドット区切りの3つの数字のうち、最初の二つの数字を使ってください。つまり 9.8 ということになります。

 

そして、3つめの数字はとりあえず 0 を指定しましょう。なぜなら、9.8.79 などといったバージョンのライブラリはネット上に公開されていない可能性があるからです。でも3つめの数字を 0 にしたバージョンは、ほぼ確実に存在するはずです。

 

つまり、たとえば ・・・

 

9.8.79

9.8.0

 

・・・ というようなバージョン番号を使用することにします。

 

この 9.8.0 という数値を appフォルダ内の build.graidle というファイル内に記述します。

 

具体的には・・・

 

compile 'com.google.android.gms:play-services:10.2.0'

compile 'com.google.android.gms:play-services:9.8.0'

 

・・・と変更するということになりますね。

 

上記のように build.graidle を変更後、アプリをコンパイルしなおすと、古いバージョンの Google Play サービスが搭載されているエミュレータ上でも問題なく実行できるようになります。

 

お試しあれ!

 

 

 

ソフトコミュでは、スカイプによる Java や Androidプログラムの

オンライン家庭教師を受け付けています。

料金は30分2,000円から。

ネット検索しながら何日も悩んだ問題が、たった30分で解決すると大好評です!

興味のある方はソフトコミュのホームページからご連絡ください!

 

 

 

 

| SoftCommu | Android | 14:40 | comments(0) | - |
   1234
567891011
12131415161718
19202122232425
262728293031 
<< March 2017 >>
+ 人気の記事
+ ARCHIVES
+ CATEGORIES
+ MOBILE
qrcode
(C) 2016 SoftCommu All Rights Reserved.