[go: up one dir, main page]

0% found this document useful (0 votes)
210 views54 pages

AOSP On New Deivce

The document discusses customizing Android builds for products. It provides an overview of the Android build system and process, including setting up the build environment, running a simple build, and understanding the output. It then covers how product customizations are structured in the AOSP source tree using product makefiles and boards, allowing one to build their own customized Android images.

Uploaded by

isumanthg
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
210 views54 pages

AOSP On New Deivce

The document discusses customizing Android builds for products. It provides an overview of the Android build system and process, including setting up the build environment, running a simple build, and understanding the output. It then covers how product customizations are structured in the AOSP source tree using product makefiles and boards, allowing one to build their own customized Android images.

Uploaded by

isumanthg
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 54

Building

My Product on
Android Open Source Project

Android Builders Summit 2015


Rafael Coutinho - Software Engineer
Phi Innovations

1
Agenda

● Motivation
● Build System Overview
● Simple Build
● Product Customization Structure
● Create My Own Products
● Summary
● Q&A

2
Motivation

● At work we design hardware, customize the operating


system, develop high level applications
● SoCs based on
● Freescale (iMX53, iMX6)
● Texas Instruments (Beaglebones)
● AllWinner (A20)
● FriendlyARM (Tiny210)
● Android basic porting are provided by these vendors
● However usually not in a standard way

3
Motivation

● Not in a standard way tricks we have found


● Shell scripts to define the Android variables during build.
● Shell scripts copied to the build that are executed on the init.rc and
then set the actual Android environment variables/configurations.
● Manually executed commands during build (like for compiling HALs)
● Provide a pre built tar file with the root file system to be copied over
the final build
● Hard time figuring out why our customizations do not go
thru the build in each provided AOSP porting

4
Motivation

● Looking for AOSP build process documentation we


have found it is scarce and what is available is old or
cached versions
● build/core/build-system.html - Starts with “Status: Draft (as of May 18, 2006)”
● KAndroid website with cached old version of the Android build
● Embedded Android book from Karim Yaghmour
● Free electrons training
● Some ABS previous presentations
● Usually deep and complete but also complex

5
Motivation

● Describe how to customize an AOSP for a target


product using the standard AOSP build mechanisms

● Making easier to extend/develop ported AOSPs on


customized boards

6
Android Build System

Build systems are software tools designed to automate the


process of program compilation.
Google defined a GNU/Make based build system for
Android
● Replacing Makefile files with Android.mk
● New imported modules must have it’s Makefiles “translated”
● No tool like menuconfig available by default

7
Android Build System Architecture

Originals at: www.opersys.com/training/embedded-android

8
Simple build

Execute the build once (to be fearless)


Build combo aosp_arm-eng
Simple build for development targeting emulator

9
Simple build

$ source build/envsetup.sh
$ lunch
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
Which would you like? [aosp_arm-eng]
$ make -j16

Wait…
10
Simple build… envsetup

envsetup.sh
This script is for setting up the build environment on the
current shell
● adding macros
● type hmm to list all macros created
● godir - move to the directory containing a file
● m, mm, mmm - macros to start a build with different args
● cgrep - alias to execute grep on c/c++ files
● jgrep - alias to execute grep on java files

11
Simple build… lunch

