Pepper SDK for Android Studio使ってみた - エミュ設定、QiChat

Pepper SDK for Android Studio をインストールして、QiChat（choregrapheでいうDialogボックス）の動作確認までしてみました。
途中、エミュレータの設定などで気づいた点を書きます。Qiita初投稿です！

# 検証した環境
・AndroidStudio 2.1.1
・OS Windows10

# インストール
ここのとおりに行なうとインストールされます。所要時間３０分～１時間程度です。
https://android.aldebaran.com/doc/installation.html
1.SDK Manager ![image](https://qiita-image-store.s3.amazonaws.com/0/125752/a25c1298-ec3f-a858-24b4-0aa32e0f5973.png) で Android SDK version 5.1.1 (API 22, Lollipop)、SDK Build-Tools22.0.1を追加
2.```File > Settings > Plugins``` でBrowse repositoriesボタンをクリック、Pepperと入力して検索して Pepper SDK を入手
3.案内に従い、AndroidStudioを再起動すると、Robot SDK Manager ![image](https://qiita-image-store.s3.amazonaws.com/0/125752/e1b7a0d1-f8eb-028a-c503-6218f0abe337.png) が追加されるので、クリックして Robot SDK を入手
※Androidエミュレータはとても動作が遅いので、Intelが提供しているHAXMを導入し、SDK Manager で高速エミュレータをダウンロードしておきましょう（Intel x86 Atom System Image。又は Atom_64）。Pepperのタブレットエミュレータの起動、動作がとても早くなります。HAXMの導入については「haxm android」で検索してください。
![image](https://qiita-image-store.s3.amazonaws.com/0/125752/0e7a37f4-2346-03b7-9ba9-b26ad59109c4.png)


# プログラム作成
参考 https://android.aldebaran.com/doc/create_project.html#create-project
### プロジェクトの新規作成
```File > New > New Project``` で新規プロジェクトを作成。
Targetは Phone and Tablet、Minimun SDK は API22:Android5.1(Lolipop)を選択、Activity は Empty Activity を選択しました。
プロジェクトが作成されたら、```File > New > Robot Application``` で、Pepperアプリの作成準備完了です。
### QiChat
参考 https://android.aldebaran.com/doc/dialog_editor.html?highlight=qichat

1.プロジェクトの ```app > res``` で右クリックして、```New > Chat Topic``` をクリック

2.Japanese(ja)を選択して、Create をクリック
　![image](https://qiita-image-store.s3.amazonaws.com/0/125752/b8730ebe-8827-8e33-d0f5-b810378f789c.png)

3.res/raw 配下（実際には raw-ja フォルダ）に chat1.top ファイルが作成されます。内容を記述します。

```chat1.top
topic: ~chat1()
language: ja

u:(こんにちは) おっす！
```

4.MainActivity.javaに追記
[参考](https://android.aldebaran.com/doc/dialog_editor.html?highlight=qichat "参考") の下の方の記述を参考に、MainActivity.javaに記述

```MainActivity.java
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    QiChatPlayer qiChatPlayer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Instantiate a QiChatPlayer
        qiChatPlayer = new QiChatPlayer(this);

        // Register QiChatPlayer listener.
        qiChatPlayer.init(new QiChatPlayerListener() {

            @Override
            public void onQiChatPlayerServiceConnected() {
                // Load the topic file.
                qiChatPlayer.loadTopicFile("chat1");
            }

            @Override
            public void onLoadCompleted() {
                // The player is ready to play!
                qiChatPlayer.startTalk();
            }

            @Override
            public void onError(int error) {
                //QiChatPlayer.ERROR_FILE_NOT_EXIST
                Log.d(TAG, "NO="+error);
                //...
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        qiChatPlayer.stopTalk();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        qiChatPlayer.destroy();
    }
}
```

# 実行
### 準備
1.robot app ![image](https://qiita-image-store.s3.amazonaws.com/0/125752/329b8c9b-132c-7f36-61d2-9d2f9f6b9987.png)``` > Edit Configurations``` で CPU/ABi を x86 にして Apply をクリックします。
2.Emulator ![image](https://qiita-image-store.s3.amazonaws.com/0/125752/818b473b-d987-0d60-e15f-b7ee9c89dd2c.png) でPepperエミュレータを起動します。タブレット側に以下のメッセージが表示されますが、これはインストールの欄で記述したHAXMエミュレータを導入すれば早いですよ、という意味です（だと思います）。導入済なら、 Never show this again にチェックを入れてかまいません。
![image](https://qiita-image-store.s3.amazonaws.com/0/125752/464c0328-7419-f39d-33c6-875403d8431d.png)

### デバッグ実行（失敗）
1.デバッグ ![image](https://qiita-image-store.s3.amazonaws.com/0/125752/89264fbc-7cd8-8218-a3bf-e80504359b2f.png) で実行します。アプリが実行されますがすぐ終了します。Android Monitor を見ると、```public void onError(int error)``` で記述したエラーログが出力されています。
　```...D/MainActivity: NO=-6```
2.[APIリファレンス](https://android.aldebaran.com/doc/javadoc/index.html? "APIリファレンス")によると、エラーコードは、QiChatPlayer.ERROR_xxx で定義されています。-6は ERROR_FILE_NOT_EXIST（ファイルが存在しない）という意味のようです。

```QiChatPlayer.class(抜粋)
public static final int ERROR_SERVICE_IS_ALREADY_CONNECTED = -1;
public static final int ERROR_SERVICE_DISCONNECTED = -2;
public static final int ERROR_SERVICE_CONNECTION_IS_NOT_READY = -3;
public static final int ERROR_CURRENT_LOADING_TASK_IS_NOT_FINISHED_YET = -4;
public static final int ERROR_LOAD_IS_NOT_COMPLETED = -5;
public static final int ERROR_FILE_NOT_EXIST = -6;
```

3.```Chat Topi``` を作成したとき Japanese を選択したので ```raw-ja``` フォルダに chat1.top ファイルが作成されました。しかし、タブレットの言語設定は English のままなので raw-en を探す、FILE_NOT_EXIST、ということのようです（Androidっぽい！）。タブレットのエミュレータの Setting をタップします。```Language&input > Language``` で 日本語 を選択します。

### デバッグ実行（成功）
1.もう一度、実行してみます。今度はうまく動いているようです。Robot Viewer の Dialog view から「こんにちは」と入力してみます。
![image](https://qiita-image-store.s3.amazonaws.com/0/125752/b81cf996-bfa4-167a-bcbf-aa08bafc6fa8.png)

2.pepperが返してくれました。成功です！
![image](https://qiita-image-store.s3.amazonaws.com/0/125752/185d30fb-467c-a0cb-77cd-28bbedf0909b.png)

# 最後に
私はPepper Java SDK（java-naoqi-sdk）で、リモコン（[こんなの](https://play.google.com/store/apps/details?id=jp.co.atika.pepperrc&hl=ja "PepperRC")）とか作ってみてたので、そんなに違和感なく入れましたが、若干ハマリました。その他所感です。

・Choregraphe(Python)とメソッド名が違う
・でも情報量が少ない[Pepper SDK for AndroidStudio](https://android.aldebaran.com/doc/introduction.html "Pepper SDK for AndroidStudio") ぐらい（？）
・Choregrapheでステートマシンデザインを使ってサクッと作れてたアプリはどうするか（動作レイヤ毎にFragmentを分けて遷移させたらよいのかな）

Pepper SDK for AndroidStudio で開発手段の選択肢が増えました。Choregrapheも捨てがたいですが、これからも両方楽しんで行きたいと思います。