[펌] Android NDK(안드로이드 NDK) 실행과 JNI 생성 (기초)
Android/NDK 2014. 6. 25. 20:46원문링크 : http://blog.naver.com/dizmahs/110098711235
가. 시작하기..
기존에NDK 빌드 하는 방법이라고 나름 열심히 설명을 해놓았었지만 실제로 사용할 일이 생기니
정리한 내용들이 너무 부실하게 써있던걸 느꼈습니다. T^T;
여기 저기 찾아보고 제가 쓴 글 다시 봐도 해봐도 도통 뭔 소린진.. 좀 더 깔끔하게 정리해서 포스팅
할까 말까 살짝 고민은 했지만.. 기존에 부실한 자료에도 많은 분들이 감사하다는 글들이 있었던걸
기억해서 다시 정리 합니다. ( 덧글 좀.. 굽신 굽신)
워드로 작업하고 옮기는 중인대 이것도 은근히 일이내요 ;; 네이버는 왜일케 편집이 그지야 ㅠㅠ;a
췌췌췌 그림도 안올라가 돌긋내 정말 ㅠㅠ
나. JNI
그림이 최고 입니다. 뭐 던지 간에;;
JNI 는 자바에서C를 사용하고 어쩌고.. 많은 설명들은 찾아보면 자세히 나옵니다 ㅎㅎ;a
중요한건 자바에서C를 사용하기 위해서JNI를 사용하는데 이걸 하는 방법 입니다.
다. 안드로이드에서 NDK를 사용한 JNI 쓰기
1. 사용할 네이티브 메서드가 포함된java 클래스를 하나 만듭니다.
public class NdkTest{ static{ try{ System.loadLibrary( "com_kicc_jni_MsrEncryption" ); }catch( Exception e ){ e.printStackTrace(); } }
// 이게 네이티브 메서드 입니다. public native int doTest( int a, int b ); } |
2. Cygwin 에서javac 로 컴파일 합니다.
javac NdkTest.java명령어를 입력하면 컴파일이 되면서.class 파일이 생성이 됩니다.
3. javah 명령어를 통해서 네이티브 함수가 포함되어 있는.h 파일을 만듭니다.
javah NdkTest명령어를 입력하면.h 파일이 생성 됩니다. ( javah class name )
Tip) class 파일에 패키지 명이 있는 경우 패키지 명을 다 넣어줘야 합니다.
Ex) package com.dizmahs 인 경우 폴더 구조는src/com/dizmahs/NdkTest.java 이렇게 되어 있겟죠
src 폴더로 이동을 한 후javah com.dizmahs.NdkTest 라고 입력 하시면 됩니다.
4. [클래스명].h 파일이 생성되면[클래스명].c 파일을 만들어서include 한 후에C코딩을 합니다.
NdkTest.h 파일이 생겼으니 이걸NdkTest.c 파일로 복사해서c에서 코딩 하면 됩니다.
헤더 파일을 복사 했으니 불필요한 부분들은 제거 하시면 위 빨간줄 처럼 모양이 나옵니다.
변수명이 없는 것들을 넣어 주고 “return a+b” c 코드로 처리할 로직들을 코딩합니다.
5. Android.mk 파일을 생성합니다.(android-ndk-r4\docs\ANDROID-MK.TXT 참고 하세요 )
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkTest <- out 으로 생성되는 모듈 이름
LOCAL_SRC_FILES := NdkTest.c <- 소스 파일
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------
6. 안드로이드 프로젝트를 하나 만들어서 Cygwin 의 home 폴더로 가져 옵니다.
(그냥 빌드가 안되기 때문에.. ㅠ,ㅠ)
빌드 명령어인 /home/dizmahs/android-ndk-r4/ndk-build –B 를 실행한 화면 입니다.
짧은 영어로 보자면 결론은 “안드로이드 프로젝트 하나 만들어서 해라” 라는 것 같습니다. –0-;
안드로이드 프로젝트 하나 만든 후에 jni 폴더를 생성해서 위에서 만들 파일들을 넣어 줍니다.
경로 보시면 아시겠지만 NdkTest 라고 안드로이드 프로젝트 하나 만들어서 cygwin의 home에
계정 아래 폴더로 복사한 후jni 라는 폴더를 만들어서 위에서 만든 파일들을 다 복사 해 왔습니다.
/NdkTest 폴더로 이동 합니다.
/home/dizmahs/android-ndk-r4/ndk-build –B 명령어를 입력해서 빌드를 합니다.
빌드가 성공한 모습을 볼 수 있을 겁니다.. 아니시라면.. 처음부터 다시..ㅠ,ㅠ 잘 따라 오세요 ㅋㅋ
armeabi 라는 폴더 안에 .so 파일이 생성된걸 확인할 수 있습니다.
libs 라는 폴더를 하나 만든 후에 armeabi 폴더를 복사해서 붙여 넣기 합니다.
( armeabi폴더와 생성한 .so 파일만 있으면 됩니다. )
libs 폴더 아래 붙여 넣기를 합니다.
이제 사용만 하면 되는대 ......
시간이 너무 늦엇내요 막차 타려면 퇴근 해야겟죠 저도 ㅎㅎ;
간략히 애기 하자면 제일 처음에 만든 NdkTest 를 생성해서 네이티브 메서드를 호출하면 됩니다.
NdkTest ndkTest = new NdkTest();
Int iValue = ndkTest.doTest( 5, 6 );
Log.e( “NDK-TEST”, “5 + 6 =” + iValue ) ;
끝.
= PS =
나름 열심히 정리한 자료 입니다. 퍼가실 때는 꼭 덧글 과 출처를 남겨주세요 ㅠ;
이거 정리 하려고 야근했어요-0-//;
그럼.. 도움이 되셨기를...
그나저나 JNI 어렵내요 이거.. 도대체가.. T^T 쉬운게 없내여
'Android > NDK' 카테고리의 다른 글
Cygwin 설치 및 NDK C/C++ Library build 간단 설명 (Windows 7 기반) (0) | 2014.08.28 |
---|---|
[펌] Android NDK 시작하기 (0) | 2014.06.25 |