Slide 1

Slide 1 text

@MOLSJEROEN MIGRATING TO ANDROID STUDIO 3.0

Slide 2

Slide 2 text

@MOLSJEROEN @MOLSJEROEN

Slide 3

Slide 3 text

@MOLSJEROEN CONTENTS ▸ Dependency configurations ▸ Google Maven repository ▸ Build variants in modules ▸ Android Studio 3.0 features

Slide 4

Slide 4 text

@MOLSJEROEN CONTENTS ▸ Dependency configurations ▸ Google Maven repository ▸ Build variants in modules ▸ Android Studio 3.0 features

Slide 5

Slide 5 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS

Slide 6

Slide 6 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS

Slide 7

Slide 7 text

@MOLSJEROEN dependencies {
 
 compile 'com.jeroenmols:moduleB:1.0.0'
 } OLD DEPENDENCY CONFIGURATIONS

Slide 8

Slide 8 text

@MOLSJEROEN dependencies {
 
 compile 'com.jeroenmols:moduleB:1.0.0'
 } ▸ Code change 1. Implementation change: internal to module 2. ABI change: exposed to consumers, api change OLD DEPENDENCY CONFIGURATIONS

Slide 9

Slide 9 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS - IMPLEMENTATION CHANGE

Slide 10

Slide 10 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

Slide 11

Slide 11 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

Slide 12

Slide 12 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

Slide 13

Slide 13 text

@MOLSJEROEN OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

Slide 14

Slide 14 text

@MOLSJEROEN dependencies {
 
 compile ‘com.jeroenmols:myawesomelibrary:1.0.0’ // only recompile this module
 implementation ‘com.jeroenmols:myawesomelibrary:1.0.0’ // recompile this module and all modules using this one
 api ‘com.jeroenmols:myawesomelibrary:1.0.0’
 } NEW DEPENDENCY CONFIGURATIONS

Slide 15

Slide 15 text

@MOLSJEROEN dependencies {
 
 compile ‘com.jeroenmols:myawesomelibrary:1.0.0’ // only recompile this module
 implementation ‘com.jeroenmols:myawesomelibrary:1.0.0’ // recompile this module and all modules using this one
 api ‘com.jeroenmols:myawesomelibrary:1.0.0’
 } NEW DEPENDENCY CONFIGURATIONS

Slide 16

Slide 16 text

@MOLSJEROEN dependencies {
 
 compile ‘com.jeroenmols:myawesomelibrary:1.0.0’ // only recompile this module
 implementation ‘com.jeroenmols:myawesomelibrary:1.0.0’ // recompile this module and all modules using this one
 api ‘com.jeroenmols:myawesomelibrary:1.0.0’
 } NEW DEPENDENCY CONFIGURATIONS

Slide 17

Slide 17 text

@MOLSJEROEN dependencies {
 
 implementation ‘com.jeroenmols:myawesomelibrary:1.0.0’
 } NEW DEPENDENCY CONFIGURATIONS

Slide 18

Slide 18 text

@MOLSJEROEN NEW DEPENDENCY CONFIGURATIONS - IMPLEMENTATION

Slide 19

Slide 19 text

@MOLSJEROEN dependencies {
 
 api ‘com.jeroenmols:myawesomelibrary:1.0.0’
 } NEW DEPENDENCY CONFIGURATIONS

Slide 20

Slide 20 text

@MOLSJEROEN NEW DEPENDENCY CONFIGURATIONS - API

Slide 21

Slide 21 text

@MOLSJEROEN MIGRATE DEPENDENCY CONFIGURATIONS ▸ Replace all compile with implementation ▸ Use api where you leak a module’s interface ▸ Replace provided configuration with compileOnly ▸ Replace apk configuration with runtimeOnly ▸ Other variants: debugApi, testImplementation

Slide 22

Slide 22 text

@MOLSJEROEN CONTENTS ▸ Dependency configurations ▸ Google Maven repository ▸ Build variants in modules ▸ Android Studio 3.0 features

Slide 23

Slide 23 text

@MOLSJEROEN MAVEN REPOSITORY buildscript {
 ...
 
 dependencies {
 maven { url 'https://maven.google.com' }
 }
 }
 
 allprojects {
 repositories {
 maven { url 'https://maven.google.com' }
 }
 }

Slide 24

Slide 24 text

