Revision 7b(r7b)를 설치해보기로 했다.

Eclipse, Android SDK와 ADT가 설치되어 있다고 가정한다.


1. NDK및 Cygwin 설치

1). Android NDK 다운로드 및 설치

http://developer.android.com/sdk/ndk/index.html

다운로드하고 원하는 경로에 압축을 해제한다.
(경로가 간단하면 cybwin에서 찾아들어갈때 편하다)


2). Cygwin 설치

http://www.cygwin.com/
 

setup.exe를 다운받아 설치를 진행한다.
기본 설정으로 c:\cygwin에 설치했다.

설치 진행시에 국내의 미러 사이트를 입력하면 빠르게 진행된다.
ftp://ftp.kreonet.re.kr
ftp://ftp.kaist.ac.kr
두 곳중에 빠른 곳을 이용하면 되겠다.

패키지 선택시에 devel 항목 밑에 있는 make를 추가한다.

설치가 완료되면 Cygwin Terminal을 실행하고 make -v를 실행해서 설치가 제대로 됐는지 확인한다.



2. hello-jni Sample 돌려보기

1) Cygwin Terminal 실행


2) 샘플 폴더의 hello-jni 로 경로를 이동

cd /cygdrive/d/Component/Java/android-ndk-r7b/

cd samples/hello-jni/jni



3) ndk-build로 빌드

ndk-build
D:\Component\Java\android-ndk-r7b에 있으므로

../../../ndk-build


4) libs 폴더 확인

libs 
폴더에 armeabi\libhello-jni.so가 생성되었는지 확인한다.


5) Android Project 생성 및 실행

Eclipse를 실행하고 File->New->Android Project로 프로젝트를 생성한다.


Create project from existing source를 선택하고

Location을 샘플폴더인 \android-ndk-r7b\samples\hello-jni로 설택한다.
(내 경우는 D:\Component\Java\android-ndk-r7b\samples\hello-jni

에뮬레이터나 기기를 연결해서 hello-jni.c에서 리턴한 문자열이 제대로 출력되는지 확인한다.

혹시 Problems에 빨간 글씨로 뜨는게 있다면 ADT나 Android SDK를 업데이트한다.



아래 사진처럼 나오면 성공~


 


'Programming > Android' 카테고리의 다른 글

Windows에서 Android용으로 FFmpeg 빌드해보기  (2) 2017.08.22
문제점 발견

프로그램에 스킨을 입히거나 특정 용도가 있는 경우 Border를 bsNone으로 하여 상단 Caption을 숨길 때가 있다.
일반 폼이라면 정상동작하나 bsNone인 폼이라면 폼 최대화 기능 구현을 위해 WindowState를 wsMaximized로 세팅하면 작업표시줄까지 덮어버린다.
그래서 보통은 아래와 같이 작업표시줄을 제외한 작업영역을 구해서 그 크기만큼 폼의 크기를 세팅하고 한다.

// 폼을 최대화하고 Align을 설정하거나
begin
  Form.WindowState := wsMaximized;
  Form.Align := alClient;
end;

// 혹은 작업 영역을 구해서 폼의 크기를 맞춰준다.
var
  WorkRect: TRect;
begin
  Form.WindowState := wsMaximized;        

  SystemParametersInfo( SPI_GETWORKAREA, 0, @WorkRect, 0 );
  Form.SetBounds( WorkRect.Left, WorkRect.Top, WorkRect.Right - WorkRect.Left, WorkRect.Bottom - WorkRect.Top );
 end;


문제는 듀얼모니터인 경우이다.
프로그램을 두번째 스크린으로 옮기고 최대화를 실행하면 폼이 보이지 않게 되어버린다.
어디로 날라간 것일까 -_-;

폼이 다른 모니터에 있는 경우 위치를 제대로 얻어오지 못한다.


해결방법

Forms에 있는 Screen 전역 객체를 이용하여 폼이 위치한 모니터를 얻어내고 작업 영역을 구하면 된다.

1. 폼이 위치한 곳의 TMonitor 객체를 얻어내보자
var
  Monitor: TMonitor;
begin
  Monitor := Screen.MonitorFromWindow( Form.Handle );
end;

2. TMonitor에는 API를 래핑한 여러가지 프로퍼티가 존재한다.
작업 영역을 얻기 위해서는 TMonitor의 WorkareaRect를 이용하자.
작업 영역을 구해보자
var
  WorkRect: TRect;
begin
  WorkRect := Monitor.WorkareaRect;
end;


전체 코드

var
  Monitor: TMonitor;
  WorkRect: TRect;
begin
  Form.WindowState := wsMaximized;

  Monitor := Screen.MonitorFromWindow( Form.Handle );
  WorkRect := Monitor.WorkareaRect;
  Form.SetBounds( WorkRect.Left, WorkRect.Top, WorkRect.Right - WorkRect.Left, WorkRect.Bottom - WorkRect.Top );
end;


PS
더 자세한 사항은 Forms 유닛의 TScreen, TMonitor 클래스를 참조하기 바란다.
화면과 관련한 Windows API 사용법이 자세히 작업되어 있다.

+ Recent posts