공부/안드로이드

JNI 사용하기

B612 2023. 9. 10. 18:11

JNI(Java Native Interface)란?

(내가 이해한 바에 따르면) 자바를 사용하면 운영체제 상관없는 개발이 가능하다.

하지만, 운영체제의 모든 기능을 JVM이 담지 못하기 때문에 몇몇 기능은 해결이 되지 않는다. (ex. 하드웨어 제어가 필요한 경우, 프로세스 성능 향상 등)

이러한 경우에는 운영체제가 구현된 언어 (C, C++ 등)을 사용할 필요가 있고, 이 때 JNI가 사용된다.

 

https://re-build.tistory.com/7

 

[Android] 안드로이드 스튜디오에서 JNI 사용하기

이번 포스팅은 제가 이번에 프로젝트를 진행하면서 JNI를 사용해야 할 상황이 생겨 구현하면서, 알게 된 것들을 기록하는 목적으로 작성합니다. JNI?JNI란 Java Native Interface의 약자로서, 자바 외의

re-build.tistory.com

밑 글은 위의 블로그를 따라 실습한 내용이다.

 

실습 내용

 

Tools > SDK Manger

Tools > SDK Manager 에서 NDK를 선택한 후 Apply.

 

설치 중...

NDK를 설치했다.

 

환경 설정

SDK Location > Android NDK location에서 위치를 설정해 주어야 한다.

하지만 저 칸이 클릭이 안되어서 코드에서 설정을 변경했다.

 

SDK 폴더 내의 ndk-bundle의 경로를 직접 입력해주었다.

 

그 다음 저 블로그의 코드를 복사해 activity_main.xmlMainActivity.java를 수정했다.

 

JNI 파일을 작성할 폴더를 생성했다.

 

폴더 생성 완.

폴더 생성 완.

 

소스 파일 생성 완.

소스 파일 생성 완.

 

마찬가지로 Calculator.cpp 파일에 코드를 작성했다.

 

나에게 맞춰서 작성한 코드는 아래와 같다.

1
2
3
4
JNIEXPORT jint JNICALL Java_com_example_jni_MainActivity_getSum
    (JNIEnv *env, jobject thiz, jint num1, jint num2) {
    return num1 + num2;
}
cs

 

File > Settings > External Tools에 들어간다.

+를 눌러 툴 세팅을 작성한다. (난 이미 끝낸 상태기 때문에 툴이 생성되어 있다)

 

헤더파일 생성 툴

해더파일을 생성하기 위한 툴을 생성한다.

 

Program 에는 javah.exe 의 경로 작성

Arguments에는 MainActivity의 경로를 찾은 후 아래와 같이 입력했다. (블로그를 따라했더니 잘 안되어서)

-classpath C:\Users\82106\AndroidStudioProjects\JNI\app\src\main\java -v -jni $FileClass$

Working directory에는 jni의 경로를 작성

 

툴을 이용해 헤더파일이 정상적으로 작성되었고, 이후는 블로그를 참고해 소스코드를 수정했다.

 

성공!

성공!

'공부 > 안드로이드' 카테고리의 다른 글

Magisk 루팅 (삽질2)  (2) 2023.10.31
xposed 사용 (삽질1)  (0) 2023.10.26
웹뷰 만들기  (0) 2023.09.20
JNI 이용해 출력하기  (0) 2023.09.10
안드로이드 기본  (0) 2023.09.07