Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

speakerdeck.com/erikhellman

Slide 3

Slide 3 text

Agenda • Working with repo • Lunch targets and variants • Adding a new device • System properties • Resource overlays • Adding new modules • Soong build system • Apps • Library

Slide 4

Slide 4 text

Repo init $ repo init -u -b -m

Slide 5

Slide 5 text

Repo init - with mirror $ cd $ repo init -u -b -m --mirror $ repo sync -c -j $ cd $ repo init -u -b -m \ --reference= $ repo sync -c -j

Slide 6

Slide 6 text

Proprietary binaries

Slide 7

Slide 7 text

Lunch targets $ . build/envsetup.sh $ lunch

Slide 8

Slide 8 text

Lunch targets $ lunch You're building on Linux Lunch menu... pick a combo: ... 28. aosp_flame-userdebug 29. aosp_flame_car-userdebug 30. aosp_redfin-userdebug 31. aosp_redfin_car-userdebug ... Which would you like? [aosp_arm-eng]

Slide 9

Slide 9 text

Common lunch targets (AndroidProducts.mk) COMMON_LUNCH_CHOICES := \ aosp_flame-userdebug \ aosp_flame_car-userdebug \

Slide 10

Slide 10 text

Variants

Slide 11

Slide 11 text

Common lunch targets (AndroidProducts.mk) COMMON_LUNCH_CHOICES := \ aosp_flame-userdebug \ aosp_flame_car-eng \ aosp_flame_car-userdebug \

Slide 12

Slide 12 text

Adding a new device to AOSP $ mkdir device// $ vim device///AndroidProducts.mk

Slide 13

Slide 13 text

AndroidProducts.mk (my_device) PRODUCT_MAKEFILES := $(LOCAL_DIR)/aosp_my_device.mk COMMON_LUNCH_CHOICES := aosp_my_device-userdebug

Slide 14

Slide 14 text

aosp_my_device.mk # Inherit from the common Open Source product configuration $(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) PRODUCT_NAME := aosp_my_device PRODUCT_DEVICE := my_device PRODUCT_BRAND := Android PRODUCT_MODEL := Eriks AOSP on Pixel5 PRODUCT_MANUFACTURER := Hellsoft PRODUCT_RESTRICT_VENDOR_FILES := true $(call inherit-product, device/google/redfin/device-redfin.mk) $(call inherit-product-if-exists, vendor/google_devices/redfid/device-vendor-redfin.mk)

Slide 15

Slide 15 text

System properties PRODUCT_SYSTEM_PROPERTIES += \ ro.lockscreen.disable.default=true \ ro.config.low_ram=true \

Slide 16

Slide 16 text

Resource overlays PRODUCT_PACKAGE_OVERLAYS += device/google/redfin/redfin/overlay

Slide 17

Slide 17 text

Resource overlays $ pwd /mnt/aosp/device/google/redfin/redfin/overlay $ ls frameworks packages vendor $ tree -C -d frameworks frameworks └── base ├── core │ └── res │ └── res │ ├── values │ └── xml └── packages └── SystemUI └── res ├── drawable ├── values └── values-land

Slide 18

Slide 18 text

frameworks/base/core/res/res/config.xml false 108px 28dp

Slide 19

Slide 19 text

Adding packages to AOSP

Slide 20

Slide 20 text

Soong build system

Slide 21

Slide 21 text

Bazel for AOSP

Slide 22

Slide 22 text

Soong documentation https://ci.android.com/builds/submitted/11094138/linux/ latest/view/soong_build.html

Slide 23

Slide 23 text

Add a new app Android.bp android_app { name: "my_system_app", resource_dirs: ["res"], sdk_version: "current", srcs: [ "src/**/*.kt", "gen/**/*.java", ], product_specific: true, static_libs: [ "androidx.annotation_annotation", "androidx.collection_collection", "androidx.arch.core_core-common", "androidx.lifecycle_lifecycle-common", "com.google.android.material_material", "androidx.lifecycle_lifecycle-runtime", "androidx.core_core", "androidx.recyclerview_recyclerview", ], }

Slide 24

Slide 24 text

Import an APK android_app_import { name: "my_imported_app", apk: "remote_display_manager.apk", certificate: "platform", privileged: true, required: ["privapp_whitelist_se.hellsoft.myapp"] }

Slide 25

Slide 25 text

Grant permissions to preinstalled apps

Slide 26

Slide 26 text

Including permissions file in AOSP build prebuilt_etc { name: "privapp_whitelist_se.hellsoft.myapp", system_ext_specific: true, sub_dir: "permissions", src: "se.hellsoft.myapp.xml", filename_from_src: true, }

Slide 27

Slide 27 text

Java SDK library java_sdk_library { name: "my_java_sdk_library", public: { enabled: true, }, system: { enabled: true, }, srcs: [ "src/**/*.java", ], api_packages: [ "se.hellsoft.mylib", ], }

Slide 28

Slide 28 text

Include modules in product build AndroidProduct.mk PRODUCT_PACKAGES += \ my_system_app \ my_imported_app \ my_java_sdk_library \

Slide 29

Slide 29 text

Build your new module $ cd packages/apps/my_system_app $ mma

Slide 30

Slide 30 text

Thank you for listening! speakerdeck.com/erikhellman