Android Build 환경 설명 및 Make file 에서 외부 so library 파일을 추가하는 방법 과 PDK build
Make file 을 이용해 어떤 일을 할 때 지금 가지고 있는 파일들을 build 해서 사용하는 것이 아니라 기존에 만들어져 있던 lib 를 사용하여야 할 때도 있습니다.
소스가 아닌 lib 파일 *.so 를 include 하여 사용하는 방법은 아래와 같습니다.
일단 추가되는 lib 파일이 libexter.so 라고 할때
CAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PREBUILT_LIBS += libexter.so
include $(BUILD_MULTI_PREBUILT)
의 형식으로 make file 을 만들고 현재 directory 에 exter.so 를 넣어주면 됩니다.
이 lib 를 사용하는 방법은 make file 내에
LOCAL_SHARED_LIBRARIES := libexter.so
include $(BUILD_SHARED_LIBRARY)
를 추가하여 주면 됩니다.
Android Build 의 PDK 빌드란?
pdk_config.mk 에 정의 되어 있는 빌드 옵션으로 PDK(Platform Development Kit) 빌드 라고 함.
PDK 빌드는 모든 소스 코드를 가지고 빌드하지 않아도 될 경우 lib 를 만들어 놓고 미리 만들어 놓은 lib 를 실제 build 시에 사용하도록 하는 것으로 외부에 소스를 배포해야 할 경우 특정 모듈을 lib 형태로 배포할 수 있게 함.
/Makefile
- 안드로이드 빌드의 가장 첫 Makefile로 build/core/main.mk를 읽어 빌드를 시작하는 역할
추가로 Android Build 파일에 대한 설명입니다.
/build/core/main.mk
- 빌드에 필요한 Java 버전을 확인하여 적절하지 않을 경우 fail 이 발생하고 빌드가 멈춤.
- lunch 나 choosecombo 에서 선택한 user, userdebug, eng 등 빌드 버전 설정 함
- 하위 폴더의 모든 Android.mk 파일 탐색하여 읽어 들임 (findleaves.py 파일을 사용)
- 읽어들인 Android.mk 파일 중 실제 빌드에 사용되는 모듈을 필터링해 줌
config.mk
- 이전에 명세한 내부 빌드 시스템 설정(CLEAR_VARS 등)
- lunch 설정에 따른 보드 설정 파일(BoardConfig.mk) 탐색 및 분석
- 각종 툴 설정(예 : aapt, proguard, flex 등)
definitions.mk - 수 많은 매크로를 정의(예 : my-dir, all-subdir-makefiles, add-prebuilt-file 등) 해 놓은 파일
Android.mk - 각 모듈의 빌드를 위한 Makefile로 이 파일을 모아 전체 android build 를 하는 것임. 일반적으로 특정 폴더의 Android.mk 파일만을 지정해서 읽어들이지 않고 하위 폴더의 모든 Android.mk 를 읽는 방식으로 동작함.
build/core/Makefile
- recovery image, system image, ram image 등을 위한 타겟 변수 정의
cleanbuild.mk
- config.mk를 통해 환경변수가 설정 된 이후 발생한 모든 종속성들을 정리함.
- 반드시 config.mk가 Include된 이후에 로드되어야 함.
dex_preopt.mk
- Preloaded Application의 jar code를 dex로 Preoptimizing함. dex 가 무엇인가에 대해서는 다른곳에서.... 그때 odex 도 함께 ^^
post-clean.mk
- 빌드 전, 현재의 빌드 설정과 이전 빌드 결과물을 확인하여 정리함.(Android.mk Include 후 실행)
legacy_prebuilts.mk
- ALL_PREBUILT에 변경사항이 있는지 검사하는 역할을 합니다.
help.mk
- 빌드 시스템의 도움말에 대한 정의를 해 놓은 파일로 이 파일을 잘 보면 빌드에러 처리를 잘 할 수 있음
(USB device) Ubuntu 에서 USB 장치목록 보기 (0) | 2014.10.11 |
---|---|
ssh 를 이용한 network file copy 명령어 (scp 명령어 사용법) (0) | 2014.10.06 |
우분투 에서 USB 부팅 디스크 만들기 (How to create a bootable USB stick on Ubuntu) (0) | 2014.09.24 |
linux ubuntu group 에 user 추가하기, default group 바꾸기(변경) (0) | 2014.08.05 |
ubuntu git 폴더에서 특정 파일 제외하고 복사하기. rsync 알면 편한 Ubuntu 파일 백업 명령 (0) | 2014.07.31 |