1. 자바 JDK설치하기

안드로이드 어플리케이션을 개발하기 위해서는 자바를 설치해야 합니다.
리눅스에서 자바를 설치하기 위해서는 [리눅스에서 자바 설치하기] 글을 참고 하시기 바랍니다.

2. 이클립스 설치하기

리눅스에서 이클립스 설치하는 것은 압축파일을 이클립스 홈페이지에서 다운 받아서 압축 풀기만 하면 끝입니다.
자 그럼! [이클립스 홈페이지]에 가서 Eclipse IDE for Java Developers 리눅스용 압축파일을 받도록 합니다.
리눅스에서 압축 푸는 법을 모르시거나 기억이 안나면 [리눅스 파일 압축 명령어 정리] 글을 참고 하시기 바랍니다.

3. 안드로이드 SDK starter 패키지 다운로드 받기

이클립스에서 안드로이드 개발을 위해서는 SDK와 AVD Manger를 설치해야 합니다. 이것을 설치하고 관리해주는 툴이 SDK  start패키지 입니다. 다운로드 받기 위해서 안드로이드 개발자 사이트에 가서 다운로드 받을 수 있습니다.
자 그럼! [안드로이드 개발자 사이트]로 가서 다운 받도록 합시다~

다운 받은 파일을 적당한 위치에 적당한 위치에 압축을 풀도록 합니다. 저는 이클립스가 있는 폴더에 같이 두기로 하겠습니다. 이렇게 해 두면 다른 컴퓨터에 이 폴더를 그대로 복사하기만 하더라고 바로 안드로이드 개발을 바로 할 수 있기 때문이죠.

SDK starter 패키지안에는 sdk-tool이라는 폴더가 있습니다. 이 폴더안에는 각종 유용한 유틸리티가 있기 때문에 이 폴더를 환경변수에 등록하도록 하겠습니다. 아래의 명령을 실행하여 .bashrc 파일을 엽니다.

$ sudo vi ~/.bashrc

파일의 가장 마지막에 아래의 코드를 넣어 줍니다.

export PATH=${PATH}:~/eclipse/android-sdk-linux_86/tools

참고로, 제 컴퓨터에는 이클립스가 계정 폴더에 있고, SDK starter 패키지는 이클립스 안에 있습니다.

4. 각종 이클립스 플러그인 설치

이클립스에서 안드로이드를 개발하기 위해 각종 플러그 인을 설치 합니다. 이 플러그인중에는 Android DDMS와 같은 디버깅 툴도 있으므로 설치하시는 것이 좋습니다.

우선 이클립스를 실행 합니다.
[Help] -> [Install New Software] 매뉴를 클릭합니다.
location을 적는 곳에 https://dl-ssl.google.com/android/eclipse/ 를 적으면 아래에 설치할 수 있는 플러그인들이 나옵니다. 모두 선택한다음 설치를 진행하면 됩니다.



5. 안드로이드 SDK Component 추가

이클립스에서 안드로이드를 개발하려면 실제 안드로이드 SDK와 각종 Component들이 필요합니다.

우선 이클립스를 실행 합니다.
[Window] -> [Android SDK and AVD Manager] 매뉴를 선택한 뒤 Available Packages를 선택합니다.
설치 하능한 Component중 필요한 컴포넌트를 선택합니다. 반드시 sdk는 하나 이상 섳히 해야 합니다.



6. 안드로이느 SDK 경로 설정

이클립스에 안드로이드 SDK가 어디에 있는지 알려주어야 이클립스에서 컴파일을 할 수 있습니다.

우선 이클립스를 실행 합니다.
[Window] -> [Preferences] 매뉴를 클릭합니다.
새로 뜬창에서 Android를 선택하고 SDK Location을 선택하면 됩니다.
자신이 원하는 sdk버전을 선택한뒤 OK버튼을 누르면 됩니다.



저작자 표시
신고
by danguria 2011.04.24 01:49

소개

벌써 네번째 정리 입니다.

늦은 감이 있지만 NDK가 뭐인고? 라는 것을 정리 하지 않았군요. NDK를 이야기 하기 전에 JNI를 알고 계시나요? JNI는 C나 C++로 작성된 머신코드(Native machine code)를 Java 프로그램이 사용할 수 있도록 해주는 인터페이스(interface)입니다.

