AOSP Building Blocks 2015

D4be3ad792b57408b3ab6fe98caef08e?s=47 danybony
March 08, 2015

AOSP Building Blocks 2015

[As seen on Droidcon Tunisia 2015]

Most of the Android developers are able to build awesome apps, but do we really know how the Android OS works? In some cases, as when developing a new product, adding customised apps is not enough, and OS modifications are required.
To be able to modify Android at its core, this talk will guide you through the complete process, from setting the correct environment, configuring the different Google’s repositories and downloading the source code, to understand the structure of the source code and how to modify it.

D4be3ad792b57408b3ab6fe98caef08e?s=128

danybony

March 08, 2015
Tweet

Transcript

  1. AOSP building blocks Daniele Bonaldo

  2. Daniele Bonaldo @danybony_ +DanieleBonaldo danybony Android Software Craftsman

  3. Hudl 2

  4. Repo and manifest Usually a single project = single repository

  5. Repo and manifest AOSP = more than 450 repositories

  6. Repo and manifest Enter repo

  7. Repo and manifest repo init -u http://your.company.repo/manifest -b working_branch -m

    manifest_name.xml
  8. Repo and manifest <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote name="aosp" fetch="https://android.googlesource.com/"

    /> <remote name="company" fetch="ssh://git@github.com/third_party/" /> <default revision="refs/tags/android-5.0.2_r1" remote="aosp" sync-j="4" /> <project path="build" name="platform/build" groups="pdk" /> <project path="abi/cpp" name="platform/abi/cpp" groups="pdk" /> <project path="art" name="platform/art" /> <project path="packages/apps/Settings" name="firmware-settings" remote="company" revision="other_branch" /> [...] <manifest/>
  9. Repo and manifest <project path="packages/apps/Settings" remote="company" name="firmware-settings" revision="other_branch" />

  10. Repo and manifest <project path="packages/apps/Settings" remote="company" name="firmware-settings" revision="other_branch" /> <remote

    name="company" fetch="ssh://git@github.com/third_party/" />
  11. Repo and manifest <project path="packages/apps/Settings" remote="company" name="firmware-settings" revision="other_branch" />

  12. Repo and manifest <project path="packages/apps/Settings" remote="company" name="firmware-settings" revision="other_branch" />

  13. Repo and manifest repo sync -j (--jobs)

  14. AOSP Source Code http://elinux.org/Master-android

  15. AOSP Source Code Some examples: • development • frameworks •

    packages • vendor
  16. Edit the source Jack M. on Flickr

  17. IDE ./development/tools/idegen/idegen.sh Project definition files generated in the root of

    the working dir
  18. Search the source

  19. @hide Context.sendBroadcastAsUser(Intent, UserHandle); Context.startActivityAsUser(Intent, UserHandle); Context.startServiceAsUser(Intent, UserHandle); @hide public UserHandle(int

    userId)
  20. @hide @hide public UserHandle(int userId)

  21. @hide public static UserHandle getUserHandleForUser(int userId) { try { Class<UserHandle>

    userHandleClass = UserHandle.class; Constructor<UserHandle> constructor = userHandleClass.getDeclaredConstructor(int.class); constructor.setAccessible(true); return constructor.newInstance(userId); } catch (InvocationTargetException e) { logUnableToFetchUserHandleForUser(userId, e); } catch (NoSuchMethodException e) { logUnableToFetchUserHandleForUser(userId, e); } catch (InstantiationException e) { logUnableToFetchUserHandleForUser(userId, e); } catch (IllegalAccessException e) { logUnableToFetchUserHandleForUser(userId, e); } return null; } REFLECTION
  22. Build environment https://source.android.com/ source/initializing.html

  23. Mac OS X build environment Case-sensitive disk image Chris McVeigh

    on Flickr
  24. source build/envsetup.sh Setting up the build environment Check for missing

    dependencies
  25. lunch Choose the target product and build variant • eng

    • userdebug • release
  26. make export USE_CCACHE=1 make -jX X = # of working

    threads
  27. Build for devices Additional proprietary libraries required Placed under vendor/

  28. Build for devices Nexus binaries https://developers.google.com/android/nexus/drivers

  29. Install In out/target/product/DEVICE_NAME/ • recovery.img • boot.img • system.img •

    userdata.img
  30. Install adb reboot bootloader fastboot flashall -w

  31. Speeding up the dev cycle make alias for single projects

    m = make from the top of the tree mm = make from the current directory mmm = make from the given directory mmma = make from the given directory WITH dependencies
  32. Speeding up the dev cycle adb shell stop adb sync

    adb shell start
  33. Include third-party apps in vendor/CompanyName/AppName/Android.mk LOCAL_PATH := $(call my-dir) include

    $(CLEAR_VARS) LOCAL_MODULE := AppName LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) include $(BUILD_PREBUILT)
  34. Include third-party apps in device/devicename/device.mk PRODUCT_PACKAGES += \ AppName

  35. Contributing to AOSP https://source.android.com/ source/contributing.html

  36. Contributing to AOSP

  37. Daniele Bonaldo @danybony_ +DanieleBonaldo danybony Android Software Craftsman Questions?