안드로이드에서 Java와 NDK(C/C++) 성능에 대해서..

안드로이드 어플리케이션 개발을 위해 JAVA를 쓴다. 하지만 안드로이드에서 C/C++을 쓸수 있도록 구글에서는 NDK라는 것을 만들었다. 그렇다면 NDK(C/C++)에서 JAVA보다 얼마만큼의 성능을 가지는가에 대한 궁금증이 생겼다.

이런 궁금증을 해결 하기위해 용어먼저 설명 하겠다.

NDK

안드로이드는 JAVA를 기반으로 어플리케이션을 만들수 있는데, 기존 C/C++로 된 라이브러리를 JAVA로 재 개발 해야 되는 문제점들을 위해 구글에서 네이티브코드로 만들 수 있는 방법을 제공한 개발킷이다.

JNI

JAVA에서 NDK의 C/C++을 연결 해주는 인터페이스 

그렇다면 수많은 연산을 통해 JAVA와 NDK의 성능을 테스트 해보겠다.

JAVA VS C

똑같은 연산을 하는 JAVA와 C코드를 준비 한다.

 

public int calc() {
    int count = 3;
    int i = 0;
    for (i = 0; i < 100000000; ++i) {
        count = count * 2 / 3 + 5 - 1;
    }

    return count;
}

jint Java_com_example_ndkspeedtest_MainActivity_calc( JNIEnv* env, jobject this)
{
    int count = 3;
    int i = 0;
    for ( i = 0; i < 100000000; ++i )
    {
        count = count * 2 / 3 + 5 - 1;
    }

    return count;
}

JAVA코드와 C코드의 각각 성능 측정을 하였다.

07-20 01:09:20.066: E/Test(19435): Java : 3377, ret : 10

07-20 01:09:22.716: E/Test(19435): native : 2650, ret : 10

—————————————————————-

20%

07-20 01:09:30.326: E/Test(19435): Java : 3366, ret : 10

07-20 01:09:32.966: E/Test(19435): native : 2640, ret : 10

—————————————————————-

27%

07-20 01:09:38.551: E/Test(19435): Java : 3315, ret : 10

07-20 01:09:41.196: E/Test(19435): native : 2645, ret : 10

—————————————————————-

25%

07-20 01:09:47.626: E/Test(19435): Java : 3373, ret : 10

07-20 01:09:50.301: E/Test(19435): native : 2671, ret : 10

—————————————————————-

27%

07-20 01:09:59.601: E/Test(19435): Java : 3362, ret : 10

07-20 01:10:02.276: E/Test(19435): native : 2672, ret : 10

—————————————————————-

25%
평균 C가 JAVA에 비해 25% 빠른 성능을 보여주고 있다. 
단순 연산만으로 측정한 값이며, 그래픽작업등 더 많은 연산의 경우 C가 더욱 우수한 성능을 보여줄 것으로 예상된다.

– powered by hoon038

Android NDK 개발을 위한 환경셜정 for Mac

1) http://developer.android.com/tools/sdk/ndk/index.html

NDK를 받아 적당한 곳에 압축을 푼다. 

2) XCode설치 
3) macPort 설치 
http://www.macports.org/install.php 에서 .pkg파일을 받아 설치 
4) .profile에 ndk path를 지정해준다. 
user$open -e .profile 을 입력 해서 path를 지정한다. 
export PATH=/opt/local/bin:/opt/local/sbin:/android-sdk/platform-tools:/android-sdk/tools:/android-ndk-r8e:$PATH 
5) 명령 창에서 macPort 업데이트를 하고, gmake를 설치 한다. 
$sudo port.selfupdate 
$sudo port install gmake gawk 
만약 아래와 같은 메시지가 나오면 
Computing dependencies for gmakeError: Unable to execute port: can’t read “build.cmd”: Failed to locate ‘make’ in path: ‘/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin’ or at its MacPorts configuration time location, did you move it? 
https://developer.apple.com/downloads/index.action?name=for%20Xcode%20-# 에서 Commend Line Tools을 설치후 다시시도 한다.

 여기까지 설치가 끝나면 완료!