안드로이드 프로그래밍을 할때는 자바언어로 구현하죠.. 자, 그럼 답이 나왔네요. NDK는 안드로이드 응용 프로그램을 만들때 C/C++로 작성된 머신코드를 안드로이드 프로그램에서 사용할 수 있도록 해주는 도구입니다.

저는 개인적으로 자바와 C/C++쪽을 모두 잘 해야 한다고 생각 하기 때문에 NDK를 꼭 알고 싶었지요.. JNI를 기본적으로 잘 알고 있다면 NDK는 크게 어렵지 않은 것 같습니다.


Android NDK를 이용하면 좋은 경우

  • 빠른 처리를 요구하는 루틴을 작성할때 좋습니다.

    C/C++이 자바 보다 빠른건 당연합니다. 그러니 빠른 처리를 요구하는 루틴을 C/C++로 작성하고 그것을 호출하면 성능 향상을 꾀할 수 있죠

  • 하드웨어 제어 할때 필요합니다.

    안드로이드의 코어는 리눅스 입니다. 하드웨어를 직접 접근 하거나 디바이스 드라이버를 개발 할때는 당연히 C로 개발해야 하죠. 자바에서는 그렇게 구현된 코드를 이용해야 합니다.

  • 기존의 C/C++프로그램의 재사용할 수 있습니다.

    기조에 C/C++로 만들어진 좋은 소스가 있다면 그것을 굳이 자바로 다시 만들기 위해 많은 노력이 필요합니다. 이때 NDK를 사용하면 편리 하겠죠.


Android NDK를 이용하면 좋지 않은 경우

  • 프로그램 구조가 복잡해 집니다.

    프로그램을 설계할때, 프로젝트를 진행할때, 나중에 유지 보수 할때, 복잡한 구조때문에 코드분석하기가 힘들 수 있습니다.


Android NDK 개발 순서

  1. 작성된 native srouces를 $PROJECT/jni/ 에 둡니다.

    여기서 $PROJECT는 여러분이 작성한 안드로이드 프로젝트가 위치 하고 있는 주소 입니다.

  2. $PROJECT/jni/폴더에 Android.mk라는 파일을 만들고, NDK build를 위한 설정내용을 적어 줍니다. (이 부분은 추후 포스팅에서 설명하겠습니다.)
  3. $NDK/ndk-build 명령어를 통해 native codes를 빌드합니다.

    여기서 $NDK는 여러분이 설치한 NDK의 최상이 경로를 의미합니다.

실습을 위한 포스팅을 NDK First step - 1와  NDK First step - 2에 있으니 참고 하세요.


포스팅을 마치며

다음에는 makefile의 일부분인 Android.mk를 작성하는 방법을 알아보도록 하겠습니다.





저작자 표시
신고
by danguria 2011.01.13 03:21

NDK처음 시작하기 - 복잡한 함수 만들어 보기

기존에 NDK로 HelloWorld는 찍을 수 있는 단계까지 오셔야 이해 할 수 있습니다. 지금 부터는 NDK쪽은 없을 것이며, JNI에 대해서 자세히 알아볼 것입니다. (NDK사용환경 구축하기NDK처음 시작하기를 참고 하세요)



네이티브코드에서 자바의 자원(객체, 객체의 변수, 함수등등)을 사용할 경우가 있습니다.

예를 들어서 핵심 모듈은 자바로 구현 되어 있고, 라이브러리는(Wrapper와 같은 경우) C++로 구현해야 하는 경우 라이브러리(C/C++)에서 다시 자바의 자원을 이용해야 합니다.

아주 간단한 프로그램을 만들어서 이를 구현해 보록 합니다. 만들 프로그램은 pass라는 함수와 javaPass라는 함수를 갖고 있습니다. pass라는 함수는 navtive함수이고, javaPass는 자바의 함수 입니다. 

아래를 보면서 계속 이야기 해 봅시다.


개념도


2010-10-08_17.19.54.jpg


  • 프로그램이 동작하는  순서는 다음과 같습니다.
  1. 프로그램은 네이티브 함수인 pass를 호출합니다.
  2. 네이티브에서 pass함수는 다시 자바의 javaPass함수를 호출합니다.
  3. 자바의 javaPass함수는 입력으로 들어온값을 그냥 넘겨 주기만 하므로 그대로 받은 값을 네이티브에게 넘겨 줍니다.
  4. 네이티브의 pass함수는 그 결과를 다시 함수를 호출한 자바쪽으로 넘겨 줍니다.



