일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Django REST Android
- 안드로이드 구글맵
- C++
- Django REST
- Android P
- Android
- android push
- Flutter TextField
- Java
- RxJava
- UWP
- dart
- 안드로이드
- FLUTTER
- Kotlin
- Rxjava2
- android architecture component
- Python
- mfc
- 알고리즘
- Django REST framework
- RxAndroid
- C/C++
- flutter firestore
- livedata
- C
- kodility
- 코틀린
- NDK
- 프로그래머스
- Today
- Total
개발하는 두더지
[C/C++/JAVA/JNI] JNI로 DLL, so 만들어 JAVA 프로젝트에서 사용하기 본문
# 빌드환경
Windows 10 64 bit + Eclipse 64 bit + Mingw 32/64bit
# 동작과정
C Project 생성
File -> New -> Other or C Project 선택
MinGW를 설치하면 Executable -> Empty Project -> MinGW GCC가 생김
(MinGW는 별도로 검색해서 설치해야함. 32비트 64비트 Installer가 따로있음.)
Project name을 쓰고 Finish
MinGW GCC 환경 세팅 방법
Project Properties -> C/C++ Build -> Environment -> MINGW_HOME 을 32비트 경로 또는 64비트 경로로 변경
이 위치에따라 최종 아웃풋이 32비트 dll 또는 64비트 dll로 나온다.
글쓴이의 MINGW의 설치경로는 다음과 같다.
64비트 : C:\Program Files\mingw-w64\x86_64-6.1.0-win32-seh-rt_v5-rev0\mingw64
32비트 : C:\MinGW
#include <jni.h> 가 syntex 오류가 나온다면?!
JDK가 설치된 경로에서 include 와 include\win32 를 Add 해야한다.
jdk\include : #include <jni.h> Syntex Error 안나옴
jdk\include\win32 : JNIEXPORT jint Syntex Error 안나옴
밑줄그어진대로 하면 Win32 API와 중복선언으로 인한 에러가 나오므로 JDK를 로드해야함
Project Properties -> C/C++ General -> Paths and Symbols -> includes -> GNU C 또는 GNU C++ -> include directories 를 NDK 설치경로안에 include 를 추가한다.
(글쓴이는 Android 개발하면서 설치한 Android NDK 안에 있는 폴더를 사용함)
NDK : E:\ProgramFiles\android-ndk-r10d\platforms\android-21\arch-x86_64\usr\include
최종 결과물을 DLL로 뽑아쓰려면?!
Project Properties -> C/C++ Build -> Settings -> Build Artifact -> 아래와 같이 변경
Output prefix는 lib으로 되어있는데 빈공간으로 둔다.
빌드 후 아웃풋 파일
Java Project 생성
Native Call Class 생성
Execute Class 생성
Native Call Class 로 C Header 생성
cmd.exe 를 키고 자바 프로젝트 bin 폴더까지 들어간다.
그다음에 javah -jni 패키지명.클래스명 을 입력하고 엔터를 누르고 에러메세지가 뜨지 않았다면
자바 프로젝트 bin 폴더안에 패키지명_클래스명.h가 생성된다.
생성된 헤더파일을 C 프로젝트로 복사한다.
헤더파일을 켜보면 아래와 같이 자동 생성되있다.
C 파일 생성
패키지명_클래스명.c 파일을 생성하고
아래와 같이 입력한다.
C Project 를 빌드하면 아래와같이
NativeDLLSample.dll 64bit 가 생성된다.
DLL를 Java Project로 복사 후 코드를 몇개 추가하고 실행시키면 아래와 같은 결과물이 나온다.
'Java,Android' 카테고리의 다른 글
[Android] Fragment 를 이용한 탭 만들기 (3) | 2017.05.18 |
---|---|
MP4 파일이 스트리밍이 안될때..? MOOV를 이동시켜 해결하기 (0) | 2017.02.16 |
[Android/안드로이드] Android 와 JSP 간 파라미터 암복호화 (3) (1) | 2016.07.22 |
[Android/안드로이드] Android 와 JSP 간 파라미터 암복호화 (2) (0) | 2016.07.22 |
[Android/안드로이드] Android 와 JSP 간 파라미터 암복호화 (1) (0) | 2016.07.22 |