이제 코드를 작성해 보자. 우선 네이티브 코드를 저장할 폴더를 생성한다.
위 그림을 참고해 main 폴더 아래에 JNI폴더를 생성한다.
package kr.pe.burt.hellojni;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
public native String getMessage();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
위 코드를 작성하면 getMessage() 네이티브 메서드에 밑줄이 그려진다.
여기에 커서를 놓으면 빨간 전구 아이콘이 표시된다.
이 전구를 클릭하면 대화상자가 나온다.
이 파일을 선택해 보자.
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_kr_pe_burt_hellojni_MainActivity_getMessage(JNIEnv *env, jobject instance) {
// TODO
return (*env)->NewStringUTF(env, returnValue);
}
위처럼 자동으로 JNI코드가 작성되어 있다. 함수를 구현만 해주면 된다. returnValue
를 Hello JNI
로 수정한다.
#include <jni.h>
JNIEXPORT jstring JNICALL
Java_kr_pe_burt_hellojni_MainActivity_getMessage
(
JNIEnv *env,
jobject instance
)
{
return (*env)->NewStringUTF(env, "Hello JNI");
}