"왜 이런 이상한짖을 한냐!!" 라고 생각 하지 마세요ㅠ 설정이니까요.


다른 부부은 다 생략하고 Java_JNITest_pass()함수를 보도록 합시다.


  1. #include <jni.h>

    JNIEXPORT jint JNICALL Java_com_danguria_test_JNITest_pass(
    JNIEnv* env, jobject obj, jint x)
    {

        // 호출할 함수가 있는 객체를 가져 온다.jclass cls = (*env)->GetObjectClass(env,obj);


  2.     // 호출할 함수ID를 가져 온다.jmethodID pass = (*env)->GetMethodID(env, cls, "javaPass", "(I)I");;

  3.     // 함수를 호출한다.jint ret = (*env)->CallIntMethod(env, obj, pass, x);
        return ret;
    }


JNI를 잘하기 위해서 JNI에서 제공하는 JNIEnv와 jobject , jclass 들을 자유자재로 구사 할 수 있어야 합니다.  코드만 보더라고 잘 이해 할 수 있도록 주석을 열심히 달았습니다.


세세한 부분은 지금부터 해야 할 일입니다!!!



저작자 표시
신고
by danguria 2011.01.13 03:19

NDKExam 작성 해보기 - add 함수만들기

기NDK환경 구축이 다되면, NDK를 이용하여 가장 쉬운 예제를 하나 만들어 보도록 하자. 두 수의 합을 구하는 add 함수를 네이티브쪽에서 구현해 보는 예제다.


1. NDKExam프로젝트 생성하기

우리가 만들 프로젝트에서는 두 정수를 입력 받아서 합을 리턴하는 함수를 C로 구현하고 그것을 안드로이드에서 사용할 것이다. 전체적으로 NDK 사용하는 법을 설명하는 페이지니 만큼 자세한 설명은 생략하도록 하겠다.

(이후에 있는 상세 설명 페이지를 참고 하면 되겠다.)


  • 먼저, 다음과 같은 프로젝트를 생성하고 코드를 작성한다.


Screenshot-New_Android_Project_.png


  1. package org.example.ndk;

    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;

    public class NDKExam extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
           
            TextView tv = new TextView(this);
            int x = 1000;
            int y = 42;
           
            // 네이티브 메서드를 호출하기 전에 네이티브 라이브러리를 로딩함.
            System.loadLibrary("ndk-exam");
           
            int z = add(x, y);
            tv.setText("The sum of " + x + "and " + y + "is " + z);
           
            setContentView(tv);
        }
       
        public native int add(int x, int y);
    }


2. 동적라이브러리 생성하기

  • 다음으로 동적 라이브러리를 생성하기 위해서 javah 유틸리티를 이용하여 자바 클래스로 부터 C++해더 파일을 생성한다. 위에서 만든 프로젝트 폴더에 가면 bin폴더가 있다. 거기로 들어간다.(참고로 나의 폴더는 ~/workspace/NDKExam/bin 이다. 앞으로 <project>라고 부르겠다.)
  • 아래에 있는 명령을 실행하면 org_example_ndk_NDKExamp.h라는 파일이 생긴다.


  1. $ javah org.example.ndk.NDKExam


Screenshot-2.png

  • 프로젝트 폴더 바로 아래에 "jni"라는 폴더를 만들고(<project>/jni) 거기에 secend.c first.c first.h 을 만들어 실제 add함수를 만들어 낸다. 아래는 각 파일의 코드 내용이다.


Screenshot-4.png                 Screenshot-3.png

Screenshot-5.png


3. 빌드스크립트 작성하기(Android.mk)

  • 이번에는 빌드 스크립트인 Android.mk파일을 만들고 내용을 작성한다. 마찬가지로 jni폴더 아래에(<project>/jni) Android.mk파일을 만들고 아래의 코드를 작성한다.
  1. # 소스 파일들의 위치를 알려줌.
    LOCAL_PATH:= $(call my-dir)

    # Make 관련 환경 변수를 초기화
    include $(CLEAR_VARS)

    # 라이브러리를 빌드하기 위한 정보 생성(라이브러리 이름, 소스 코드 등)
    LOCAL_MODULE    := ndk-exam
    LOCAL_SRC_FILES    := first.c second.c

    # 공유 라이브러리 생성
    include $(BUILD_SHARED_LIBRARY)


