일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SwiftUI
- 애플
- SSL
- appres
- albumbook
- MYSQL
- kmip
- Android
- apple
- 앨범북
- Xcode
- 앱리소스
- Nodejs
- fido
- FIDO2
- 2FA
- openssl
- otpkey
- git
- css
- 안드로이드
- MFA
- 앱스토어
- 인증
- SSH
- WebAuthn
- MSYS2
- OTP
- OSX
- SWIFT
Archives
- Today
- Total
인디노트
[JAVA] jni로 HelloWorld출력 (package에 포함) 본문
native메소드를 포함하는 클래스 작성
JNI롤 포함하는 클래스를 만든다.
1 2 3 4 5 6 7 | package com.my; public class HelloUtility { public static String foo(String str); static { System.loadLibrary( "helloutil" ); } } |
HelloUtility 클래스가 com.my 패키지에 포함되도록 소스 상단에 package com.my;을 추가해야 한다.
native메소드를 포함하는 클래스 컴파일
HelloUtility 컴파일 할 때 -d 옵션을 사용한다. 아래 명령어를 입력하면 현재 디렉토리에 com/my 폴더가 생성된다.
1 | javac -d . HelloUtility.java |
native 라이브러리 개발을 위한 header 생성
JNI 헤더를 생성할때는 클래스명 앞에 아래와 깉이 패키지명을 포함 시키다.
1 | javah -jni com.my.HelloUtility |
native 라이브러리 개발
헤더를 포함시키고 함수를 구현한다. 함수명은 Java + 패키지명 + 클래스명 + 함수명를 언더바로 구분해서 아래와 같이 JNI명명규칙에 따라야 한다.
1 2 3 4 5 | JNIEXPORT jstring JNICALL Java_kr_my_HelloUtility_foo(JNIEnv *env, jobject obj, jstring data) { // TODO return data; } |
native 파일 컴파일
구현된 native 함수가 포함된 소스를 컴파일해서 라이브러리를 생성한다.
native 함수 사용
이제 프로젝트내에서 아래 소스와 같이 HelloUtility를 import만 하면 native 함수를 사용 할 수 있게 된다.
1 2 3 4 5 | import kr.my.HelloUtility; class Foo{ ... String value = HelloUtility.foo( "xxxx" ); } |
반응형
'소스 팁 > Java, Android, Kotlin' 카테고리의 다른 글
json 파싱 (0) | 2018.10.23 |
---|---|
xcode 에서 java JNI 사용하기 (0) | 2018.10.16 |
log4j:WARN Please initialize the log4j system properly (0) | 2018.09.11 |
api 와 implementation (0) | 2018.09.06 |
Android common lib, include ImageCache, HttpCache, DropDownListView, DownloadManager, Utils and so on (0) | 2018.08.30 |
Comments