lunch
● It lists all the combos available in the current
environment to be built
● By following all vendor/* and device/* folders looking for the
vendorsetup.sh files.
● vendorsetup.sh files actually executes the add_lunch_combo with
parameters

12
Simple build… combos

● A build combo are combination of a product to build and


the variant to use.
● product (TARGET_PRODUCT)
● A product defines how the final Android image is, selecting it’s services, initialization,
applications to install etc. For example aosp - for emulators.
● build variant (TARGET_BUILD_VARIANT) select the purpose of this
build. The options are:
● user: Includes modules tagged user, usually used for final release.
● userdebug: Includes modules tagged user or debug. Usually for platform testing.
● eng: Includes modules tagged user, debug or eng. Usually for development phase.

13
Simple build… env variables

lunch sets env variables used by the build.


PATH $ANDROID_JAVA_TOOLCHAIN:$PATH:$ANDROID_BUILD_PATHS

ANDROID_EABI_TOOLCHAIN aosp-root/prebuilt/linux-x86/toolchain/arm-
eabi-4.4.3/bin

ANDROID_TOOLCHAIN $ANDROID_EABI_TOOLCHAIN

ANDROID_BUILD_TOP aosp-root

ANDROID_PRODUCT_OUT aosp-root/out/target/product/generic (has an alias OUT)

TARGET_BUILD_VARIANT eng,user,userdebug

TARGET_BUILD_TYPE debug or release

14
Simple build… output

The build output is generated in the folder defined by


● ANDROID_PRODUCT_OUT usually aosp/out
The output is composed by modules built for the host
system and target ones
● The system image is created in target folder under a
directory named with the target product name
● aosp/out/target/product/aosp/

15
Simple build… images

The following files (among others) are created:


● ramdisk.img
● Contains the root file system of Android, including
● init.* configuration files
● default.prop containing the read only properties of this AOSP build
● /system mounting point
● system.img
● Contains the components generated by the AOSP build, including
● framework, applications, daemons

16
Simple build… images

● userdata.img
● Partition to hold the user data. Usually empty after the build
● recovery.img, ramdisk-recovery.img
● basic image partition used to recover user data or even the actual
system if anything goes wrong.

17
Simple build… emulator

● Open emulator for testing


● Build has set up PATH var to point to an
emulator executable.
emulator -show-kernel -shell
● Model number
● Build number

18
Product customization structure

● The aosp-root/device folder


contains the customizations
● Building procedures and extensions for the
targeted “Android based product” of this
build.
● Devices are grouped by vendor
● Each device have one or more
products and boards.

19
Product customization structure

Product main makefiles:


● AndroidProducts.mk
● full_<product_name>.mk
● Android.mk
● AndroidBoard.mk
● BoardConfig.mk
● device_<board_name>.mk

20
Android product makefile

● AndroidProducts.mk list the products of this vendor


setting the PRODUCT_MAKEFILES build variable
● For instance the device/generic/qemu/AndroidProducts.mk

As reference check build/target/product/AndroidProducts.mk


21
Android product makefile

● A product makefile (full_<product_name>.mk) contains


the product properties (name, version etc) and extras like
modules/programs or prebuilt files to be included in the
build.
● It could include/inherit from other predefined mk files
from build/target/product/
● It must define its boards makefile
● device_<board_name>.mk
As reference check build/target/product/
22
Android product makefile

● Product properties
● PRODUCT_NAME := aosp_arm
● This is the name that will appear in the lunch combo option. This must match this
product folder under devices folder.
● PRODUCT_DEVICE := generic
● This must match the device’s sub directory. TARGET_DEVICE derives from this
variable.
● PRODUCT_MODEL := AOSP on ARM Emulator
● The end-user-visible name for the end product.

23
Android product makefile

● Product files to copy


PRODUCT_COPY_FILES := \ device/sample/etc/apns-conf_br.xml:
system/etc/apns-conf.xml \ device/ti/panda/media_codecs.xml:
system/etc/media_codecs.xml \ device/ti/panda/init.rc:root/init.rc

● Forces the copy of those files on the final build

24
Android product makefile

● Modules to be included
PRODUCT_PACKAGES += \
my_own_service_module \
CustomGallery \
lib4mywifi
● Defines which modules, besides any inherited (due to the ‘+’ before
the equals), we want to include on the build.
● It could include libs/apps that are only defined under
device/<my_company>/<my_product>.

25
Android product makefile

● Overriding frameworks/packages config/layout files


PRODUCT_PACKAGE_OVERLAYS :=
device/<my_company>/<my_product>/overlay
● Defines a directory that will override the AOSP sources.
● Avoid changing the frameworks folder directly
● The sub folders must have the same AOSP root structure.
device/<my_company>/<my_product>/overlay/frameworks/base/c
ore/res/res/values/config.xml

26
Android product makefile

● Common overlayed files


frameworks/base/core/res/res/values/config.xml
● config_supportAutoRotation
● Enables auto rotation support
● config_longPressOnPowerBehavior
● defines if pressing power button show a global actions menu, only power off or do
nothing.
● config_shortPressOnPowerBehavior
● Similar to above but with other options
● “Documented” here: https://github.
com/android/platform_frameworks_base/blob/master/core/res/res/values/config.xml

27
Android product makefile

● Common overlayed files


frameworks/base/core/res/res/drawable-
nodpi/default_wallpaper.jpg
● Replaces the default wallpaper with no Wallpaper service
customization

28
Android product inheritance

● Inherit to reuse
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)

● Inheriting from full_base.mk would define most of the needed base


configurations.
● full_base inherits from
● AllAudio.mk
● Importing some audios for the system
● locales_full.mk
● Get lists of supported languages
● generic_no_telephony.mk
● Includes apps like Calendar, Music, Settings
● Besides includes wpa_supplicant

29
Android product inheritance

● Makefile inheritance
● In order to have the minimal configuration you need
embedded.mk

base.mk

core_minimal.mk
telephony.mk & aosp_base.mk
core.mk
full_base_telephony.mk
generic_no_telephony.mk

full_base.mk

30
Android product inheritance

● Other important make files


● emulator.mk
● Creates the emulator tools for this build.
● Must be included in the MKs in order to get it created.
● telephony.mk
● Includes Dialer and MMS apps
● Include the rild (radio interface layer daemon)

31
Android.mk

If there is any module is defined under


devices/<my_company>/<my_product>
folder to be built, an Android.mk file is needed to call
recursively the build on the sub folders.

32
AndroidBoard.mk

“Binds” the Android to the Board


● Defines the kernel build to use
● device/lge/mako/AndroidBoard.mk

33
BoardConfig.mk

Configures the board (hardware) related parameters


Usually in the same product folder, but could be separated:
device/<my_company>/<my_board>/
Defined by the PRODUCT_DEVICE
● Boot args for loading kernel
● Target CPU, CPU variant
● Partitions sizes
● Build compilation flags

34
BoardConfig.mk

Simple BoardConfig.mk

35
device.mk

● A device makefile (device_<board_name>.mk) contains


the board properties
● Same variables used by the product makefile but now
more attached to the board
● May define this boards overlays
● DEVICE_PACKAGE_OVERLAYS
● It may include any board specific makefiles

As reference check build/target/board/


36
Android product makefile

full_<product>.mk

device_<board>.mk

AndroidBoard.mk

AndroidProducts.mk BoardConfig.mk

Android.mk vendorsetup.sh

37
Creating my own product

● Organization “BossaNova” wants to create an Android


product called “Girl Of Ipanema” that runs on the “Tom
Jobim” board.
● This product basically allows a customer to have a customized
Android that has info about Girl Of Ipanema song.
● Create the organization folder under device folder
● Create the device folder where the product and board
files are located
● Customize it
38
Creating my own product
Folders/files structure
● Create bossanova organization folder
● Under bossanova
● Create board mk files
● device_tomjobim.mk (build/target/board/generic/device.mk)
● BoardConfig.mk (build/target/board/generic/BoardConfig.mk)
● AndroidProducts.mk
● full_girlofipanema.mk
● Create script to include this product combo into the lunch menu
● vendorsetup.sh

39
Creating my own product
Folders/files content
● AndroidProducts.mk
PRODUCT_MAKEFILES := $(LOCAL_DIR)/full_girlofipanema.mk

● device_tomjobim.mk
Includes Emulator’s make file
include $(SRC_TARGET_DIR)/product/emulator.mk
Define this devices overlay directory (Just wallpaper replacement)
DEVICE_PACKAGE_OVERLAYS := device/bossanova/tomjobim/boardoverlays

frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.jpg

40
Creating my own product
Folders/files content
● BoardConfig.mk
● Pretty much the emulator’s one
● Reducing the size of userdata partition to 256M
BOARD_USERDATAIMAGE_PARTITION_SIZE := 268435456
● vendorsetup.sh
● Added our combos

41
Creating my own product
Folders/files content
● full_girlofipanema.mk
Define products info (model, name, device…)
Setting this product overlay defining the launchers wallpaper
PRODUCT_PACKAGE_OVERLAYS := device/bossanova/tomjobim/goi_overlays
Customized config.xml overlay
config_toastDefaultGravity=top|center_horizontal

Set the languages to be included in the build


PRODUCT_LOCALES := en_US pt_BR

42
Creating my own product build

Build Girl of Ipanema’s Android for Tom Jobim board


$ source build/envsetup.sh
$ lunch
You're building on Linux
Lunch menu... pick a combo:
[..]
22. full_girlofipanema-userdebug
23. full_girlofipanema-user
24. full_girlofipanema-eng
Which would you like? [aosp_arm-eng] 22
make -j16

43
Emulator

44
Create a second product

● Organization “BossaNova” wants to create another


Android product called “One Note Samba” that runs on
the “Tom Jobim” board.
● This product comes with a default prebuilt app to play
One Note Samba song repeatedly
● This is not a phone but a tablet
● Target market will be Brazil (so default language is
portuguese)
● Change the custom boot animation
45
Creating my own product
Folders/files structure
● Under bossanova
● Create product mk files
● full_onenotesamba.mk

● Update the following files


● AndroidProducts.mk
● vendorsetup.sh

● Create the custom app folder

46
Creating my own product
Folders/files content
● AndroidProducts.mk
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/full_girlofipanema.mk \
$(LOCAL_DIR)/full_onenotesamba.mk

● vendorsetup.sh
Added our combos
add_lunch_combo full_onenotesamba-userdebug
add_lunch_combo full_onenotesamba-user
add_lunch_combo full_onenotesamba-eng

47
Creating my own product
Folders/files content
● full_onenotesamba.mk
Add a new package to be included into the build, set the overlay folder and
the tablet characteristic
PRODUCT_PACKAGES += OneNoteSambaPlayer
PRODUCT_PACKAGE_OVERLAYS := device/bossanova/tomjobim/ons_overlays
PRODUCT_CHARACTERISTICS := tablet
PRODUCT_COPY_FILES += device/bossanova/tomjobim/bootanimation.zip:
system/media/bootanimation.zip

48
Creating my own product
Folders/files content
● full_onenotesamba.mk
Customized config.xml overlay (setting toast to be in the center)
config_toastDefaultGravity=center_vertical|center_horizontal

Set portuguese to be the default language

PRODUCT_LOCALES := pt_BR en_US

49
Adding a prebuilt app

Create a directory under tomjobim directory


devices/bossanova/tomjobim/OneNoteSambaApp

Copy the pre built apk file into it


Create the Android.mk for describing how to build it

50
Adding a prebuilt app

Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed.
LOCAL_MODULE := OneNoteSambaPlayer
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

51
Summary

● AOSP build system has standards mechanisms to allow


customizations
● Following them is important to allow others to expand
and customize your device
● However its documentation is mostly by reading the
code

52
References

Embedded Android, Karim J. Yaghmour - www.opersys.


com/training/embedded-android
Free electrons training - free-electrons.com/training/android
Jelly Bean Device Porting Walk through, Benjamin Zores, ABS 2013 -
speakerdeck.com/gxben/jelly-bean-device-porting-walkthrough
Zip File with Device Folder - phiinnovations.com/files/bossanova.zip
Phi Innovations - www.phiinnovations.com

53
Q&A*

● Now
● Later
● rafael.coutinho@phiinnovations.com
● @rafaelcoutinho

* possibly there will be an answer


54

You might also like