4. 빌드 하기(ndk-build)

  • 마지막으로 프로젝트 폴더 바로아래로 가서 (<project>/) 빌드 명령어인 ndk-build를 실행 시키면 동적 라이브러이가 생성된다.
  1. <project>$ <ndk>/ndk-build


  • 이클립스에서 프로젝트를 실행 시키면 다음과 같은 결과가 실행 된다.


Screenshot-6.png






저작자 표시
신고
by danguria 2011.01.13 03:16
NDK에 대해서 함께 공부해 봅시다.
  • 자바와 네이티브 환경의 라이브러리를 연결하기 위해서 안드로드가 제공하는 Navtive Development Kit에 대해서 정리해 놓은 공간입니다.
  • 저도 처음 공부하면서 개발에 도움이 되고자 정리 하고 있습니다.

    개발하면서 격게 되는 문제점과 여러가지 이슈들에 대해서 정리 하려고 합니다.

  • 창조적인 내용은 없을지 모르더라도 최선을 다해 정리 하고 있습니다.

    여러분께서도 함께 하고 싶으시다면 많은 댓글 달아 주시기 바랍니다.

저작자 표시
신고
by danguria 2011.01.12 22:54

1. Install NDK


NDK는 안드로이드 개발 환경이 이미 구축되어 있어야지 사용 가능하다. 안드로이드 개발 환경이 구축되어 있지 않다면, 먼저 안드로이드 개발 환경 구축부더 하기를 바란다.(자바, 이클립스, 안드로이드 설치방법 참고)


Screenshot.png

  • 받은 압축파일을 푼다. 압축푸는 경로는 아무래도 상관 없다( 앞으로 압축 푼 경로를 <ndk>라고 언급하겠다.)

     $ unzip android-ndk-(버전정보).zip



  • <ndk>/ndk-buile 실행파일을 실행 시켜서 다음과 같은 결과가 나오면 확경 구축 끝!!!

Screenshot-1.png



기타 - 우분투에서 디바이스 인식이 안될 경우

Declare your application as "debuggable" in your Android Manifest.





저작자 표시
신고
by danguria 2011.01.12 22:52
들어가기에 앞서...
이 글은 http://ukzzang.tistory.com/46aq=f&aqi=&aql=&oq=&gs_rfai=&pbx=1&fp=275f4b8818acb2f7 을 그대로 옮긴 내용입니다.
글쓴분께 감사의 말씀을 드립니다.

Android 어플에서 객체인식 및 특징점 검출, 카메라 핸들링, 이미지 처리 등 많은 부분에서 유용하게 쓰이는 OpenCV가 Android로 포팅이 가능한 android-opencv가 code.google.com에 올라와서 간단히 정리해 본다.
이 내용은 http://code.google.com/p/android-opencv/ 내 용을 기반으로 정리한 것이다.

위 code.google.com의 페이지에 보듯이 opencv를 android에 포팅하기 위해서는 미리 준비해야 하는 것들이 있다.
일단 window 환경에서 포팅하는 것으로 정리한다.

