SlideShare a Scribd company logo
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
core.mk
generic_no_telephony.mk
full_base.mk
telephony.mk & aosp_base.mk
full_base_telephony.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
37
AndroidProducts.mk
full_<product>.mk
Android.mk
AndroidBoard.mk
BoardConfig.mk
device_<board>.mk
vendorsetup.sh
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

More Related Content

PPT
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
PDF
Embedded Android Workshop
PPT
Learning AOSP - Android Booting Process
PDF
Embedded Android : System Development - Part IV
PDF
Android Boot Time Optimization
PDF
Android OS Porting: Introduction
PDF
Understanding the Android System Server
PPT
Linux Crash Dump Capture and Analysis
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
Embedded Android Workshop
Learning AOSP - Android Booting Process
Embedded Android : System Development - Part IV
Android Boot Time Optimization
Android OS Porting: Introduction
Understanding the Android System Server
Linux Crash Dump Capture and Analysis

What's hot (20)

PPTX
Android audio system(pcm데이터출력준비-서비스서버)
PDF
Arm device tree and linux device drivers
PDF
Booting Android: bootloaders, fastboot and boot images
PDF
U-Boot - An universal bootloader
ODP
Linux Kernel Crashdump
PDF
Embedded Linux BSP Training (Intro)
PPTX
Android audio system(audioplicy_service)
ODP
ansible why ?
PPTX
Android audio system(audioflinger)
PDF
Vmlinux: anatomy of bzimage and how x86 64 processor is booted
PDF
Explore Android Internals
PPTX
U-Boot presentation 2013
PDF
Embedded Android : System Development - Part I
PDF
Building aosp
PDF
Embedded_Linux_Booting
ODP
Q4.11: Porting Android to new Platforms
PDF
Deep Dive into the AOSP
PDF
Process Address Space: The way to create virtual address (page table) of user...
PDF
Linux power management: are you doing it right?
PDF
Embedded Android : System Development - Part II (Linux device drivers)
Android audio system(pcm데이터출력준비-서비스서버)
Arm device tree and linux device drivers
Booting Android: bootloaders, fastboot and boot images
U-Boot - An universal bootloader
Linux Kernel Crashdump
Embedded Linux BSP Training (Intro)
Android audio system(audioplicy_service)
ansible why ?
Android audio system(audioflinger)
Vmlinux: anatomy of bzimage and how x86 64 processor is booted
Explore Android Internals
U-Boot presentation 2013
Embedded Android : System Development - Part I
Building aosp
Embedded_Linux_Booting
Q4.11: Porting Android to new Platforms
Deep Dive into the AOSP
Process Address Space: The way to create virtual address (page table) of user...
Linux power management: are you doing it right?
Embedded Android : System Development - Part II (Linux device drivers)
Ad

Viewers also liked (9)

PDF
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
PDF
Aosp+
PDF
Embedded Android Workshop with Marshmallow
PDF
Buildsystem.mk
PDF
Kid's Way. Safe discovery! (parental control android launcher). Partners deck.
PDF
Android OTA updates
ODP
Android porting for dummies @droidconin 2011
PPTX
Red Bend Software: Optimizing the User Experience with Over-the-Air Updates
DOCX
Project proposal android operating system
Customizing AOSP For Different Embedded Devices And Integration at Applicatio...
Aosp+
Embedded Android Workshop with Marshmallow
Buildsystem.mk
Kid's Way. Safe discovery! (parental control android launcher). Partners deck.
Android OTA updates
Android porting for dummies @droidconin 2011
Red Bend Software: Optimizing the User Experience with Over-the-Air Updates
Project proposal android operating system
Ad

Similar to Android open source project build system phi innovations - android summit 2015 (20)

