Android-build-system

Similar documents
1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

DE1-SoC Board

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

untitled

Secure Programming Lecture1 : Introduction

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

¨ìÃÊÁ¡2

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

HTML5* Web Development to the next level HTML5 ~= HTML + CSS + JS API

Interstage5 SOAP서비스 설정 가이드

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

슬라이드 제목 없음

PowerPoint Presentation

LXR 설치 및 사용법.doc

Apache Ivy

매력적인 맥/iOS 개발 환경 그림 A-1 변경 사항 확인창 Validate Setting... 항목을 고르면 된다. 프로젝트 편집기를 선택했을 때 화면 아 래쪽에 있는 동일한 Validate Settings... 버튼을 클릭해도 된다. 이슈 내비게이터 목록에서 변경할

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

PowerPoint 프레젠테이션

Mango220 Android How to compile and Transfer image to Target

APOGEE Insight_KR_Base_3P11

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770>


초보자를 위한 C++

강의10

4S 1차년도 평가 발표자료

chapter4

MAX+plus II Getting Started - 무작정따라하기

C# Programming Guide - Types

슬라이드 1

1

슬라이드 1

Chapter 1

DocsPin_Korean.pages

chapter1,2.doc

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Multi Channel Analysis. Multi Channel Analytics :!! - (Ad network ) Report! -! -!. Valuepotion Multi Channel Analytics! (1) Install! (2) 3 (4 ~ 6 Page

untitled

PCServerMgmt7

Orcad Capture 9.x

MPLAB C18 C

Solaris Express Developer Edition

untitled

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

슬라이드 1

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

1. 도구개요 CppUnit Testing 소개 CppUnit 는 C++ 용 testing Framework 로 Java 의 JUnit 을 C++ 로구현 C++ 언어에서사용할수있도록개발된 Open Source 프로젝트로, source code 의특정 Module 이의도

문서 대제목

Microsoft PowerPoint - Chapter_03-1_DevEnv.pptx

기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.

Mentor_PCB설계입문

Microsoft PowerPoint - 02-Development-Environment-1.ppt

PowerPoint 프레젠테이션

K7VT2_QIG_v3

Sena Technologies, Inc. HelloDevice Super 1.1.0

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

No Slide Title

01Àå

MySQL-Ch10

슬라이드 1

Microsoft Word - Automap3

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

(Microsoft PowerPoint - AndroG3\306\367\306\303\(ICB\).pptx)

PowerPoint 프레젠테이션

<49534F C0CEC1F520BBE7C8C4BDC9BBE720C4C1BCB3C6C320B9D D20BDC3BDBAC5DB20B0EDB5B5C8AD20C1A6BEC8BFE4C3BBBCAD2E687770>

6주차.key

ETL_project_best_practice1.ppt

Install stm32cubemx and st-link utility

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Abstract View of System Components

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

User Guide

제 출 문 환경부장관 귀하 본 보고서를 습마트기기 활용 환경지킴이 및 교육 통합 서비스 개 발 과제의 최종보고서로 제출합니다. 주관연구기관 : 주관연구기관장 : 2015년 10월 주식회사 덕키즈 김 형 준 (주관)연구책임자 : 문종욱 (주관)참여연구원 : 김형준, 문병

PowerPoint 프레젠테이션

Microsoft PowerPoint - ARM 개발 환경.ppt

품질검증분야 Stack 통합 Test 결과보고서 [ The Bug Genie ]

ISP and CodeVisionAVR C Compiler.hwp

교육2 ? 그림

PowerPoint 프레젠테이션

untitled

<31325FB1E8B0E6BCBA2E687770>

1. 도구개요 Implementation Eclipse CDT 소개 CDT(C/C++ Development Toolkit) 는 Eclipse plug-in 중하나로 C/C++ 개발을위한통합개발환경 (IDE : Integrated Development Environmen

Smart Power Scope Release Informations.pages

Dialog Box 실행파일을 Web에 포함시키는 방법

컴퓨터과학과 교육목표 컴퓨터과학과의 컴퓨터과학 프로그램은 해당분야 에서 학문적 기술을 창의적으로 연구하고 산업적 기술을 주도적으로 개발하는 우수한 인력을 양성 함과 동시에 직업적 도덕적 책임의식을 갖는 IT인 육성을 교육목표로 한다. 1. 전공 기본 지식을 체계적으로

서현수

Copyright 2012, Oracle and/or its affiliates. All rights reserved.,.,,,,,,,,,,,,.,...,. U.S. GOVERNMENT END USERS. Oracle programs, including any oper

10X56_NWG_KOR.indd

Spring Boot

歯CRM개괄_허순영.PDF

Portal_9iAS.ppt [읽기 전용]

4. Compass 명령어를알아보자. compass <command> [<option>, <option>, <option>.. <option>] command : 명령어. clean - Remove generated files and the sass cache. com

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

B _01_M_Korea.indb

Microsoft PowerPoint - comp_prac_081223_2.pptx

PowerPoint 프레젠테이션

Transcription:

Android Build System Rev-0.1 고도리 of AESOP 2012/04/12

INDEX Android build environment setup envsetup.sh Android source tree Android.mk

Android build environment 3

Initializing the Build Environment Android source download http://source.android.com/source/initializing.html Build releated documents & source download site Setting up a Linux build environment Android 를컴파일하기위해서는여러가지 tool 이필요함 일반적으로필요한환경 Ubuntu 10.04+ or MAC OS Python 2.5 ~ 2.7 GNU Make 3.81 JDK 6 위의사이트에는 3.82 도상관없다라고되어있지만, ICS 버전컴파일시에러남 Gingerbread or newer version JDK 5 for Froyoor older version Git1.7 or newer Ubuntu 를사용할경우 version 에따라환경문제가많이발생 Ubuntu 11.10 의경우 gcc compiler version issue 발생 4

Downloading the Source Tree Download site http://source.android.com/source/downloading.html Android source 는 6Gbytes 이상임. Install repo Repo is a tool that makes it easier to work with Git in the context of Android Repo is installed in the following order cd /usr/local/bin curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > /usr/local/bin chmod 755 /usr/local/bin/repo Initializing a Android working directory Android source is downloaded in the following order mkdir YOUR_ANDROID_DIRECTORY cd YOUR_ANDROID_DIRECTORY repo init -u https://android.googlesource.com/platform/manifest -b android- 4.0.4_r1.1 In case of android ICS 4.0.4 version at 04/12/2012 repo sync 5

Build environment setup Building the System In the Android source s top directory Use the envsetup.sh source build/envsetup.sh or. build/envsetup.sh Choose a Target You can use lunch command lunch You can show prepared lunch menu with target devices Android emulator 를위한 lunch 명령어 lunch full-eng 6

lunch 명령 Building the System 컴파일하려고하는타겟디바이스를설정하는명령 build target을지정하는형식은 BUILD-BUILDTYPE 형태 BUILD 는다음과같은조합을말함 Build name Device Notes full emulator fully configured with all languages, apps, input methods full_maguro maguro full build running on Galaxy Nexus GSM/HSPA+ ("maguro") full_panda panda full build running on PandaBoard ("panda") BUILDTYPE 은다음중하나이다 Buildtype user userdebug eng Use limited access; suited for production like "user" but with root access and debuggability; preferred for debugging development configuration with additional debugging tools 7

Building the System lunch menu 에새로운 target device 등록하기 build/envsetup.sh 실행시 choosecombo 다음과같은파일을검색해서 lunch menu 에등록 vendor/*/vendorsetup.sh vendor/*/*/vendorsetup.sh device/*/*/vendorsetup.sh vendorsetup.sh 의내용은다음과같이작성 (eg.> Nexus-S 의경우 ) device/samsung/crespo/vendorsetup.sh add_lunch_combo full_crespo-userdebug lunch 명령과같은역할. 차이점은 lunch 의경우 envsetup.sh 시 lunch menu 에해당 target 이등록되어있어야하지만 choosecombo 의경우는 build target 지정을직접 command line 에서할수있도록되어있음 8

Building the System Target 설정이끝나면 build 를시작 make 혹은 make j4 와같은명령이용, 여기서 4 는 JOB 개수 CPU core 가 6 개일경우는 j6 옵션을주면됨 showcommands 옵션 make showcommands 위와같은옵션을주고 make 를하게되면어떻게 compile 이되고 link 되는지전체진행과정을보여준다. 9

build/envsetup.sh help envsetup.sh Android build system 에서제공하는 shell script 명령어들 부분컴파일을위한 toolchain 경로지정등의역할 다음과같이실행 In Android source top directory $ANDROID_HOME #>. build/envsetup.sh 혹은 $ANDROID_HOME #> source build/envsetup.sh envsetup.sh 의실행이끝난후 host 의 shell 상에서 help 를실행 10

croot envsetup.sh Changes directory to the top of the tree Android source directory의하위디렉토리에서만실행 11

m, mm, mmm m envsetup.sh Android source build help commands Android sub tree에서 source top directory로이동후 Android 전체make make 완료후명령어를실행한 sub directory로다시돌아옴 12

mm envsetup.sh 현재 directory 밑의모든 Android.mk 파일을찾아서컴파일을해준다 mm 명령은오직컴파일과 root filesystem에관련 file들을 update만함 컴파일후 system.img를자동으로생성하기위해서는 snod 명령같이사용 13

mm command with snod option envsetup.sh Build all sources in the current directory and sub-directories. And builds new system image from current binaries 14

mmm envsetup.sh Build specified directory or list of directories. You can use with snod option like mm command. 15

cgrep, jgrep, resgrep envsetup.sh 각각 C/C++ source, JAVA source, resource file 서부터특정 string 을찾아준다. godir 지정된디렉토리로이동할수있음 16

bionic bionic libc build envsetup.sh Android source tree build shell script 들이있음, 툴체인경로설정등환경설정 generic board 에대한 configuration build/target/board/generic/device.mk root filesystem 의구성을어떻게해야하는가에대한방향을지정하는파일 android 최종결과물구성시자동으로포함하고싶은 binary 들에대한 install 을결정 build/target/board/generic/boardconfig.mk Android 의 makefile 인 Android.mk 에기본적으로포함되는최상위 Makefile 주로 HAL 혹은기능들에대한 enable/disable 과관련이깊음 Android.mk 파일에영향을주고 Android.mk 파일에서 define 을제어할수있도록설정하는경우가많음 ex> BoardConfig.mk 의 BOARD_USES_GENERIC_AUDIO := true 의경우 frameworks/base/services/audioflinger/android.mk frameworks/base/services/audioflinger/audiohardwareinterface.cpp 파일의해당부분을참조 CTS Compatibility Test Suite 관련소스디렉토리 17

development 개발용 app 등 external Android source tree Android 고유의 library 가아닌 linux 혹은기존에작성된 library/binary 소스 작성된 library 중 shared library(*.so) 파일은 root filesystem 의 system/lib 로 install 작성된 library 중 binary 파일은 root filesystem 의 system/bin 으로 install framework test app와 library등은이디렉토리에서작업하는게좋음 frameworks base/policy PhoneWindowManager 소스 Android 전체시스템을 background 에서제어하는최상위 application 인 PhoneWindowManager 는다음과같은기능을갖는다 KeyGuard 관련 LockScreen 화면전체동작제어 (ex> Rotation) event 관리 Key event 등 18

frameworks Android source tree base android framework source libs/ui Android framework 에서 JNI 를통해서호출되는 android client part HAL Input device(key, touch) 의경우 libs/utils Wrapping class, 압축관련유틸리티등 libs/binder cmds media Android binder & Anonymous shared memory 제어클래스 binder 관련 binary 인 servicemanager 소스와여러가지 command 들 media 관련 JAVA, JNI, Client, Service, Media engine(libstagefright) 등의소스 media 관련은너무크고, 독립적이기때문에따로디렉토리를만들어관련소스를하나의디렉토리에넣음 19

device Android source tree 각 vendor 에서만드는 vendor 별 device 들에대한설정파일 자체 device 와 product 를만들기위해서는이디렉토리에서관련파일들을작성하는것이좋음 작성되는주요파일리스트 vendor AndroidProducts.mk Product, device 관련이름들을지정 BoardConfig.mk, device.mk generic board 에서와마찬가지역할을한다. device 디렉토리와같은역할 Android 2.1/2.2 버전에서는이디렉토리를기본 device 들에대한디렉토리로사용 현재 (Ice Cream Sandwich) 도이디렉토리를사용하는경우있음 20

out android compile 결과물디렉토리 packages android 기본 application source Android source tree 주의해야할점은모든 app 가컴파일되지않는다. 컴파일되는패키지들은각 device 별 device.mk 에지정이되는 PRODUCT_PACKAGES 변수에포함되어야함 ex> build/target/product/generic-no-telephony.mk prebuilt toolchain & 필요한 binary system android 의 root filesystem 에포함되는기본 binary 소스 (ex> init) /core/init android init source /vold vold2, android 2.3 버전서부터사용됨 21

Android source tree hardware HAL source & header file HAL Class 의 prototype 일반적으로 android 에서사용되는 hardware 관련소스들을포함, 반드시이디렉토리에만위치하는것은아님 device, vendor 디렉토리에존재하는경우가많음 libhardware board hardware dependency 가높은하드웨어모듈들의 example 및 header 일반적으로안드로이드폰에기본적으로탑재되지않고, cpu 혹은제조사의모듈에의존성이높은부분들에관련된 class prototype 코드가있음 안드로이드소스전체를컴파일하지않는경우도있고, 모듈단위로직접컴파일해서안드로이드 root filesystem 에 install 하는경우도있음 Android framework 에서동적으로 module(*.so 파일형태 ) 을 loading 하는 hw_get_module() 함수에대한소스가있음 hw_get_module() 함수는다음과같은순서로동적 module 을 loading 한다. $(MODULE_NAME).%ro.hardware%.so ex> sensors.origen.so $(MODULE_NAME).%ro.product.board%.so ex> sensors.origenboard.so $(MODULE_NAME).%ro.board.platform%.so ex> sensors.insignal_origen.so $(MODULE_NAME).%ro.arch%.so ex> sensors.exynos4.so hw_get_module() 함수는 rootfs 의 system/lib/hw, vendor/lib/hw 디렉토리를검색 22

hardware ndk libhardware_legacy Android source tree 일반적으로 android phone 에존재해야하는 hardware 에대한제어코드들이들어있음 Android compile 시같이컴파일된다 ex> wifi/wifi.c include/* Android built-in HAL 의일부 prototype 이선언되어있음 ex> Audio Native Development Kit 관련파일들이있음 docs/android-mk.html Android 에서사용되는 makefile 인 Android.mk 파일을어떻게작성해야하는지에대해서설명되어있음 PDK(Platform Development Kit Android 소스 ) 에적용되는부분에대한설명보다는 NDK 용 Android.mk 파일에대한설명임 하지만, PDK 용문서로참고하기좋음 23

Android.mk Android.mk Android 시스템에서사용되는 makefile Build system 이어떻게소스들을다뤄야하는지에대한설명 최종결과물은다음중하나 Executable binary Shared library Static library Host executable binary Application package etc. build/core/config.mk 에많은부분이더 define 되어있으나사용빈도가낮다 Android source top directory 에서 make 명령사용시 Sub directory 의모든 Android.mk 파일을검색 Source file 들의 update 상황검사 결과물이 static library 가아닐경우컴파일후 library/binary 등을 root filesystem 에 update 24

Executable binary example LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_SRC_FILES:= server.cpp Android.mk LOCAL_SHARED_LIBRARIES := libcutils libutils libbinder libgadd01 base := $(LOCAL_PATH)/../../.. LOCAL_C_INCLUDES := \ $(base)/binder01 LOCAL_MODULE:= server01 include $(BUILD_EXECUTABLE) 25

Android.mk Android.mk 를구성하는문법 & definition LOCAL_PATH := $(call my-dir) Android.mk 파일은반드시이정의로시작되어야한다. Android 소스트리에서소스파일들의위치를지정하는데사용 my-dir macro를이용해서현재디렉토리로지정 include $(CLEAR_VARS) Android.mk 파일내에서사용되는 LOCAL_XXX 형태의변수들을 clear함 e.g. LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, etc... LOCAL_PATH 는제외됨 build/core/clear_vars.mk 어떤 definition들이 clear되는지기록되어있음 build/core/config.mk 파일에서 include됨 26

Android.mk Android.mk 를구성하는문법 & definition LOCAL_MODULE 최종출력결과물의이름, 반드시 unique 한이름이어야함 최종결과물의종류지정에따라생성파일이름이달라짐 Build output type definition include $(BUILD_EXECUTABLE) 최종결과물은 LOCAL_MODULE 에서지정된이름그대로생성됨 out/target/product/$(target_product)/obj/executables/$(local_module)_inter mediates/linked/$(local_module) Root filesystem 의 system/bin 디렉토리로복사 install 됨 out/target/product/$(target_product)/system/bin/$(local_module) include $(BUILD_SHARED_LIBRARY) 최종결과물은 LOCAL_MODULE.so 의형태를갖는 shared object 를생성 out/target/product/$(target_product)/obj/shared_libraries/$(local_module) _intermediates/linked/$(local_module).so Root filesystem 의 system/lib 디렉토리로복사 install 됨 out/target/product/$(target_product)/system/lib/$(local_module).so 27

Android.mk Android.mk 를구성하는문법 & definition Build output type definition include $(BUILD_STATIC_LIBRARY) 최종결과물은 LOCAL_MODULE.a 의형태를갖는 static library 생성 out/target/product/$(target_product)/obj/static_libraries/$(local_module)_i ntermediates/$(local_module).a Root filesystem 으로는포함되지않는다 LOCAL_MODULE_TAGS build/core/base_rules.mk 에사용 tag option 지정 Android build system 의 BUILDTYPE(e.g. eng) 에따라지정된 tag 와매칭이될경우만해당모듈을컴파일하도록하는지시자 ICS 버전에서는 optional, debug, eng, test, samples 태그를지원함 optional 태그는 GingerBread 서부터생겨남 각 PRODUCT 혹은 device 의 PRODUCT_PACKAGES 에해당 module 이지정되어있지않으면전체 make 시 root filesystem 에 install 하지않음 28

Android.mk Android.mk 를구성하는문법 & definition LOCAL_MODULE_TAGS( 계속 ) ex> LOCAL_MODULE_TAGS := eng optional eng 빌드타입에서는 build 가됨 하지만, eng 이외의 buildtype 에서는 PRODUCT_PACKAGES 변수에해당모듈이름이포함되어있지않은경우는전체 build 시 root filesystem 에 install 되지않는다 만일 user 빌드타입으로전체 build 를하면 PRODUCT_PACKAGES 변수에지정되어있지않으면 root filesystem 에포함되지않음 PRODUCT_PACKAGES 변수로의지정 build/target/product/*.mk 파일에서지정을하거나 device/*.mk 파일등에서지정한다 일반적으로 device 디렉토리의 $(PRODUCT)/device.mk 등에서많이지정된다. 29