2013학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험

Slides:



Advertisements
Similar presentations
Node.js on Android 김상선. Node.js 2009 년 Ryan Dahl 이 개발 자바스크립트로 네트워크 어플리케이션을 작성할 수 있는 플랫폼 간단히 말하면 서버사이드 자바스크립트.
Advertisements

모바일 프로그래밍 개론 UNIT 01 로봇 SW 컨텐츠 교육원 조용수. 학습 목표 모바일 프로그래밍이란 ? Embedded System 특성 Mobile OS Hybrid and Native SDK and NDK 2.
2014 학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험. JNI 환경 구축 JNI 의 개념 JNI 사용.
JIT Compile 김진태. JIT Compile 이란 ? Managed Code(C#, java, managed C++ 등 ) 에서의 성능 향상을 목적 으로 둔 컴파일 기법Managed Code 예 ) JVM –JVM 의 일반적인 실행 방식 –JIT Compile.
Page  1 Copyright© 2015 Hanbit Academy, Inc. All rights reserved. [ 강의교안 이용 안내 ] 본 강의교안의 저작권은 한빛아카데미㈜에 있습니다. 이 자료를 무단으로 전제하거나 배포할 경우 저작권법 136 조에 의거하여.
© IBM Corporation 2006 목 차목 차  자바 언어의 소개  자바 언어의 역사  자바 환경 설정 (JDK 1.5)  Documentation API 의 설치  Eclipse 의 설치와 사용법  HelloWorld.
Page 1 Android Programming November 04 / 2009 S/W Junhyuk Jang.
Computer Graphics 윈도우 프로그래밍 김 창 헌김 창 헌. Computer Graphics 2 윈도우 시스템  윈도우  스크린 위에서 독립적으로 움직일 수 있는 사각형 영역  윈도우 시스템  유저와 어플리케이션간의 그래픽 스크린을 통한 인터페이스 를.
Embedded S/W 기초이론 및 실습.
Ⅰ. 정규직/계약직(전문컨설턴트)  지원자격 1. 모집분야 및 지원요건 1. 채용공고
Efl을 이용한 타이젠 네이티브 웨어러블 앱 만들기
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
SYSTEM CALL (Syscall) CSLAB SEWON PARK.
Android 개발환경 설정 및 Android View 소개
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
01. 안드로이드 개요와 개발환경 구축 제목.
제9장 입출력과 JNI.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
A n d r o i d Android 2010 년 5월 19일 작성자 : 백 선 재.
Chapter 02 JAVA 프로그래밍 시작하기 01 실무에서 사용하는 JAVA 개발 환경 02 JAVA 프로그램 작성
Chapter-2. 개발환경 구축하기.
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
크로스 컴파일 환경 구축.
이번 시간에는... 지난 시간에는 VM 기반 모바일 플랫폼 기술의 첫번째 시간으로, 모바일 플랫폼 및 그 현황과, GVM, XVM, WITOP, Brew 및 JavaStation 모바일 플랫폼의 특징과 구성에 대해 알아 보았습니다. 이번 시간에는 모바일 플랫폼 기술 그.
[INA470] Java Programming Youn-Hee Han
윤 홍 란 MFC 기초 윤 홍 란
JDBC 프로그래밍 이수지 이동주 1.
제 1 장. JAVA란 작성자 : NLIP.
System Call Linux Kernel 수업 3번째.
제4장 Cross Compiler 설치.
1장 Visual Basic 2010 시작 1.1 프로그램에 대한 기초 1.2 Visual Basic 버전
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
제1강 안드로이드 특징과 개발환경 구축 안드로이드 앱 개발 강좌.
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
CDC Connected Device Configuration CLDC보다 많은 리소스를 가진 시스템을 대상으로 설정
Sookmyung Women’s Univ. PSLAB Moon, Se won
Java RMI (Remote Method Invocation)
Power Java 제4장 자바 프로그래밍 기초.
Kasimov C언어 세미나 1st.
프로그래머를 위한 Java 2 제1장 Java, JVM 소개
안드로이드 개요 2005년 휴대폰 소프트웨어 개발사인 Android를 구글이 인수 2007년 11월 오픈소스로 공개
Java Programming Language (4)
Visual C++ Programming
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
Android 개발환경 설치 및 Hello World
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
( Overview of the Course Kwangman Man ( SangJi University.
Android Studio 설치하기 PPD JSY.
제1장 서론.
정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
객체 지향 프로그래밍.
23강 API - II - 약방의 감초 Random 클래스 - Scanner 및 Sysout - Wrapper 클래스의 이해
DataScience Lab. 박사과정 김희찬 (월)
「 LINUX IBM SpectrumScale 설치 가이드」
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Achro-210T Device를 활용한 Card Game
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
김 정 석 Web Programming 김 정 석
컴퓨터공학실습(I) 3주 인공지능연구실.
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
자바 5.0 프로그래밍.
Java RMI (Remote Method Invocation)
1장 Visual Basic 2010 시작 1.1 프로그램에 대한 기초 1.2 Visual Basic 버전
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
C.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
Choi Younghwan CSE HUFS
자바 가상 머신 프로그래밍 Chapter 3. 메소드 작성하기 Pslab 오민경.
Presentation transcript:

2013학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험 JNI 2013학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험

목차 JNI 환경 구축 JNI의 개념 JNI 사용 실습

JNI 환경 구축

Cygwin설치 Cygwin이란? Cygwin이 필요한 이유 Windows에 Linux와 유사한 환경을 제공. 두 개의 파트로 구성. 실제 Linux API 기능 제공, Linux API emulation layer로서의 역할을 하는 DLL(cygwin1.dll) Linux Look & Feel을 제공하는 툴. Cygwin이 필요한 이유 안드로이드는 Linux 2.6 커널 기반. 공유 라이브러리 파일로 .so파일을 사용함 (윈도우는 .dll)

Cygwin설치 강의자료 페이지에서 cygwin_package.zip 다운 받은 후 D:\cygwin_package\ 에 압축해제 한다. http://cygwin.com/install.html 에서 setup.exe 를 실행.

Cygwin설치 실행 후 아래 화면이 뜨면 [다음(N)] 버튼을 누름. Install from Local Directory 버튼을 선택하시고 다음 버튼을 누름.

Cygwin설치 Root Directory는 D:\Cygwin 으로 지정. Local Package Directory 는 D:\cygwin_package 로 지정.

Cygwin설치 Devel : 옆에 Default를 눌러 Install로 바꿈 Shell 항목의 mintty 줄 (그림의 아래쪽 빨간 박 스)의 skip을 클릭.(skip 대신 숫자가 뜬다)

Cygwin설치 아래 화면에서 다음 버튼을 누름. 설치 시작하고 오류 메시지 같은 게 뜨면 그냥 OK 클릭하면 됨

Cygwin설치 인스톨 완료 후 체크박스 선택 후 마침. 시작->프로그램->cygwin->mintty 가 있는 걸 확인할 수 있음

NDK설치 JNI를 사용하기 위해서는 NDK를 설치. Android NDK의 이용. 안드로이드에서 C/C++로 된 Native 코드를 컴파일해서 수행할 때 JNI를 이용하여 Java class에서 사용하고자 할 때

NDK설치 http://developer.android.com/sdk/ndk/index.html 에서 자신의 컴퓨 터의 window bit에 맞는 파일을 다운로드

NDK설치 다운로드 한 압축파일을 D:\cygwin\home\사용자이름\ 안에 압축 해제.

NDK설치 바탕화면  내 컴퓨터  시스템 속성  고급  환경 변수 선택 사용자 변수에 ‘Path’가 있다면 없다면 Path 변수 선택 후 편집(E) 버튼 클릭 없다면 새로 만들기(N) 클릭

NDK설치 편집 시 새로 등록 시 변수 값의 끝에 ;가 없다면 ;을 입력하고 ndk 경로를 입력 후 확인. 변수 이름에 Path를 입력하고 변수 값에 ndk 경로 입력 후 확인.

NDK설치 mintty 실행

NDK설치 압축 해제 한 ndk 폴더 아래 samples/hello-jni 폴더로 이동. ndk-build 명령어 입력.

NDK설치 Hello-jni 폴더에 libs와 obj 폴더 생성 확인.

환경 구축은 완료~!! JNI 설명 들어갑니다!!

JNI의 개념

JVM이란? 자바가상 머신 (Java Virtual Machine) 자바가상 머신의 특징 자바 바이트코드를 실행할 수 있음. 일반적으로 인터프리터 방식으로 실행. 자바가상 머신의 특징 스택 기반. C와 같이 주소 값을 임의로 조작하는 포인터 연산 불가능.

JNI란? Java Native Interface 자바 이외의 언어(네이티브 언어)로 만들어진 모듈이나 애플리케이션과 자바 클래스가 서로 상호작용 할 수 있게 정의한 인터페이스. 자바가상 머신(JVM)이 원시 메소드를 적재하고 수행할 수 있도록 함. JNI가 자바가상머신내에 포함. 자바가상 머신이 호스트 운영체제상의 입출력, 그래픽스, 네트워킹, 스 레드 같은 기능들을 작동하기 위한 로컬 시스템 호출을 수행할 수 있도록 함.

JNI란? (cont)  그 매개체가 JNI !!!! 안드로이드 프레임워크는 C/C++ 기반 모듈이 계층별로 구성. C/C++ Layer와 JAVA Layer가 서 로 상호작용하면서 동작. C/C++과 자바 레이어가 유기적으 로 동작하기 위해 상위 계층과 하위 계층을 연결해주는 매개체가 필요.  그 매개체가 JNI !!!! C/C++ Layer JAVA Layer JNI

JNI란? (cont) JNI GPS 이용 위치 정보 제공 어플리케이션 예 Android Application (GPS 활용) Location manager GPS Library (libgps.so) GPS Device Driver JNI Framework Layer Libraries Layer Kernel Layer GPS 이용 위치 정보 제공 어플리케이션 예 App에서는 GPS 정보를 얻기 위해 단순히 어플 리케이션 프레임워크에서 제공하는 자바 API만 호출 하면 됨. 위 호출은 프레임워크 내부의 GPS Library를 통 해 GPS 디바이스 드라이버에 연결되어 애플리케 이션에서 현재 위치 정보 값을 전달해 주는 구조 로 동작. 즉 C/C++ 계층과 자바계층이 서로 상호 작용하 면서 동작하는 것을 알 수 있음.

JNI의 활용 자바 클래스에서 C언어로 작성 된 라이브러리에 포함된 특정 함수 를 사용하고 싶은 경우. 자바 측 JNI Functions Libraries Classes VM Exception

JNI의 활용 속도 문제가 있는 계산 루틴 처리 어려움. 자바에서 하드웨어 제어 불가. 자바가 Native Code에 비해 느림. 자바에서 하드웨어 제어 불가. 자바에서 지원되지 않는 특정 운영체제 서비스 존재. 특정 플랫폼에서 제공하는 고유의 서비스의 기능을 모두 포함할 수 없음. 기존의 프로그램에서 자바가 제공하는 서비스를 이용 한계. 기존에 작성된 프로그램이나 기존의 시스템과의 연계 문제. Native code : 플랫폼에 종속적인 기계언어

JNI의 활용 (cont) 빠른 처리 속도를 요구하는 루틴 작성 하드웨어 제어 기존 C/C++ 프로그램의 재사용 보통 자바가 Native Code에 비해서 느림. 따라서 빠른 처리 속도를 필요로 하는 부분 은 C/C++로 작성하고 이를 JNI를 통해 자바에서 호출하는 방식으로 속도 향상을 시킬 수 있음. 하드웨어 제어 하드웨어 제어 코드를 C로 작성한 다음 JNI를 통해 자바 레이어와 연결. 기존 C/C++ 프로그램의 재사용 기존의 C/C++ 코드를 작성했다면 굳이 자바로 동일한 코드를 작성 할 필요 없이 JNI 를 통해 기존 코드를 활용할 수 있음. Native code : 플랫폼에 종속적인 기계언어

JNI의 특징 Java  Native, Native Java의 양방향 호출이 가능. Object형 까지 인자 또는 리턴으로 사용 할 수 있음. 모든 메소드 이름과 변수 이름들을 문자열로 매칭시켜서 찾음. 자바와 C/C++에서 사용하는 케릭터 셋을 포함한 타입까지 모두 맞춰줘야 함. 포인터를 이용해서 접근하기 때문에 Private 등과 같은 접근 제한자의 제한이 없음.

JNI 사용

안드로이드 용 JNI 개발 순서 안드로이드 코드 작성 안드로이드 코드 컴파일 C 헤더 파일 생성 C 코드 작성 mk 파일 작성 so 파일 생성 프로그램 실행

Tip Cygwin에서 Windows의 다른 드라이브를 참조할 때는 /cygdrive 디렉 토리를 통해 접근한다. C:\eclipse에 접근하려면 /cygdrive/c/eclipse로 들어가면 됨. 탐색기에서 폴더를 shell 창에 drag & drop하면 경로가 자동으로 입력 된다. Drag & Drop 경로가 자동으로 입력

자바와 JNI의 타입 Java JNI(C) JNI(C,배열) boolean jboolean jbooleanArray byte jbyte jbyteArray char jchar jcharArray short jshort jshortArray int jint jintArray long jlong jlongArray float jfloat jfloatArray double jdouble jdoubleArray object jobject jObjectArray

자바 코드 작성 (1/2) HelloJni.java

1. 자바 코드 작성 (2/2) nativeJava.java loadLibrary에는 native 코드 모듈의 이름을 적는다. (모듈명은 Android.mk에서 지정)

자바 코드 컴파일 이클립스에서는 저장하면 자동으로 컴파일 됨. 물론 코드에 오류가 없어야 컴파일이 됨 프로젝트 폴더 안에 bin폴더 안에 컴파일 결과물이 들어있음

C 헤더 파일 생성(1/2) 프로젝트 폴더 안에 bin/classes 폴더로 이동함 javah 패키지명.클래스명 입력(native 함수를 정의한 클래스명) mintty 에서 실행 화면 Header 파일이 생성된 결과

C 헤더 파일 생성(2/2) 프로젝트 폴더 안에 jni폴더 만듬 헤더 파일을 jni폴더로 옮김 (파일 명은 편하게 바꿔도 됨)

C 코드 작성 jni폴더 안에 c파일 하나 만듬 nativeJava.c 함수 원형은 앞에서 만든 헤더파일 안에 있음. 그대로 복사->붙여 넣기해서 사용하면 됨. (물론 파라미터에 변수명은 달아줘야됨) C일 경우에는 JNIEXPORT, JNICALL은 제거하고 붙여넣어야 함.

mk 파일 작성 jni폴더 안에 Android.mk 파일 만듬 Android.mk LOCAL_MODULE : System.loadLibrary() 호출시 사용할 모듈 이름 지정 LOCAL_SRC_FILES : 자신이 만든 c파일 이름

so 파일 생성 프로젝트 폴더 안에서 ndk-build 명령 실행 프로젝트 폴더 안에 libs와 obj 폴더가 생성되었으면 정상적으로 빌 드 된 것.

7. Android 프로젝트 실행

JNI 구현 흐름도 1. Create a class that declares the native method HelloJni.java 3. Use javah to generate header file HelloJni.h 4. Write the C implementation of the native method Hello-jni.c 2. Use javac to complite the program HelloJni.class 5. Compile C code and generate native library Hello-jni.so 6. Run the program using the java interpreter “HelloJni!!”