$30 off During Our Annual Pro Sale. View Details »

Journey of APK from compilation to installation

Amanjeet Singh
September 30, 2018

Journey of APK from compilation to installation

Amanjeet Singh

September 30, 2018
Tweet

More Decks by Amanjeet Singh

Other Decks in Technology

Transcript

  1. View Slide

  2. Destination:

    View Slide

  3. - “Sometimes its the journey that teaches you a lot about your
    destination.”
    Destination:

    View Slide

  4. Bon Voyage!!
    • Aim: To compile your Android Code.
    • Material required: Java files, AndroidManifest.xml, resources,
    assets(optional)
    • Procedure:
    Step 1: Your .java files or .kt files gets converted to .class files that
    is the ByteCode through “javac” or “kotlinc” command.

    View Slide

  5. MainActivity.java File:
    MainActivity.class
    ByteCode:

    View Slide

  6. ByteCode Execution of: c = 2 * (a+b)
    • iConst 2

    • iLoad a

    • iLoad b

    • iAdd

    • iMul

    • iStore c
    a
    b
    42
    7
    C 0 2

    View Slide

  7. ByteCode Execution of: c = 2 * (a+b)
    • iConst 2

    • iLoad a

    • iLoad b

    • iAdd

    • iMul

    • iStore c
    a
    b
    42
    7
    C 0 2
    42

    View Slide

  8. ByteCode Execution of: c = 2 * (a+b)
    • iConst 2

    • iLoad a

    • iLoad b

    • iAdd

    • iMul

    • iStore c
    a
    b
    42
    7
    C 0 2
    42
    7

    View Slide

  9. ByteCode Execution of: c = 2 * (a+b)
    • iConst 2

    • iLoad a

    • iLoad b

    • iAdd

    • iMul

    • iStore c
    a
    b
    42
    7
    C 0 2
    49

    View Slide

  10. ByteCode Execution of: c = 2 * (a+b)
    • iConst 2

    • iLoad a

    • iLoad b

    • iAdd

    • iMul

    • iStore c
    a
    b
    42
    7
    C 0 98

    View Slide

  11. ByteCode Execution of: c = 2 * (a+b)
    • iConst 2

    • iLoad a

    • iLoad b

    • iAdd

    • iMul

    • iStore c
    a
    b
    42
    7
    C 98

    View Slide

  12. • Android does not use this .class file directly. Android has its own
    byte code format and its own virtual machine that is Dalvik Virtual
    Machine.
    • Multiple .class files or class files from any .jar file gets converted to
    a single classes.dex file.
    • Dx tool from the build platform tools inside Android SDK converts
    multiple .class files into single classes.dex .

    View Slide

  13. MainActivity.dex
    MainActivity.java
    Dx:
    --dex --output MainActivity.dex

    View Slide

  14. Dalvik code of int foo = 1+2
    const-1 r0 1
    foo
    Dest Arg0 Arg1

    View Slide

  15. Dalvik code of int foo = 1+2
    const-1 r0 1
    add-int/lit8 r1
    Foo
    Arg1
    Arg0
    Dest

    View Slide

  16. Dalvik code of int foo = 1+2
    const-1 r0 1
    add-int/lit8 r1
    Foo
    r0 2
    Dest Arg0 Arg1

    View Slide

  17. Dalvik code of int foo = 1+2
    const-1 r0 1
    add-int/lit8 r1
    Foo
    r0 2
    1
    Dest Arg0 Arg1

    View Slide

  18. Dalvik code of int foo = 1+2
    const-1 r0 1
    add-int/lit8 r1
    Foo
    r0 2
    1 1+2
    Dest Arg0 Arg1

    View Slide

  19. Building a story from Why?
    - “The art and science of asking questions is the source of all
    knowledge. The more you ask the more you know”
    • Why does Android not use .class files?
    • Why does Android not use JVM?

    View Slide

  20. Types of Virtual Machine
    • Virtual machine is a software environment that can be an
    emulator, an operating system or complete hardware
    virtualization, that has implementation of resources without the
    actual hardware.
    • Two types of VM on basis of architecture: Stack Based
    architecture and Register Based Architecture.

    View Slide

  21. Types of Virtual Machine
    • Virtual machine is a software environment that can be an emulator,
    an operating system or complete hardware virtualization, that has
    implementation of resources without the actual hardware.
    • Two types of VM on basis of architecture: Stack Based architecture
    and Register Based Architecture.
    • And yes, from previous examples you guessed right:
    JVM: Stack Based Architecture
    DVM: Register Based Architecture

    View Slide

  22. Let’s look numbers
    • Study on different VM shows that register based architecture requires an 47% less
    executed VM instructions than stack based.
    • Register based code is 25% larger in code size than the corresponding stack based
    code but this overall effects around 1.05% on load of VM.
    • So overall performance is that Dalvik VM is taking 32.3 % less time to execute
    standard benchmarks.
    • Licensing issues from Sun side which also led to have conflicts and thus Android
    took another VM.
    • Used because of memory limitations, reduce system overhead, redundancies and
    bringing optimization to .class files.
    - And you will have the answer to WHY?
    1
    2 3
    Dalvik VM
    JVM

    View Slide

  23. .class
    .
    .
    .
    .
    .
    .
    .
    .
    .class
    .class
    .class
    .
    .

    View Slide

  24. .class
    .
    .
    .
    .
    .
    .
    .
    .
    .class
    .class
    .class
    .
    .
    classes.dex

    View Slide

  25. Step 2: Resources Prepared
    • Drawables (all dpis: xxhdpi, mdpi, xhdpi, hdpi)

    • Layout files

    • Menu files (optional)

    • Anim folder

    • raw

    • Color

    • Styles

    View Slide

  26. Putting it all together
    • Material 3: Android asset Packaging Tool.
    • It allows to create, update zip compatible archive (apk,
    zip, jar). It can also compile resources into binary assets.
    • Printing permissions, printing resources, print
    configurations supported.
    • Step 3: aapt zip classes.dex, resources and
    AndroidManifest.xml into a zip archive called APK.

    View Slide

  27. The Final picture to the APK

    View Slide

  28. Installation
    Dalvik ART
    ???

    View Slide

  29. Dalvik
    • Based on JIT (Just in Time) Compilation
    • Every time your app runs, part of code important for its execution is going to be
    translated to machine code at that moment. Further caching while app is running.
    • DEX to ODEX conversion and copy to dalvik-cache.
    • Optimizations:
    • Replace method index with vtable index
    • Replace field index with byte offset
    • Replacement with inline calls
    • Cut Empty methods

    View Slide

  30. ART: The next level
    • Based on AOT (Ahead of time) compilation.
    • Perform dex2oat to have a elf file.
    • Solved garbage collection issues.
    • Improved battery performance as power to interpret line
    by line is saved.

    View Slide

  31. Installation Picture

    View Slide

  32. Thank you !

    View Slide