AndroidStudio2.2のndkでcファイルを開く

#Android Studio2.2 でndkを使いcファイルを開きます。

テーマの通りですが、これがなかなか資料が少なくて大変だった


#ndkのインストール方法
appを右クリックしてOpen Module Settingを開きます。
SDK Locationを選んで一番下のとこでインストールしてください。
すでにある人は…/ndk-bundleとでもかいてあるはずです。

![ss 2016-05-29 22.22.23.png](https://qiita-image-store.s3.amazonaws.com/0/138369/dae7c351-fc21-ca94-0e52-068e36ed66a6.png)

![ss 2016-05-29 22.22.27.png](https://qiita-image-store.s3.amazonaws.com/0/138369/1c3116cf-a40b-0132-3722-10a5e1923397.png)
![ss 2016-05-29 22.22.30.png](https://qiita-image-store.s3.amazonaws.com/0/138369/93b7df24-7e68-65f2-9b67-617a00d6a1bc.png)
![ss 2016-05-29 22.22.34.png](https://qiita-image-store.s3.amazonaws.com/0/138369/7c453c5c-99d7-3285-a642-c4534146ecf8.png)


#ビルドツール
左のメニューからGradle Scripts -> build.gradleを二つ開きます。
最初はbuild.gradle(Project: TestNdk)の方です。

![ss 2016-05-29 22.27.48.png](https://qiita-image-store.s3.amazonaws.com/0/138369/a67de2c8-1f39-ebb3-b3ff-9be9027f36f8.png)


初期ではこうなってると思うので、これを以下のようにします。

![ss 2016-05-29 22.29.01.png](https://qiita-image-store.s3.amazonaws.com/0/138369/d6175911-4a00-45b7-76d4-5fb6c277af8a.png)

次にbuild.gradle(Module: app)の方です。

![ss 2016-05-29 22.28.03.png](https://qiita-image-store.s3.amazonaws.com/0/138369/7662c839-d538-6be0-6f90-7701178fdafc.png)

これを以下のようにします。

![ss 2016-05-29 22.30.15.png](https://qiita-image-store.s3.amazonaws.com/0/138369/819bea3a-5a49-cf51-79a8-f6b53a298e84.png)

右上のSyncを押してビルドツールを更新します。
すると、左のapp以下の階層が少し変わります。cppが追加されますね。
これで、ndkにもう対応出来るようになりました。

#使ってみる
まずは、c(cpp)ファイルを作りましょう。
ここではhello.cとします。
このhello.cをFinder(Explorer)からjavaフォルダと同じ階層にあるjniフォルダに入れます。
cファイルの準備はこれでOKです。

####xmlファイル
```xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 　　xmlns:app="http://schemas.android.com/apk/res-auto" 　　xmlns:tools="http://schemas.android.com/tools" 　 　　android:id="@+id/activity_main" 　 　　android:layout_width="match_parent" 　　 　　android:layout_height="match_parent" 　 　　tools:context="com.toxbe.testndk.MainActivity">
 
    <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Hello World!"
       android:id="@+id/textView" 　<!--ここを追加しただけ-->
       app:layout_constraintBottom_toBottomOf="@+id/activity_main" 
       app:layout_constraintLeft_toLeftOf="@+id/activity_main" 
       app:layout_constraintRight_toRightOf="@+id/activity_main" 
       app:layout_constraintTop_toTopOf="@+id/activity_main" />
 
</android.support.constraint.ConstraintLayout>
```

####javaファイル

```java
package com.toxbe.testndk;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
 
    static {
        System.loadLibrary("hello");
    }
 
    // helloライブラリにあるメソッドの定義
    public native String  stringFromJNI();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        TextView textView = (TextView)findViewById(R.id.textView);
        textView.setText(stringFromJNI());
    }
}
```
この時、public native String stringFromJni();
でエラーをはきますが、そのエラーの赤電球からcreateを押すと、hello.cに移動して勝手にちょいちょい書いてくれます。
しかし、これがちょいちょいずれてたりすることもあるので調整しましょう。

####Cファイル
```c:hello.c
#include <string.h>
#include <jni.h>
 
 
JNIEXPORT jstring JNICALL Java_com_toxbe_testndk_MainActivity_stringFromJNI(JNIEnv *env, jobject instance)
{
    // TODO
 
    return (*env)->NewStringUTF(env, returnValue);
}
```
関数名ですが
Java_パッケージの”.”を”_”に変える_Activityクラス名_関数名となり、
引数は第３引数のあとから追加していけばいいと思います。

ではreturnValueを”hello world via ndk.”にして実行してみましょう。

![ss 2016-05-29 23.02.09.png](https://qiita-image-store.s3.amazonaws.com/0/138369/de64af84-3763-1de1-ecf3-e8ff009b5e28.png)

こんな感じです。

まとめてみるとそんなにややこしくなく簡単でしたけど、試行錯誤してる時はよくわかんないままぐちゃぐちゃになったりしてました。

とにかく動いてよかった。

Android Studio2.0からの資料がとにかく少なかったので参考になれば嬉しいです。

Android Studio1.3ごろではmkファイルをいじったり、先にいろいろコンパイルしなければいけなかったりしたそうなので、簡単になってよかったです。

#参考にしたサイト
>[http://ph0b.com/new-android-studio-ndk-support/](http://ph0b.com/new-android-studio-ndk-support/)
>[http://qiita.com/m1takahashi/items/3a3c9d2845e9b57aeda3](http://qiita.com/m1takahashi/items/3a3c9d2845e9b57aeda3)