Windows7でAndroid NDKを使用してCファイルを作成し、Hello Worldを表示する

##環境
- Windows 7
- AndroidStudio 3.0

##NDKの概要と目的
AndroidでCやC++を使用できるようにするもの。
Cファイルで"Hello World"を作成し、それをAndroid端末に表示したい。

##新規プロジェクト作成
Application name： 「NdkTest2」
Company domain：「companydomain」

##NDKインストール
Tools → Android → SDK Managerから↓を選択してインストール
![NDKインストール.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/ce0c7ff0-9bc9-fe79-dd09-9d94f806e847.jpeg)

##環境変数設定
File → Project Structure → SDK Location → Android NDK locationにあるパス名を環境変数の「Path」に追加。

##環境構築
↓のフォルダに「jni」フォルダを新規作成
![jni.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/5f2aed48-19d9-ee13-e19b-8ff7f9d4f0f8.jpeg)


対応Androidの最小バージョンを指定。最低でも14以上にしないとNDKが使用できない。

```java:
 <uses-sdk android:minSdkVersion="14" />
```

![バージョン登録.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/4ac45a24-c64d-20ab-cffe-fa21642b4d91.jpeg)


↓のフォルダに「Application.mk」作成。その中に「APP_PLATFORM := android-14」と記入。
![Application.mk.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/38a31a85-9b70-6ed9-45e0-532f23615f89.jpeg)

↑と同じフォルダに「Android.mk」作成。その中に以下を記述。

```
LOCAL_PATH := $(call my-dir)	# 現在のディレクトリを指定。
include $(CLEAR_VARS)		    # 複数のライブラリを使用する場合に推奨らしい。
LOCAL_MODULE := hello		    # 作成したいライブラリファイルの名前。
LOCAL_SRC_FILES := hello.c	    # 作成したいソースファイルの名前。
LOCAL_LDLIBS := -llog		    # Androidの機能を使用できるようにリンクする。
LOCAL_ARM_MODE := arm		    # armモードでコンパイル。高速にできるらしい。
include $(BUILD_SHARED_LIBRARY)	# 共有ライブラリを作成するために必要。
```
↑の各記述の意味については↓のリンクを参照。
http://www.atmarkit.co.jp/ait/articles/1003/17/news093_3.html

↑と同じフォルダに「hello.c」を新規作成。中身は空でよい。

ここまですると、Android Studioに先ほど作成したファイルが表示されているはず。
![フォルダ.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/e240668f-6d65-20d4-95fe-f9716ad6019e.jpeg)

ここから右クリック　→　Link C++～をクリック。Build Systemを「ndk-build」にした後にProject Pathに「Android.mk」を指定。
![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/6eb1512d-36a5-0d13-170e-591d8c70de63.jpeg)
![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/a30ad621-99cb-b7e5-69e1-e5e87e9296f5.jpeg)

OKを押すと、「Android.mk」と「Application.mk」が↓のように移動する。
![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/ed72e88f-eca2-6f77-40d9-9bfd64648b72.jpeg)

左下のTerminalを選択後「cd app/src/main/jni」を入力。その後、「ndk-build」を入力すると、共有ライブラリが生成される。
![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/70ff1b5a-ec9d-cbae-f6ff-6f62b99eba94.jpeg)

companydomain.ndktest2内にjavaファイルを作成。中身を以下のように書く。
![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/5acdde8f-edb4-874f-346e-a3adf48829da.jpeg)

TextHello();が赤文字になっているはず。
マウスカーソルを当てて　Alt + Enter で出てきた「Create　～」をクリック。
すると、hello.cに以下の内容が書き込まれる。
![WS000010.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/cd53ad2d-aee4-d53b-e37f-e4a66809b100.jpeg)

このままだとエラーなので、以下のように書き換える。jni.hの追加。jstringJNICALLの間を空ける。
returnValueを"Hello World"。
![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/437b69b8-bb9f-f3d5-18fe-69fa281d2f7f.jpeg)

一旦ビルドした後に、activity_main.xmlにText Viewを追加。その後、MainActivity.javaに以下を記述。
その後実行すると"Hello World"が表示される。

```java:MainActivity.java
public class MainActivity extends AppCompatActivity {

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

        Sample sample = new Sample();
        TextView textView = (TextView) findViewById(R.id.textView);

        textView.setText(sample.TextHello());
    }
}
```

##追記
Terminalで以下のように記述するとヘッダファイルが作成される。
![WS000012.JPG](https://qiita-image-store.s3.amazonaws.com/0/256346/61fa7f5b-d964-c26e-0a33-5049f5b1b7d8.jpeg)

##参照元
http://outcesticide.hatenablog.com/entry/2012/11/30/003949
http://www.atmarkit.co.jp/ait/articles/1003/17/news093.html
http://d.hatena.ne.jp/yasuhallabo/20130816/1376616907
https://stackoverflow.com/questions/41791429/error-your-project-contains-c-files-but-it-is-not-using-a-supported-native-bu
https://dev.classmethod.jp/smartphone/android/android_ndk_install/