Home  |   방명록 2021-10-18 (월) 
Untitled Document
  S e a r c h
M e n u
프로그램
개발자료
고전음악실
대청마루
집주인
비망록
갤러리
  B o a r d
게시판
Untitled Document
개발자료 Software / Hardware 개발 관련 정보

안드로이드 개발 환경 설정

업무상 안드로이드 개발이 필요하게 돼서 개발환경을 구축하는데 단지 세팅하는데만 2주일이 걸렸다.
이렇게 설정하기 어려운 개발 환경은 처음이다.
공부삼아 몇 번 시도하다가 포기했던 적이 있는데 역시 그럴 만도 했다.
설정을 하고도 예제를 받아 빌드해 보려면 이상한 에러들이 튀어 나와 미칠 지경이었다.
제대로된 통합 개발 환경도 아니고 안드로이드 SDK도 계속 업그레이드 되니 정보들도 맞지 않는 것이 있다.

1. Java SDK 설치

(1) 다운로드
http://www.oracle.com/technetwork/java/javase/downloads/index.html

(2) 시스템 환경변수 만들기
JAVA_HOME=C:\~설치경로~\java\jdk1.7.0_10

(3) Path에 항목 추가
;%JAVA_HOME%\bin;


2. ADT Bundle 설치 (이클립스와 안드로이드 SDK 통합)

http://developer.android.com/sdk/


3. 안드로이드 Eclipse 플러그인 설치 (ADT)

Eclipse 의 Help/Install New Software 에서
https://dl-ssl.google.com/android/eclipse/ 입력
(* Eclipse에서 ADT 새 버전이 나왔다고 할 때 필요한데 자동 업그레이드는 계속 에러가 난다. 현재는 수동으로 업그레이드 해야 함)


4. 안드로이드 SDK 버전별 다운로드

ADT Bundle 의 SDK Manager.exe 실행
최신 Android 4.4 API19 와 구형 예제 빌드를 위한 Android 4.3 API18과 Android 2.2 API8 정도를 설치 한다.
프로요 부터 지원하더라도 빌드는 최신 SDK API19 버전으로 하면 된다.


5. 에러 처리

- Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
인터넷에서 받은 예제를 빌드할 때 위의 에러 메시지가 나오는 경우가 있는데
원인은 안드로이드 최신 4.4 SDK 빌드 툴 (build tool 19) 과 맞지 않는 것으로 추정 되는데
프로젝트 디렉토리의 project.properties 파일 끝에
sdk.buildtools=18.1.1 를 추가한다.
강제로 이전 빌드 툴로 설정하는 것이다.

- AndroidManifest.xml file missing!
파일이 있는데도 이런 에러가 뜨는 경우가 있다.
파일을 열어서 글자하나 쳤다 지우고 다시 저장해 주면 에러가 없어진다.


6. JAVA 문제

JAVA를 다뤄 본 적이 없는데 C++을 잘 알면 여기저기 예제를 찾아 가면서
기존 C소스의 중요 부분을 일주일 정도에 JAVA로 변환 할 수 있었다.
Eclipse에서는 타이핑 하면 바로 컴파일 하기 때문에 문법 에러가 있으면 즉시 표시가 된다.

- JAVA에는 unsigned 타입이 없다.
변수의 범위가 크면 C언어 보다 상위 타입을 사용해야 한다.
JAVA에서 long 은 64 bits, float 은 64 bits, double 은 128 bits 이다.

- JAVA는 Big-endian 이다. 그래서 메모리에 상위 바이트가 먼저 나온다.
C에서 저장한 unsigned long 변수를 읽으려면 다음과 같이 처리한다.

public static short toUnsigned(byte b) {
return (short)(b & 0xff);
}

long position;
byte[] buf = new byte[96];
FileInputStream fin = new FileInputStream(path);
fin.read(buf, 0, 4);
position = toUnsigned(buf[0]) + (toUnsigned(buf[1])<<8) + (toUnsigned(buf[2])<<16) + (toUnsigned(buf[3])<<24);

- 문자셋은 기본 유니코드이다.
유니코드라서 char 는 16 bits 이고 문자열 함수에서 문자열 길이를 구할 때는
문자 하나당 1씩의 값을 갖는다. C에서는 보통 한글 문자의 길이가 2이나 JAVA에서는 1이다.

C언어에서 저장된 한글 텍스트 파일을 읽을 경우는 다음과 같이 한다.
FileInputStream fin = new FileInputStream(path);
BufferedReader bfReader = new BufferedReader(new InputStreamReader(fin, "MS949"));
str = bfReader.readLine();

또는, 파일 seek 가 필요한 경우에는
RandomAccessFile raf = new RandomAccessFile(path, "r");
FileInputStream fin = new FileInputStream(raf.getFD());
str = new String(raf.readLine().getBytes("8859_1"), "MS949");

구조체 데이터 중간에 한글이 저장된 경우는 다음과 같이 한다.
byte[] buf = new byte[96];
FileInputStream fin = new FileInputStream(path);
fin.read(buf, 0, 24);
str = new String(buf, 0, 24, "MS949");

- JAVA에는 포인터가 없다.
사실은 내부적으로 int, char 등의 기본 타입을 제외한 모든 타입이 포인터형이다.
그러니 따로 포인터라는 구분을 할 필요가 없다.
대부분의 변수는 new 를 통해 메모리를 할당해서 사용하며 함수의 인자도 역시 포인터형 이다.
메모리는 할당만 하고 해제는 따로 하지 않는다. 가비지 콜렉터가 자동으로 해제를 해 준다.
하지만 시스템 자원에 대해서는 따로 해제가 필요하다.

7. NDK 설치

C언어로 된 알고리즘를 사용할 수 있는 방법이다.
JAVA 프론트에 C 를 호출할 수 있는 인터페이스를 만들어 놓은 것이다.
C는 따로 컴파일해서 라이브러리로 만들고 *.so 파일을 lib 폴더에 가져다 놓는다.

(1) NDK 설치
http://developer.android.com/tools/sdk/ndk/index.html

(2) cygwin 설치
설치시 vim 과 devel 항목의 make와 선택 해서 설치함
제어판 > 시스템 > 고급 > 환경 변수 에서 PATH 경로에 C:\cygwin\bin 경로를 추가.

cygwin teminal에서 vim .bash_profile 실행
C:\cygwin\home\유저네임\.bash_profile 파일이 만들어짐
텍스트 편집기로 이 파일을 열어서
PATH="${HOME}/bin:${PATH}:/cygdrive/c/android-ndk-r9"
를 지정해 NDK path 지정

마지막 줄에 아래 항목 추가
NDK_ROOT=/cygdrive/c/android-ndk-r9
export NDK_ROOT

cygwin 상에서 C언어 컴파일시는 jni폴더의 상위 폴더에서 ndk-build 를 친다.

2013-12-16 [조회: 7986]

이전글: 처음글 입니다.
다음글: C 개발자를 위한 C++

목록보기
 
이름 암호
(스팸 방지용)오늘의 날짜를 숫자만으로 입력하세요.(예: 12)

비밀번호
목록보기
 
Copyright ⓒ 2021 All Rights Reserved.