メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

エミュレータのAndroid LでGoogleIOアプリを動かす

GoogleIOアプリ

  • GoogleIOのために作られたアプリです。ソースはこちらからクローンします。
  • Lに対応しているアプリは現状マーケットには存在しない、かつGoogle謹製ということで、マテリアルデザインを理解するための良いサンプルです。

ちょっと動かすまでにいくつか躓くポイントが合ったのでメモ。

lpreview or classic

ProductFlavors で、lpreviewclassicが用意されています。
lpreviewはLからでないと利用できないAPIを用いて作られているため、Lの端末でないと動かせません。
classicはL以下のバージョンでも動くように互換性を持たせたフレーバーです。トンマナは同じですが、タッチフィードバックや画面遷移の部分などが再現できていません。

今回はLのエミュレータlpreviewのフレーバーのAPKを動かします。

Build

Android Studio上でビルドしようとした場合、そのままではlpreviewのフレーバーは認識されません。
android/build.gradleの中の三項演算子となっている部分を次のように変更することで、Build Variantsからlpreviewを選択できるようになります。

    productFlavors {
        lpreview{}
        classic{}
    }

なぜ始めからこうなっていないのかというと、Googleでは異なる方法でlpreviewのフレーバーをビルドしているからです。
コマンドラインで次のように入力し、ビルドします。

$ ./gradlew -Plpreview assembleDebug

こうしてプロパティを渡しhasProperty('lpreview')trueにしています。
コマンドラインからビルドする際は、先ほどのandroid/build.gradleの変更は不要です。

Java7

コマンドやRunは通るようになっても、ビルドは失敗します。 Java7でコンパイルする必要があるからです(通った方はスルーしてください)。

こちらからOracleのJava7のJDKをダウンロードします。
インストール後、Android StudioFile->Other Settings->Default Project Structureから、JDK locationを次のように変更します。
MacOS X 10.9.4でJava SE 7u67をインストールした場合です、適宜環境に応じて変更してください。

/Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home

無事ビルドして、エミュレータにAPKをインストールできるようになりました。
しかしアプリを起動すると注意が出てくると思います。この注意を解消させましょう。

Google Account Required

Googleアカウントを端末で登録します。
CPUがIntel Atom(x86)だとなぜかアカウント認証ができなかったので、ARM(armeabi-v7a)の方でエミュレータを作成します。

Update Google Play services

Goole Play servicesの更新が必要とでますので、IOアプリで最低必要なバージョンを、ビルド時の設定で指定してあげましょう。

dependencies {
    wearApp project(':Wearable')
    compile 'com.google.android.gms:play-services:5.0.+'
...

5.+のままだと5.2などを見に行ってしまい、Fitが使えるSystem Imageでないと使えなくなってしまいます。

Google Play servicesを更新できず、上記の設定でまだ起動時に何度も聞いてくる場合は、Google Play servicesのバージョンをチェックしている部分をコメントアウトしてしまいましょう。
android/src/main/java/com/google/samples/apps/iosched/util/にある、 PlayServicesUtils#checkGooglePlaySevicesです。
このメソッドの返り値を常にtrueにして挙げることで起動時の確認をパスできるようになります。

public class PlayServicesUtils {

    public static boolean checkGooglePlaySevices(final Activity activity) {
        return true;
    }
}

まとめ

エミュレータ重いです。やはり実機で確認したいですね。。

参考

iosched / GitHub

How to build IOSched / GitHub

MacにJDKをインストール / Qiita

This app won't run unless you update Google Play services #37 / GitHub