Android Studio 2.1でJNIを使って開発するには

Android Studio 2.1でJNIを使って開発する手順です。

環境

  • Windows 10
  • Android Studio 2.1.1

プロジェクトの作成

Android Studioで新しいプロジェクトを作成します。

011

「Application name」と「Company Domain」を入力します。

ここでは、「Application name」を「JniTest」としました。

012

「Phone and Tablet」をチェックし、「Minimum SDK」を選択します。

013

「Empty Activity」を選択します。

014

「Activity Name」と「Layout Name」は初期値のままにします。

015

プロジェクトが作成されます。

016

メニューの「Run」→「Run ‘app’」を選択して、アプリケーションを実行できることを確認します。

017

018

Gradleの設定

メニューの「File」→「Settings」を選択し、「Build, Execution, Deployment」→「Build Tools」→「Gradle」を選択します。

「Use Default Gradle wrapper (recommended)」にチェックを入れ、「OK」ボタンを押します。

019

Android NDKのインストール

メニューの「Tools」→「Android」→「SDK Manager」を選択します。

「SDK Tools」タブを選択し、「Android NDK」をチェックします。。

001

「Apply」ボタンを押します。

002

License Agreement画面の「Accept」をチェックして、「Next」ボタンを押します

003

インストールが始まります。

004

メニューの「Run」→「Run ‘app’」を選択して、アプリケーションを実行できることを確認します。

build.gradle(Project)ファイルの編集

「build.gradle(Project: jnitest)」を開きます。

classpath 'com.android.tools.build:gradle:2.1.0'

の行を次のように変更します。

classpath 'com.android.tools.build:gradle-experimental:0.7.0'

020

gradle-wrapper.propertiesファイルの編集

「gradle-wrapper.properties (Gradle Version)」を開きます。

distributionUrl=…

の行を次のように変更します。

distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip

021

build.gradle(Module)ファイルの編集

「build.gradle(Module: app)」を開きます。

次のように変更します。

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.3"

        defaultConfig {
            applicationId = "jp.gesource.jnitest"
            minSdkVersion.apiLevel = 19
            targetSdkVersion.apiLevel = 23
            versionCode = 1
            versionName = "1.0"
        }
        buildTypes {
            release {
                minifyEnabled = false
                proguardFiles.add(file('proguard-android.txt'))
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
}

メニューの「Run」→「Run ‘app’」を選択して、アプリケーションを実行できることを確認します。

Android NDK locaationの設定

「File」→「Project Structure」→「SDK Location」を選択します。

「Android NDK locaation」が設定されていなければ、設定して「OK」ボタンを押します。

022

build.gradleの設定

build.gradle(Module: app)を開き、「buildTypes」の設定の下に「ndk」の設定を追加します。

buildTypes {
    …
}
ndk {
    moduleName = "jnitest"
}

023

MainActivityの編集

MainActivity.javaを開き、次の行を追加します。

static {
    System.loadLibrary("jnitest");
}
public native String getMsgFromJni();

build.gradleのmoduleNameで設定した名前をSystem.loadLibraryの引数に設定します。

024

getMsgFromJni関数が存在しないため、getMsgFromJniの部分でエラーになっています。
カーソルをgetMsgFromJniの上に移動し、ALT+Enterキーを押します。

025

Enterキーを押すと、jniフォルダーにjnitest.cファイルが作成され、関数が作成されます。

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_gesource_jp_jnitest_MainActivity_getMsgFromJni(JNIEnv *env, jobject instance) {
    // TODO
    return (*env)->NewStringUTF(env, returnValue);
}

jnitest.cのreturnValueの部分を編集します。

return (*env)->NewStringUTF(env, "Hello JNI");

res/layout/activity_main.xmlファイルを開き、TextViewのidを「jni_msgView」に設定します。

026

MainActivity.javaを開き、MainActivityクラスのonCreateメソッドの末尾に次の行を追加します。

((TextView) findViewById(R.id.jni_msgView)).setText(getMsgFromJni());

TextViewの部分がエラーになっているので、Alt+Enterキーを押して修正します。

027

メニューの「Run」→「Run ‘app’」を選択して、アプリケーションを実行できることを確認します。

028

C言語で記述した処理が実行されています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください