MovaTesting開発の心得(2)　ー　Android StudioでNDK Debug - ②

前回は、Android Studioを使ったNDK Debugの入門編を紹介しましたが、今回は、少し実用的なNDK Debugを紹介します。

#準備
１、 HelloJni Activityにボタン１個を追加し、クリックされた場合は、JniメソッドstringFromJNIを呼び出し、結果を表示するようにソースコードを変更します。

```
public class HelloJni extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // Create a TextView
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);

        LinearLayout row = new LinearLayout(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

        final TextView tv = new TextView( this );
        tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        tv.setText( "hello");
        row.addView(tv);
        layout.addView(row);

        // Create a Button
        row = new LinearLayout(this);
        row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        Button btn = new Button(this);
        btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        btn.setText("START");
        row.addView(btn);

        layout.addView(row);
        setContentView(layout);

        // when clicked, set the text retrieved by calling a native function to TextView
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.setText(stringFromJNI());
            }
        });
    }
```

２、 ProjectをBuildします。

#NDK Debug
１、 hello-jni.cにブレークポイントを設定します。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/92807/cf064ad7-5646-1fd5-b146-da3115cbe9e4.png)

２、Debug - app-native でアプリを起動します。
![スクリーンショット 2015-09-18 11.06.14.png](https://qiita-image-store.s3.amazonaws.com/0/92807/b4b5f99d-ba3e-da9b-3800-e00d74ae71a9.png)

３、「START」ボタンをクリックし、C++のブレークポイントで止められ、値を見ることが出来ます。
![スクリーンショット 2015-09-18 11.10.51.png](https://qiita-image-store.s3.amazonaws.com/0/92807/cbc8097f-ce99-53eb-1678-d484543a68c9.png)

# Javaのデバッガ
１、Java側のデバッガするには、メニューの"Attach debugger to Android process"アイコンをクリックします。
![スクリーンショット 2015-09-18 11.14.21.png](https://qiita-image-store.s3.amazonaws.com/0/92807/ea74d72a-59af-3fdc-b92e-68945371dbf5.png)

２、接続したいアプリのpackageを選択してOKします。
![スクリーンショット 2015-09-18 11.19.52.png](https://qiita-image-store.s3.amazonaws.com/0/92807/688a059b-d802-8b1a-bd05-7cb58fda742a.png)

３、「START」ボタンをクリックして、Javaのブレークポイントで止められます。
![スクリーンショット 2015-09-18 11.41.50.png](https://qiita-image-store.s3.amazonaws.com/0/92807/2136fa79-643c-600f-bb7c-a24980c71d8b.png)

#エラーが発生した場合の解決方法
１、「Attach debugger to Android process」で時々次のようなエラーが発生してしまいます。
![スクリーンショット 2015-09-18 11.27.39.png](https://qiita-image-store.s3.amazonaws.com/0/92807/4922c492-9e96-7551-c91a-a6d75c206d6f.png)

２、この時は、Tools - Android - Enable ADB Integrationを一旦外し、再度チェツクすれば解決できます。
![スクリーンショット 2015-09-18 11.44.37.png](https://qiita-image-store.s3.amazonaws.com/0/92807/b75f5d83-b25a-86ba-7309-36917ab4c8bf.png)

[MovaTesting](https://www.movatesting.com/)は、クラウド上でアプリ・Webサイトやゲーム、デザインのテストが行える実機検証・自動テストサービスです。テストコードの自動生成、人工知能による自動テスト、動画の自動保存、開発ツールとの連携などの特徴があります。
スマホアプリ・サイトを開発中の方は、ぜひ一度試してみてください。

次回は、native build settingsを指定して、C/C++のNDK Debug方法を紹介します。