meet jack & jill

33
@mgrzechocinski Meet Jack&Jill 1

Upload: mateusz-grzechocinski

Post on 15-Jul-2015

517 views

Category:

Technology


2 download

TRANSCRIPT

@mgrzechocinski

Meet Jack&Jill

1

@mgrzechocinski 2

“Jack and Jill went up the hillTo fetch a pail of water.Jack fell down and broke his crown,And Jill came tumbling after.”

English nursery rhyme, 1786

@mgrzechocinski

Mateusz Grzechociński

3

@mgrzechocinski

http://gradleware.com

@mgrzechocinski

classpath 'com.android.tools.build:gradle:1.1.0-rc1'

4

@mgrzechocinski 5

@mgrzechocinski 6

@mgrzechocinski 7

dependencies({(((((compile('com.android.support:appcompat#v7:21.0.3'(((((compile('com.squareup.picasso:picasso:2.4.0'(((((compile('com.jakewharton:butterknife:6.1.0'(((((compile('com.octo.android.robospice:robospice:1.4.14'(((((compile('com.octo.android.robospice:robospice#retrofit:1.4.14'(((((compile('com.octo.android.robospice:robospice#ormlite:1.4.14'(((((compile('com.getbase:floatingactionbutton:1.3.0'(((((compile('fr.baloomba:viewpagerindicator:2.4.2'(((((compile('com.google.dagger:dagger:2.0#SNAPSHOT'(((((compile('com.android.support:cardview#v7:21.0.3'(((((compile('com.android.support:recyclerview#v7:21.0.3'(((((compile('io.reactivex:rxandroid:0.24.0'(((((compile('com.jakewharton.timber:timber:2.5.0'(((((compile('org.parceler:parceler#api:0.2.15'(((((compile('me.tatarka.support:jobscheduler:0.1.1'(((((compile('se.emilsjolander:stickylistheaders:2.5.2'(((((compile('com.nispok:snackbar:2.7.5'(((((compile('de.keyboardsurfer.android.widget:crouton:1.8.5'(

((((apt('org.parceler:parceler:0.2.15'(((((apt('org.projectlombok:lombok:1.14.8'(((((apt('com.google.dagger:dagger#compiler:2.0#SNAPSHOT'(

((((provided('org.glassfish:javax.annotation:10.0#b28'(((((provided('org.projectlombok:lombok:1.14.8'(}(

@mgrzechocinski 8

http://goo.gl/1Vskx1

@mgrzechocinski

Android WorldJava World

9

Dalvik.bytecode.

(classes.dex)javac dx

Java.source.code.(*.java)

Java.byte.code.(*.class)

On.to.APK

@mgrzechocinski

Java World Android World

10

Java.source.code.(*.java)

Java.byte.code.(*.class)

Optimised.Shrunk.

Obfuscated.

Dalvik.bytecode.classes.dex.Libraries.

(*.class./.*.jar)

javac

ProGuard

Optimised.Shrunk.

Obfuscated.

.Java.bytecode.(*.class).

dx

Config Mapping

On.to.APK

@mgrzechocinski

JavaAndroidCompiler Kit

11

@mgrzechocinski

Java World Android World

12

Java.source.code.(*.java)

Dalvik.bytecode.

(classes.dex)JACK On.to.

APK

ProGuardConfig

ProGuardMapping

@mgrzechocinski

Jill

13

@mgrzechocinski

JackIntermediateLlibraryLinker

14

@mgrzechocinski

Java World Android World

15

Library.modules.(*.java)

Jack.intermediate.bytecode.(*.jayce)

JILL On.to.APKJar.

dependencies..(*.jar)

AAR.dependencies..

(*.aar)

JACKDalvik.

bytecode.(classes.dex)

@mgrzechocinski

JACK RESPONSIBILITIES

CompilingMinificationRepackagingMultidexingIncremental compilationAll in one shot!

16

@mgrzechocinski

JILL RESPONSIBILITIESShielding JACK from Java byte code

17

@mgrzechocinski

How to use it ?

18

@mgrzechocinski

PREREQUISITES

Build tools 21.1.0+Gradle plugin 1.0.0+

19

@mgrzechocinski

Gradle

20

buildTypes({(((((((((experimental.initWith(buildTypes.debug)(((((((((experimental({(((((((((((((//"Enable"the"experimental"Jack"build"tools."((((((((((((//"Only"for"application"projects"(((((((((((+useJack+=+true+((((((((((((minifyEnabled(true(((((((((}(}

@mgrzechocinski

ANT

21

<ANDROID_HOME>/build-tools/21.1.0/jill.jar

<ANDROID_HOME>/build-tools/21.1.0/jack.jar

@mgrzechocinski 22

@mgrzechocinski

CLEAN BUILD$ gradle —daemon assemble[Debug|Experimental]

23

Debug

Experimental

0.s 4,25.s 8,5.s 12,75.s 17.s

without.Proguard with.ProGuard

@mgrzechocinski

REBUILD AFTER CHANGE//change one line of code $ gradle —daemon assemble[Debug|Experimental]

24

Debug

Experimental

0.s 4,25.s 8,5.s 12,75.s 17.s

without.Proguard with.Proguard

@mgrzechocinski

REBUILD W/O CHANGES$ gradle —daemon assemble[Debug|Experimental]

25

Debug

Experimental

0.s 4,25.s 8,5.s 12,75.s 17.s

without.Proguard with.Proguard

@mgrzechocinski

UNDER THE HOOD

ProGuard supportandroid.jarclasses.zip

26

@mgrzechocinski

ProGuard supportor rather ProGuard config/mapping support?

27

WARNING: com.android.jack.shrob.proguard.GrammarActions: Proguard flag is not supported: -dontskipnonpubliclibraryclassesWARNING: com.android.jack.shrob.proguard.GrammarActions: Proguard flag is not supported: -verboseWARNING: com.android.jack.shrob.proguard.GrammarActions: Proguard flag is not supported: -dontwarn android.support.**

@mgrzechocinski

classes.zip$ unzip -l app/build/intermediates/classes/experimental/classes.zip

28

Archive: app/build/intermediates/classes/experimental/classes.zip Length Date Time Name -------- ---- ---- ---- 885 02-04-15 03:05 net/grzechocinski/android/stack/MainActivity.jayce 249 02-04-15 03:05 jack.properties -------- ------- 1134

@mgrzechocinski

android.jar$ unzip -l app/build/intermediates/jill/experimental/runtime/android-b71ed217f6b570078ce4d6986605254dc4652c57.jar

29

[…] 1628 02-04-15 03:05 dalvik/system/DexClassLoader.jayce 2810 02-04-15 03:05 dalvik/system/PathClassLoader.jayce 4112 02-04-15 03:05 dalvik/system/BaseDexClassLoader.jayce 487 02-04-15 03:05 dalvik/annotation/TestTargetClass.jayce 590 02-04-15 03:05 dalvik/annotation/TestTarget.jayce -------- ------- 41307409 10624 files

@mgrzechocinski

LIMITATIONS

Java 8 supportAnnotation processorsBytecode manipulationAST modificationsIncremental buildsProguard flags

30

@mgrzechocinski

WHY NEW COMPILER?

Combat the slownessLawsuitsOwnership of the toolchain

31

@mgrzechocinski

FUTURE

ConjecturesPotentialSomething is happeningNew language?

32

@mgrzechocinski

Mateusz Grzechociński@mgrzechocinskihttp://grzechocinski.net

Thank you

33