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

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. None
  2. Destination:

  3. - “Sometimes its the journey that teaches you a lot

    about your destination.” Destination:
  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.
  5. MainActivity.java File: MainActivity.class ByteCode:

  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
  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
  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
  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
  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
  11. ByteCode Execution of: c = 2 * (a+b) • iConst

    2 • iLoad a • iLoad b • iAdd • iMul • iStore c a b 42 7 C 98
  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 .
  13. MainActivity.dex MainActivity.java Dx: --dex --output MainActivity.dex <Input Class file>

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

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

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

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

    add-int/lit8 r1 Foo r0 2 1 Dest Arg0 Arg1
  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
  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?
  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.
  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
  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
  23. .class . . . . . . . . .class

    .class .class . .
  24. .class . . . . . . . . .class

    .class .class . . classes.dex
  25. Step 2: Resources Prepared • Drawables (all dpis: xxhdpi, mdpi,

    xhdpi, hdpi) • Layout files • Menu files (optional) • Anim folder • raw • Color • Styles
  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.
  27. The Final picture to the APK

  28. Installation Dalvik ART ???

  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
  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.
  31. Installation Picture

  32. Thank you !