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から↓を選択してインストール

環境変数設定

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

環境構築

↓のフォルダに「jni」フォルダを新規作成

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

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

↓のフォルダに「Application.mk」作成。その中に「APP_PLATFORM := android-14」と記入。

↑と同じフォルダに「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に先ほど作成したファイルが表示されているはず。

ここから右クリック → Link C++~をクリック。Build Systemを「ndk-build」にした後にProject Pathに「Android.mk」を指定。

OKを押すと、「Android.mk」と「Application.mk」が↓のように移動する。

左下のTerminalを選択後「cd app/src/main/jni」を入力。その後、「ndk-build」を入力すると、共有ライブラリが生成される。

companydomain.ndktest2内にjavaファイルを作成。中身を以下のように書く。

TextHello();が赤文字になっているはず。
マウスカーソルを当てて Alt + Enter で出てきた「Create ~」をクリック。
すると、hello.cに以下の内容が書き込まれる。

このままだとエラーなので、以下のように書き換える。jni.hの追加。jstringJNICALLの間を空ける。
returnValueを"Hello World"。

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

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で以下のように記述するとヘッダファイルが作成される。

参照元

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/