Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AOSP Building Blocks (December 2014)

danybony
November 24, 2014

AOSP Building Blocks (December 2014)

[As seen on Droidcon NL 2014 and GDG Lyon Android UG]

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.

danybony

November 24, 2014
Tweet

More Decks by danybony

Other Decks in Technology

Transcript

  1. AOSP building blocks

    View Slide

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

    View Slide

  3. View Slide

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

    View Slide

  5. Repo and manifest
    AOSP = more than 450 repositories

    View Slide

  6. Repo and manifest
    Enter repo

    View Slide

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

    View Slide

  8. Repo and manifest


    fetch="https://android.googlesource.com/" />
    fetch="ssh://[email protected]/third_party/" />
    remote="aosp"
    sync-j="4" />







    [...]

    View Slide

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

    View Slide

  10. Repo and manifest
    path="packages/apps/Settings"
    remote="company"
    name="firmware-settings"
    revision="other_branch"
    />
    fetch="ssh://[email protected]/third_party/" />

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. AOSP Source Code
    Some examples:
    ● development
    ● frameworks
    ● packages
    ● vendor

    View Slide

  16. Edit the source
    Jack M. on Flickr

    View Slide

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

    View Slide

  18. Search the source

    View Slide

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

    View Slide

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

    View Slide

  21. @hide
    public static UserHandle getUserHandleForUser(int userId) {
    try {
    Class userHandleClass = UserHandle.class;
    Constructor 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

    View Slide

  22. Build environment
    https://source.android.com/
    source/initializing.html

    View Slide

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

    View Slide

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

    View Slide

  25. lunch
    Choose the target product and build variant
    ● eng
    ● userdebug
    ● release

    View Slide

  26. make
    export USE_CCACHE=1
    make -jX
    X = # of working threads

    View Slide

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

    View Slide

  28. Install
    In out/target/product/DEVICE_NAME/
    ● recovery.img
    ● boot.img
    ● system.img
    ● userdata.img

    View Slide

  29. Install
    adb reboot bootloader
    fastboot flashall -w

    View Slide

  30. 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

    View Slide

  31. Speeding up the dev cycle
    adb shell stop
    adb sync
    adb shell start

    View Slide

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

    View Slide

  33. Contributing to AOSP

    View Slide

  34. Questions?
    Daniele Bonaldo on G+

    View Slide

  35. We’re hiring!
    [email protected]

    View Slide