1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.example.hellojni; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.TextView; public class HelloJni extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_jni); TextView tv = new TextView(this); // jni 를 이용해서 호출할 메소드 입력 tv.setText(stringFromJNI()); setContentView(tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.hello_jni, menu); return true; } public native String stringFromJNI(); static { // jni/hello-jni.c 호출할 so 파일 명을 입력 System.loadLibrary("hello-jni"); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 | #include <string.h> #include <jni.h> // 아래와 같이 구현을 한다. // 메소드 명은 com.example.hellojni 패키지 명에 . 을 _ 로 치환 jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz) { return (*env)->NewStringUTF(env, "Hello From JNI !"); } | cs |
예제)
com.example.hellojni -> Java_com_example_hellojni_HelloJni_stringFromJNI
com. |
Java_com_ |
example. |
example_ |
hellojni |
hellojni_ |
HelloJni.java |
HelloJni_ |
1 2 3 4 5 6 7 8 | LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) | cs |
android 프로젝트명/jni 폴더로 이동
android.mk 작성한 내용을 바탕으로 빌드
ndk-build
build 후에 obj/local/armeabi 폴더에 가게 되면은
libhello-jni.so 가 생성된 것을 알 수 있다.
NDK - NDK 작성시 주의점 (0) | 2018.09.04 |
---|
댓글 영역