LoginSignup
4
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-24

環境

  • 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

環境変数設定

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

環境構築

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

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

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

バージョン登録.JPG

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

↑と同じフォルダに「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

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

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

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

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

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

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

一旦ビルドした後に、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で以下のように記述するとヘッダファイルが作成される。
WS000012.JPG

参照元

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/

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6