Slide 1

Slide 1 text

&YQMPSJOHUIF "OESPJE5SBOTGPSN"1* .BSDFM4DIOFMMF !NBSDFMTDIOFMMF

Slide 2

Slide 2 text

"(1FNCSBDFE+BWB

Slide 3

Slide 3 text

public static void main(String[] args) { process(i -> System.out.println(i + " is the answer!")); } private static void process(IntConsumer consumer) { consumer.accept(42); } class MyProgram { } interface IntConsumer { void accept(int value); }

Slide 4

Slide 4 text

interface IntConsumer { void accept(int value); } class MyProgram { private static void process(IntConsumer consumer) { consumer.accept(42); } public static void main(String[] args) { process(i -> System.out.println(i + " is the answer!")); } } #FGPSF"(1 Uncaught translation error: com.android.dx.cf.code.SimException: ERROR in MyProgram.main:([Ljava/lang/String;)V: invalid opcode ba - invokedynamic requires --min-sdk-version >= 26 (currently 19) 1 error; aborting BUILD FAILED in 1s

Slide 5

Slide 5 text

interface IntConsumer { void accept(int value); } class MyProgram { private static void process(IntConsumer consumer) { consumer.accept(42); } public static void main(String[] args) { process(i -> System.out.println(i + " is the answer!")); } } 8JUI"(1 BUILD SUCCESSFUL in 1s

Slide 6

Slide 6 text

#VUIPXEPFTJUXPSL

Slide 7

Slide 7 text

l%FTVHBSJOHz 3FXSJUJOH+BWBCZUFDPEFUPCF DPNQBUJCMFXJUI+BWB3VOUJNFT 3FUSPMBNCEB %Y%FTVHBS 5SBOTGPSN %%FTVHBS #VJMUJO +BDL5PPMDIBJO

Slide 8

Slide 8 text

%FTVHBSJOH XJUIEY  JTBOFYBNQMFPGBTransform

Slide 9

Slide 9 text

App Sources Library Sources javac/kotlinc Transforms dx/D8

Slide 10

Slide 10 text

Transforms Instant Run ProGuard Java Resource Merging Retrolambda dx Desugar Dex Archive Jetifier Realm ...

Slide 11

Slide 11 text

"TransformJTOPU BO"OOPUBUJPO1SPDFTTPS

Slide 12

Slide 12 text

"TransformDBONBOJQVMBUFFH +BWBCZUFDPEFPSSFTPVSDFGJMFT  BNPOHPUIFST "O"OOPUBUJPO1SPDFTTPS HFOFSBUFTOFXTPVSDFDPEF ≠

Slide 13

Slide 13 text

$SFBUJOHBTransform  $SFBUFbuildSrcNPEVMF  "EEEFQFOEFODZPOcom.android.tools.build:gradle-api  $SFBUFBDMBTTFYUFOEJOHTransform  *NQMFNFOUZPVSUSBOTGPSN FHVTJOH+BWBTTJTU"1*   *OUIFBQQ`TCVJMEHSBEMF SFHJTUFSUIFUSBOTGPSN android.registerTransform

Slide 14

Slide 14 text

Transform"1*  fun getName(): String
 6OJRVFJEFOUJpFSPGUIFTransform  fun isIncremental(): Boolean
 (FUBMMDMBTTpMFTPSKVTUBEJ⒎PGDIBOHFEpMFT  fun getInputTypes(): Set
 $MBTTFTPS3FTPVSDFT  fun getScopes(): MutableSet
 )PXNVDIEFUBJM

Slide 15

Slide 15 text

Transform#transform(TransformInvocation)  inputs: Collection
 5IFpMFTNBOJQVMBUFECZUIF5SBOTGPSN  referencedInputs: Collection
 5IFpMFTOPUNBOJQVMBUFECZUIF5SBOTGPSN  secondaryInputs: Collection
 SFMBUFEUPJODSFNFOUBMQSPDFTTJOH  context: Context
 "DDFTTUPMPHHJOHCVJMEJOGP  outputProvider: TransformOutputProvider
 'BDUPSZGPSPVUQVUGPMEFSTUPXSJUFUIFSFTVMUTUP

Slide 16

Slide 16 text

&YBNQMF"1*#BDLQPSU

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

// Create an immutable list of 3 strings (Java 9) List values = List.of("Hello", "Mr.", "Hoge"); // Create an immutable list of 3 strings (Kotlin) val values = listOf("Hello", "Mr.", "Hoge") // Create an immutable list of 3 strings (Java 7) List values = new ArrayList<>(3); values.add("Hello"); values.add("Mr."); values.add("Hoge"); values = Collections.unmodifiableList(values);

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

1SPCMFN"OESPJEEPFTO`UTVQQPSU+BWBZFU

Slide 21

Slide 21 text

)BDLJOH+BWB"1*TJOUPBOESPJEKBS  $PQZplatforms/android-28BOESFOBNFUPplatforms/android-1000  3FQMBDFNFOUJPOTPG"1*-FWFMXJUIpackage.xml, build.prop, source.properties  3FQMBDFjava.utilQBDLBHFJOTJEFandroid.jarXJUIDMBTTFTUBLFOGSPN +%,jar uf   6QEBUFbuild.gradleUPQPJOUUPandroid-1000JOTUFBE  (SBEMF4ZOD  8FIBWFUIF+BWB"1*TOPX  *EJTDPVSBHFNBOJQVMBUJPOPGUIF"OESPJE1MBUGPSNMJLFUIJT EFNPOTUSBUJPOPOMZ/FWFSCVJMEBHBJOTUBNPOLFZQBUDIFE+"3

Slide 22

Slide 22 text

-FU`TXSJUFBTransform

Slide 23

Slide 23 text

%FNP5JNF

Slide 24

Slide 24 text

IUUQTHJUIVCDPNNBOOPEFSNBVTUSBOTGPSNGVO IUUQTHJUIVCDPNFWBOUHSBEMFSFUSPMBNCEBCMPCNBTUFSHSBEMFSFUSPMBNCEBTSDNBJOHSPPWZNFUBUBSLB IUUQTHJUIVCDPNSFBMNSFBMNKBWBUSFFNBTUFSSFBMNUSBOTGPSNFSTSDNBJOLPUMJOJPSFBMNUSBOTGPSNFS IUUQTHJUIVCDPN.JDIBFM3PDLTMJHIUTBCFSUSFFEFWFMPQHSBEMFQMVHJOTSDNBJOKBWBJPNJDIBFMSPDLTMJHIUTBCFSQMVHJO

Slide 25

Slide 25 text

Ҏ্ɻ