어제에 이어서 마무리를 향해 달려가 보도록 합시다.
어제까지 환경설정을 위한 SDK와 sygwin, NDK를 설치 & 설정 하였습니다.
오늘은 마무리로 Java에서 .c 파일을 가지고 오는 것과 빌드와 실행을 해보겠습니다.
안드로이드 프로젝트 아래에 있는 src 폴더에 MainActivity.java 코드를 수정해서
jni 폴더에 있는 ndktest.c 파일을 읽을 수 있도록 해보겠습니다.
------------------------MainActivity.java-----------------------------
package sample.ndktest;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
public class MainActivity extends Activity {
// 라이브러리 로드 - Android.mk 이름과 매치
static {
System.loadLibrary("ndktest");
}
// 코드의 함수를 선언 - 반드시 ndktest.c 와 일치
private native String invokeNativeFunction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 코드를 호출
String hello = invokeNativeFunction();
new AlertDialog.Builder(this).setMessage(hello).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
jni 폴더에 있는 ndktest.c 파일을 읽을 수 있도록 해보겠습니다.
------------------------MainActivity.java-----------------------------
package sample.ndktest;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
public class MainActivity extends Activity {
// 라이브러리 로드 - Android.mk 이름과 매치
static {
System.loadLibrary("ndktest");
}
// 코드의 함수를 선언 - 반드시 ndktest.c 와 일치
private native String invokeNativeFunction();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 코드를 호출
String hello = invokeNativeFunction();
new AlertDialog.Builder(this).setMessage(hello).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
----------------------------------------------------------------------
MainActivity.java에서 새로 추가한 부분은 진하게 표시 했으니 보기 쉽겠죠.
이제 ndktest.c 파일을 빌드하러 가보겠습니다.
이제 cygwin 터미널을 사용해서 파일 빌드를 해보죠.
파일을 빌드하기 위해서 중요한 것이 있습니다.
1. 안드로이드 프로젝트의 위치
2. ndk-build 파일의 위치
이 두 가지 인데. 안드로이드 프로젝트의 위치는 SDK의 이클립스가 처음 실행될 때
설정하도록 되어 있습니다. 만약 어디로 했는지 모르겠다면
생성한 프로젝트에서 마우스 오른쪽 버튼을 눌러서 'propertise'를 누르게 되면 창이 뜨는데
그곳에 화살표로 가르키는 부분이 안드로이드 프로젝트의 위치 입니다.
ndk-build 파일의 위치는 안드로이드 ndk 압축파일 해제한 위치입니다.
그곳에 화살표로 가르키는 부분이 안드로이드 프로젝트의 위치 입니다.
ndk-build 파일의 위치는 안드로이드 ndk 압축파일 해제한 위치입니다.
--------------------------------- 실행 내용
-------------------------------------
cube@cube-PC /cygdrive/c/IDE/adt-bundle-windows-x86-20131030/workspace/ndktest
$ /cygdrive/c/IDE/android-ndk-r9c/ndk-build
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
[armeabi] Cygwin : Generating dependency file converter script
[armeabi] Compile thumb : ndktest <= ndktest.c
[armeabi] SharedLibrary : libndktest.so
[armeabi] Install : libndktest.so => libs/armeabi/libndktest.so
cube@cube-PC /cygdrive/c/IDE/adt-bundle-windows-x86-20131030/workspace/ndktest
$ /cygdrive/c/IDE/android-ndk-r9c/ndk-build
Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
[armeabi] Cygwin : Generating dependency file converter script
[armeabi] Compile thumb : ndktest <= ndktest.c
[armeabi] SharedLibrary : libndktest.so
[armeabi] Install : libndktest.so => libs/armeabi/libndktest.so
--------------------------------------------------------------------------------
제대로 실행이 됐다면 이클립스에 파일이 생성이 되었을 것입니다.
안 보인다면 F5를 눌러서 프로젝트 리소스를 새로고침 해보시고 안되면 다시 파일의 이름과
다른 것들을 확인해 보시기 바랍니다.
이제 파일이 제대로 생성된 분들은 프로젝트를 실행시켜서 제대로 동작하는지 확인해 봅시다.
실행방법은 특별한 것이 없습니다만. 안드로이드 프로젝트에서 마우스 오른쪽 버튼 눌러서
Run As 에 있는 Android Application 을 선택해 줍니다.
(스크린샷이 안되서 부득이하게 글로 대체 합니다.)
다른 것들을 확인해 보시기 바랍니다.
이제 파일이 제대로 생성된 분들은 프로젝트를 실행시켜서 제대로 동작하는지 확인해 봅시다.
실행방법은 특별한 것이 없습니다만. 안드로이드 프로젝트에서 마우스 오른쪽 버튼 눌러서
Run As 에 있는 Android Application 을 선택해 줍니다.
(스크린샷이 안되서 부득이하게 글로 대체 합니다.)
생성했던 안드로이드 프로젝트 이름과 같은 어플이 생긴 것을 확인했습니다.
어플을 실행시켜 줍니다.
어플을 실행시켜 줍니다.
실행하면 화면에 글이 나오는 것을 확인할 수 있습니다.
화면에 나오는 저 글은 jni 폴더에 있는 ndktest.c 코드에 있는 글이 출력되는 것입니다.
더 자세히 어떤 부분이신지 궁금하시다면 스스로 찾아 보시기 바랍니다.
어렵지 않습니다. 여기까지 진행하셨다면 수정은 쉬울테니까 저는 이만 하도록 하겠습니다.
이건 NDK 설치에 대한 문서이기 때문에 더 자세한 것은 나중에 또 공부해야 겠네요.
그럼 저는 내일 다른 내용을 가지고 올 수 있겠네요. 그럼 수고하셨습니다.
화면에 나오는 저 글은 jni 폴더에 있는 ndktest.c 코드에 있는 글이 출력되는 것입니다.
더 자세히 어떤 부분이신지 궁금하시다면 스스로 찾아 보시기 바랍니다.
어렵지 않습니다. 여기까지 진행하셨다면 수정은 쉬울테니까 저는 이만 하도록 하겠습니다.
이건 NDK 설치에 대한 문서이기 때문에 더 자세한 것은 나중에 또 공부해야 겠네요.
그럼 저는 내일 다른 내용을 가지고 올 수 있겠네요. 그럼 수고하셨습니다.