1. android-opencv 포팅을 위한 사전 준비    - android-sdk : 기본으로 준비해야 함. 
        www.android.com에서 다운받아서 설치하면 된다.
    - android-ndk : crystax ndk r4 이용

        code.google.com의 android-opencv는 Android의 기본 NDK로는 build가 되지 않는다.
        Down : http://www.crystax.net/android/ndk-r4.php
    - cygwin
        windows에서 가상 리눅스 환경을 만들어준다.
        Down : http://www.cygwin.com/
    - android-opencv source
        SVN을 이용하여 checkout 받는다. (http://android-opencv.googlecode.com/svn/trunk/)        SVN에 접속하면 opencv, samples 모두 사용한다. 먼저 opencv를 빌드 한후에 samples를 빌드하여
        테스트한다.

2. cygwin 설치    - 먼저 android-opencv를 빌드하기 위해 리눅스 환경을 만들기 위해 다운로드 후 설치한다.
    - 설치하는 절차는 간략히 설명한다. 부족하면 검색하면 좋은 자료가 많다.
    - [Choose A Download Site] 화면이 나올때 까지는 기본 설정 또는 경로만 변경하고 지나가면 된다.
    - [Choose A Download Site]도 적당한 사이트를 선택하고 Next (난 ftp://ftp.kaist.ac.kr을 선택했음.)
    - 다음 화면이 중요하다. 리눅스 환경에서 android-opencv를 빌드 시 필요한 패키지를 선택하여
      설치하는 부분이다.
       너무 걱정하지 말자. 모두 설치 후 필요한 패키지는 다시 설치파일을 실행하여 똑같이 진행해서 이 화면에서
       다시 선택하여 설치가 가능하다.
       설치 할 항목
            Devel : gcc-core, gcc-g++, make, swig
            Editor : vim   

    - 그 다음부터는 그냥 두면 설치가 된다.
    - 설치 완료 후 실행하게 되면 리눅스 환경의 콜솔 창이 하나 뜨고 최초 실행 시 window 로그인 계정으로
       /home/[user] 형식으로 폴더가 생성이된다. 기본 사용 쉘은 bash shell 이다.

3. crystax ndk r4 
    - 해당 사이트에서 다운로드 받아 적당한 곳에 압축을 풀면된다.
    - 압축을 푼 후 cygwin이 설치 된 /home/[user]/ 아래 복사를 한다. cygwin 환경에서 빌드를 진행하기 위함.
    - 저의 빌드 환경에서의 패스는 /home/ukzzang/android-ndk-r4-crystax 임.

4. android-opencv source
    - svn을 이용하여 checkout 받은 뒤 체크 받은 소스를 cygwin이 설치 된 /home/[user]/ 아래에
       android-opencv로 복사한다. 경로를 변경해도 무방하다.

이로써 android-opencv를 빌드하기 위한 사전 준비 작업은 끝났다.

5. android-opencv build    5.1. cygwin 환경 설정        - windows 환경에서 패스 설정
            [바탕화면 컴퓨터] -> [설정] -> [고급 시스템 설정] -> [환경변수]의 path 부분에
            C:\cygwin\home\ukzzang\android-ndk-r4-crystax;C:\cygwin\bin; 추가한다.

        - cygwin 실행 후 bash 환경 파일 수정 (.bashrc 파일 수정 후 적용)
            vi ~/.bashrc 실행 (사용자 home 경로에서 실행)
        - 아래 내용을 추가한다.
            export PATH=$PATH:/home/ukzzang/android-ndk-r4-crystax
            export ANDROID_NDK_ROOT=/home/ukzzang/android-ndk-r4-crystax
            source ~/.bashrc 환경 설정 정보 재적용
    5.2. android-opencv build
        - cd /home/ukzzang/android-opencv/opencv 로 이동
        - sh build.sh
        - 뭐 빌드는 아주 간단하죠 ... build 하는데 시간이 꽤 걸리는 편이다. 천천히 기다리자
        - 빌드가 완료되면 ....../opencv/android/libs/armeabi 아래에 libopencv.so 파일이 생성된다.


여기까지로 android-opencv 빌드가 끝났다 ... 그럼 다음올 svn에서 받은 samples의 CVCamera를 빌드하여
실행해서 테스트 해보겠다.

6. android-opencv test    6.1. CVCamera Sample Build
        - 테스트는 samples 안에 있는 CVCamera Project를 이용하여 진행하겠다.
        - 먼저 CVCamera Project를 NDK로 빌드한다. android-opencv 빌드와 동일하다.
        - ......./samples/CVCamera로 경로 이동
        - sh build.sh 실행하면 빌드 된다.
           혹시 경로부분에서 오류가 발생하면 jni 폴더의 Android.mk 파일을 vi로 열어서 수정하고 다시 빌드.

        - 위 화면처럼 빌드가 완료되면 libs/armeabi 아래에 libcvcamera.so 파일이 생성되어 있다.
        - 프로젝트 빌드 끝 ... 이제 Eclipse에서 프로젝트를 생성하고 실행만 해보면 된다.
    6.2. Eclipse Project Create & Test        - Eclipse에 Android Project를 생성하고 cygwin에서 빌드한 CVCamera를 Import 한다.
        - 빌드 한 android-opencv 밑에 가면 android로 빌드하면서 생성 된 폴더가 있는데 안의 jni 밑의 Java 
           파일들도 Import 한다. 그리고 당연히 libandroid-opencv.so 파일도 프로젝트의 libcvcamera.so가 있는
           위치에 복사한다.
        - 프로젝트를 폰이나 에뮬에서 테스트하면 된다.

        - 카메라 뷰가 보이며, 뷰에 보이는 영상이 메뉴에서 선택한 알고리즘에 따라 특징 점들이 추출되어 보이게 된다.

저작자 표시
신고
by danguria 2011.01.12 22:49
| 1 |