일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 건조합니다
- Android
- OSGi
- 설명좀 써줍니다
- 이게 뭐니
- 원격으로 컴퓨터 끄기
- 봄
- 블로그가
- 아이폰
- iphone
- 서비스
- 앱
- 3GS
- uPnP
- JNI
- ontology
- XML
- w3c
- OWL
- 과제
- java
- book
- Mac
- 우분투
- 안드로이드
- TunesMate
- 쉽지요잉
- TPC-C
- rdf
- Benchmark
- Today
- Total
infatuation
Android NDK 설치 & Hello JNI 예제 본문
- NAtive code를 안드로이드
애플리케이션에 적용할 수 있게 함
- NDK는 다음을 제공
C와 C++로 라이브러리 작성하는 툴
라이브러리를 Android에 적재할 수 있는 .apsk로
변환하는 방법 제공
Native System headers &
libraries
Documentation, samples &
tutorials
- NDK 활용의 예 : 신호처리, 물리 시뮬레이션, 커스텀
바이트코드/ 명령어 인터프리터 등과 같이 메모리를 너무 많이 할당하지 않으면서도 CPU를 많이 사용하는 작업에 적함
- 장점 : 빠른실행
- 단점 : 이식성 없음, JNI 오버헤드 수반, 시스템
라이브러리에 접근불가, 디버깅 어려움
- 한계
1) C에서 실행되는 메소드를 단순히 재코딩 하는것
으로는 성능향상에 큰 도움이 되지 않는다.
2) NDK가 native-only 어플리케이션 개발은
힘들다.
(Please note that the NDK does
not enable you to develop native-only application)
3)안드로이드의 첫 번째 런타임은 Dalvik 가상머신에 있다.
- 포함 되어 있는 C 헤더
libc ( C 라이브러리 )
헤더 / libm ( math 라이브러리 )
헤더 / Jni Inter face
헤더
- 호환성을 보장하는 방법( application
using a native library produced with the NDK)
해당 매니페스트 파일에 android:minSdkVersion="3" 속성과 함께
<users-library> 엘리먼트를 반드시 선언한다.
* NDK Download 받기
URL : http://developer.android.com/sdk/ndk/index.html
Android developers 사이트에 가면 SDK 페이지
좌측에 메뉴에 Native Development Tools 메뉴에서 NDK 선택
Download the Android NDK 에서 자신의
개발환경에 맞는 OS 선택 - 난 Windows
* NDK 설치하기
다운받은 android-ndk-r4.zip
파일을 Cygwin이 설치된 폴더 안의 Home에 복사
copy path -
C:/cgywin/home/계정명/ 밑에 복사해줌
* NDK 빌드
Cygwin Bash Shell 을 실행해서
android-ndk-r4 폴더로 이동
- 빌드할 프로젝트 폴더인 samples로 이동
>> android-ndk-r4/samples/hello-jni
- ndk-build 를
실행하여 빌드 시작 >> /home/Ryoung/android-nkd-r4/ndk-build -B
.so 파일 생성
/android_ndk/samples/hello-jni/libs/armeabi 경로에 가면 libhello-jni.so 파일 생성된 것 확인할 수 있다.
*Eclipse에서 Android 에뮬레이터에
Hello Jni 실행하기
예제 파일이였던 Hello Jni가 들어있는
Sample 파일 가져와서 프로젝트 생성
- 경로 :
android-ndk/samples/hello-jni
ndk 빌드해서 생성한 .so 파일 확인
Android 에뮬레이터 부팅이 ㅣ끝나면 HelloJni 구동화면 볼 수 있음
*HelloJni.java
package com.example.hellojni; import android.app.Activity; import android.widget.TextView; import android.os.Bundle; public class HelloJni extends Activity { /**Called when the activity is first created.*/ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv= new TextView(this); tv.setText( stringFromJNI() ); // A native 함수호춗 setContentView(tv); } // A nativefunction public native String stringFromJNI(); // 정의하지 않은 함수 호춗시 java.lang.UnsatisfiedLink Errorexception 발생! public native String unimplementedStringFromJNI(); // /com.example.HelloJni/lib/libhello-jni.so static{ System.loadLibrary("hello-jni"); } }*Hello-Jni.c
#include <string.h> #include <jni.h> jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env) -> NewStringUTF(env, "Hello From JNI !"); }*MakeFile
APP_PROJECT_PATH :=$(call my-dir)/project APP_MODULES := hello-jni*strings.xml
<!--?xml version="1.0" encoding ="utf-8"?--> <resources> <string name="app_name"> HelloJni </string> </resources>
'Study > Android' 카테고리의 다른 글
안드로이드 SD카드 (0) | 2011.05.08 |
---|---|
Cygwin을 설치해 봅시다~ (0) | 2011.04.10 |
안드로이드 애플리케이션 빌드 에러 (0) | 2011.03.29 |
안드로이드 서비스 (0) | 2011.03.02 |