@MOLSJEROEN MAVEN REPOSITORY buildscript {
 ...
 
 dependencies {
 maven { url 'https://maven.google.com' }
 }
 }
 
 allprojects {
 repositories {
 maven { url 'https://maven.google.com' }
 }
 }

Slide 25

Slide 25 text

@MOLSJEROEN MAVEN REPOSITORY buildscript {
 ...
 
 dependencies {
 maven { url 'https://maven.google.com' }
 }
 }
 
 allprojects {
 repositories {
 maven { url 'https://maven.google.com' }
 }
 }

Slide 26

Slide 26 text

@MOLSJEROEN CONTENTS ▸ Dependency configurations ▸ Google Maven repository ▸ Build variants in modules ▸ Android Studio 3.0 features

Slide 27

Slide 27 text

@MOLSJEROEN OLD BUILD VARIANTS IN MODULES dependencies {
 flav1Compile project(path: ':lib1', configuration: 'flav1Release')
 flav2Compile project(path: ':lib1', configuration: 'flav2Release')
 }

Slide 28

Slide 28 text

@MOLSJEROEN OLD BUILD VARIANTS IN MODULES dependencies {
 flav1Compile project(path: ':lib1', configuration: 'flav1Release')
 flav2Compile project(path: ':lib1', configuration: 'flav2Release')
 } android {
 publishNonDefault true
 }


Slide 29

Slide 29 text

@MOLSJEROEN NEW BUILD VARIANTS IN MODULES ▸ Automatic variant matching ▸ Explicitly add every flavor to a dimension flavorDimensions "color"
 
 productFlavors {
 red {
 dimension "color"
 ...
 }
 }

Slide 30

Slide 30 text

@MOLSJEROEN NEW BUILD VARIANTS IN MODULES ▸ Automatic variant matching ▸ Explicitly add every flavor to a dimension flavorDimensions "color"
 
 productFlavors {
 red {
 dimension "color"
 ...
 }
 }

Slide 31

Slide 31 text

@MOLSJEROEN NEW BUILD VARIANTS IN MODULES ▸ Automatic variant matching ▸ Explicitly add every flavor to a dimension dependencies {
 
 debugCompile project(path: ':foo', configuration: 'debug')
 
 implementation project(':foo')
 
 debugImplementation 'com.example.android:app-magic:12.3'
 }

Slide 32

Slide 32 text

@MOLSJEROEN NEW BUILD VARIANTS IN MODULES ▸ Automatic variant matching ▸ Explicitly add every flavor to a dimension dependencies {
 
 debugCompile project(path: ':foo', configuration: 'debug')
 
 implementation project(':foo')
 
 debugImplementation 'com.example.android:app-magic:12.3'
 }

Slide 33

Slide 33 text

@MOLSJEROEN NEW BUILD VARIANTS IN MODULES ▸ Automatic variant matching ▸ Explicitly add every flavor to a dimension dependencies {
 
 debugCompile project(path: ':foo', configuration: 'debug')
 
 implementation project(':foo')
 
 debugImplementation 'com.example.android:app-magic:12.3'
 }

Slide 34

Slide 34 text

@MOLSJEROEN CONTENTS ▸ Dependency configurations ▸ Google Maven repository ▸ Build variants in modules ▸ Android Studio 3.0 features

Slide 35

Slide 35 text

@MOLSJEROEN ANDROID 3.0 FEATURES

Slide 36

Slide 36 text

@MOLSJEROEN DEVICE FILE EXPLORER ▸ adb exec-out run-as package.name cat databases/file > file

Slide 37

Slide 37 text

@MOLSJEROEN APK ANALYZER SUPPORTS PROGUARD

Slide 38

Slide 38 text

@MOLSJEROEN INSTANT APPS

Slide 39

Slide 39 text

@MOLSJEROEN NEW PROFILERS

Slide 40

Slide 40 text

@MOLSJEROEN NEW PROFILERS

Slide 41

Slide 41 text

@MOLSJEROEN NEW PROFILERS

Slide 42

Slide 42 text

@MOLSJEROEN NEW PROFILERS

Slide 43

Slide 43 text

@MOLSJEROEN NEW FEATURES ▸ Adaptive icon wizard ▸ Xml and downloadable font supports ▸ Android things support ▸ Faster builds ▸ Improvements to layout editor ▸ Improvements to layout inspector ▸ …

Slide 44

Slide 44 text

@MOLSJEROEN MANY THANKS ▸ Jeroen Mols (Belgium) ▸ @MolsJeroen ▸ http://jeroenmols.com/blog