2015年1月17日土曜日

[Android] Google Play Services APIを使うアプリが動かなくなった

java.lang.NoClassDefFoundError: com.google.android.gms.ads.AdView
Could not find class com.google.android.gms.ads.AdView

今まで動作していた開発中のアプリがSDKを最新版に更新しただけで動作しなくなってしまいました。
2014年6月にAndroid SDKとAndroid Developer Toolsを最新版にして以来、Google Play Services APIを使ったアプリが全て実行時エラーを起こすようになりました。


環境

・Windows 7 / 8 / 8.1
・Eclipse Indigo / Juno / Kepler / Luna


動作しなくなったソースコード

Google Mobile Ads SDK スタート ガイド https://developers.google.com/mobile-ads-sdk/docs/?hl=ja の手順通りに作ったアプリを実行すると

adView = new AdView(this);

のところで次のようなエラーが起きます。
※Androidのバージョンや端末によってはエラーの内容が異なることがあるようです。



結論

Android Studioでビルドしたら正常に実行できるようになりました。
エラーを起こさない方法は引き続き調べますが、これを機会にAndroid Studioに乗り換えることにしました。


Eclipseで試したけどダメだったこと

プログラマー向けの質問投稿サイトStack Overflowなどを参考に色々試しました。
次のうちどれかを適用したら動くようになったという報告がいくつかあるのですが自分の環境ではすべてダメでした。
  • Android SDK Build-tools Rev.20以降をインスト-する→EclipseがExceptionWithContextを起こしてビルドできない
  • プロジェクトのlibsフォルダーにgoogle-play-service_lib.jarをコピーする
  • ビルドパスにgoogle-play-service_lib.jarを指定し順序及びエクスポートにgoogle-play...をチェックする
  • ワークスペースを初期化する
  • EclipseとAndroid SDKを再インストールする
  • 新しいEclipse (indigoやluna)に乗り換える
  • Ant1.9.4をインストールしてEclipse付属のAntを使わない設定にする
  • プロジェクト・ビルド・ターゲットをGoogle APIsに変更する
  • 仮想デバイスマネージャーでエミュレーターを作り直す
  • Google開発者サービスがインストールされている実機で動かしてみる
  • 下のフォルダーを削除ししてEclipseとAndroid SDKを初期化する
    %USERPROFILE%\.android
    %USERPROFILE%\.eclipse
他にも色々試しましたが何をやってもエラーが起きました。


Google APIsが必要らしい

原因を調べるうちに動作環境が昔と変化している点がありました。
Adding SDK Packages のページ
http://developer.android.com/sdk/installing/adding-packages.html
によると、
Note: Google Play services APIs are not available on all Android-powered devices,
but are available on all devices with Google Play Store.
To use these APIs in the Android emulator,
you must also install the the Google APIs system image from the latest Android X.X directory in the SDK Manager.
とあります。
どうやらはGoogle APIsをインストールしないと動作しなくなったようです。


特定のAndroidエミュレーターでは動かなくなったらしい

もう一つ変化している点がありました。
Adding SDK Packages のページでは
To use these APIs in the Android emulator,
you must also install the the Google APIs system image from the latest Android X.X directory in the SDK Manager.
とあります。

Setting Up Google Play Servicesのページ
https://developer.android.com/google/play-services/setup.html?hl=ja
によると、
The Android emulator with an AVD that runs the Google APIs platform based on Android 4.2.2 or higher.
とあります。
Android SDK付属のAVD ManagerではAndroidエミュレーターを作ることが出来ますが、Target NameやAPI Levelなど様々な組み合わせを指定する必要があります。
どうやらAPI Levelが17以上のGoogle APIsのエミュレーターでしか動作しなくなったようです。


2014年12月にバージョン1.0.0が公開されたAndroid StudioではGoogle Play Services AIPを使ってエラーなく動作させることが出来ました。
「ウチのEclipseはGoogle Play Services APIでエラーは出ない」という開発者もいらっしゃるかと思いますが、Android自体が変化し続けているのでEclipseからAndriod Studioに乗り換えることにしました。


関連ブログ

[Ecipse] Unable to execute dex でアプリが起動しなくなった
[Ecipse] マニフェストに表示される警告(黄色三角のエクスクラメーションマーク)
[Android] アプリからツイートするとハッシュタグが消える(URLエンコード漏れ)
[Unity3D] Visual Studio Community 2013を日本語化してUnityアプリを作る

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