PDF
4. The Build System _ Embedded Android.pdf
PDF
Working with the AOSP - Linaro Connect Asia 2013
PDF
Introduction to Android ROM cooking, part of my AnDevCon workshop (AnDevCon S...
PDF
Droidcon uk2012 androvm
PDF
The Android Build System - Android Marshmallow
PPTX
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
PPTX
Open source Android 10 on Orange Pi: Meth or Reality?
PDF
Buildsystem.mk - DroidCon Paris 2014
PDF
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
PDF
Marko Gargenta_Remixing android
PPT
Enhancing and modifying_the_core_android_os
PDF
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
PDF
Discover System Facilities inside Your Android Phone
PDF
Android Variants, Hacks, Tricks and Resources
PDF
Porting Android
PDF
Porting Android ABS 2011
PDF
Leveraging Android's Linux Heritage at AnDevCon VI
PDF
Porting Android
PDF
Leveraging Android's Linux Heritage at AnDevCon V
PDF
Leveraging Android's Linux Heritage at AnDevCon IV
4. The Build System _ Embedded Android.pdf
Working with the AOSP - Linaro Connect Asia 2013
Introduction to Android ROM cooking, part of my AnDevCon workshop (AnDevCon S...
Droidcon uk2012 androvm
The Android Build System - Android Marshmallow
OWF12/PAUG Conf Days Alternative to google's android emulator, daniel fages, ...
Open source Android 10 on Orange Pi: Meth or Reality?
Buildsystem.mk - DroidCon Paris 2014
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Marko Gargenta_Remixing android
Enhancing and modifying_the_core_android_os
Native Android Userspace part of the Embedded Android Workshop at Linaro Conn...
Discover System Facilities inside Your Android Phone
Android Variants, Hacks, Tricks and Resources
Porting Android
Porting Android ABS 2011
Leveraging Android's Linux Heritage at AnDevCon VI
Porting Android
Leveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon IV

Recently uploaded (20)

PPTX
Cloud computing and distributed systems.
PDF
Machine learning based COVID-19 study performance prediction
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
KodekX | Application Modernization Development
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
A Presentation on Artificial Intelligence
PDF
Modernizing your data center with Dell and AMD
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Electronic commerce courselecture one. Pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
cuic standard and advanced reporting.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Cloud computing and distributed systems.
Machine learning based COVID-19 study performance prediction
NewMind AI Monthly Chronicles - July 2025
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
20250228 LYD VKU AI Blended-Learning.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Encapsulation_ Review paper, used for researhc scholars
KodekX | Application Modernization Development
Spectral efficient network and resource selection model in 5G networks
A Presentation on Artificial Intelligence
Modernizing your data center with Dell and AMD
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)
Electronic commerce courselecture one. Pdf
Per capita expenditure prediction using model stacking based on satellite ima...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
cuic standard and advanced reporting.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf

Android open source project build system phi innovations - android summit 2015

  • 1. Building My Product on Android Open Source Project Android Builders Summit 2015 Rafael Coutinho - Software Engineer Phi Innovations 1
  • 2. Agenda ● Motivation ● Build System Overview ● Simple Build ● Product Customization Structure ● Create My Own Products ● Summary ● Q&A 2
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. Android Build System Architecture Originals at: www.opersys.com/training/embedded-android 8
  • 9. Simple build Execute the build once (to be fearless) Build combo aosp_arm-eng Simple build for development targeting emulator 9
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. Product customization structure Product main makefiles: ● AndroidProducts.mk ● full_<product_name>.mk ● Android.mk ● AndroidBoard.mk ● BoardConfig.mk ● device_<board_name>.mk 20
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. Android product inheritance ● Makefile inheritance ● In order to have the minimal configuration you need embedded.mk base.mk core_minimal.mk core.mk generic_no_telephony.mk full_base.mk telephony.mk & aosp_base.mk full_base_telephony.mk 30
  • 31. 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
  • 32. 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
  • 33. AndroidBoard.mk “Binds” the Android to the Board ● Defines the kernel build to use ● device/lge/mako/AndroidBoard.mk 33
  • 34. 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
  • 36. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. Q&A* ● Now ● Later ● rafael.coutinho@phiinnovations.com ● @rafaelcoutinho * possibly there will be an answer 54