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

Migrating to Android Studio 3.0

Migrating to Android Studio 3.0

Slides from my talk at Dutch Android User Group in July 2017

I also have a blogpost explaining the api vs implementation dependency: https://jeroenmols.com/blog/2017/06/14/androidstudio3/

Jeroen Mols

July 06, 2017
Tweet

More Decks by Jeroen Mols

Other Decks in Programming

Transcript

  1. @MOLSJEROEN
    MIGRATING TO
    ANDROID STUDIO 3.0

    View Slide

  2. @MOLSJEROEN
    @MOLSJEROEN

    View Slide

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

    View Slide

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

    View Slide

  5. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS

    View Slide

  6. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS

    View Slide

  7. @MOLSJEROEN
    dependencies {


    compile 'com.jeroenmols:moduleB:1.0.0'

    }
    OLD DEPENDENCY CONFIGURATIONS

    View Slide

  8. @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

    View Slide

  9. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS - IMPLEMENTATION CHANGE

    View Slide

  10. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

    View Slide

  11. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

    View Slide

  12. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

    View Slide

  13. @MOLSJEROEN
    OLD DEPENDENCY CONFIGURATIONS - ABI CHANGE

    View Slide

  14. @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

    View Slide

  15. @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

    View Slide

  16. @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

    View Slide

  17. @MOLSJEROEN
    dependencies {


    implementation ‘com.jeroenmols:myawesomelibrary:1.0.0’

    }
    NEW DEPENDENCY CONFIGURATIONS

    View Slide

  18. @MOLSJEROEN
    NEW DEPENDENCY CONFIGURATIONS - IMPLEMENTATION

    View Slide

  19. @MOLSJEROEN
    dependencies {


    api ‘com.jeroenmols:myawesomelibrary:1.0.0’

    }
    NEW DEPENDENCY CONFIGURATIONS

    View Slide

  20. @MOLSJEROEN
    NEW DEPENDENCY CONFIGURATIONS - API

    View Slide

  21. @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

    View Slide

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

    View Slide

  23. @MOLSJEROEN
    MAVEN REPOSITORY
    buildscript {

    ...


    dependencies {

    maven { url 'https://maven.google.com' }

    }

    }


    allprojects {

    repositories {

    maven { url 'https://maven.google.com' }

    }

    }

    View Slide

  24. @MOLSJEROEN
    MAVEN REPOSITORY
    buildscript {

    ...


    dependencies {

    maven { url 'https://maven.google.com' }

    }

    }


    allprojects {

    repositories {

    maven { url 'https://maven.google.com' }

    }

    }

    View Slide

  25. @MOLSJEROEN
    MAVEN REPOSITORY
    buildscript {

    ...


    dependencies {

    maven { url 'https://maven.google.com' }

    }

    }


    allprojects {

    repositories {

    maven { url 'https://maven.google.com' }

    }

    }

    View Slide

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

    View Slide

  27. @MOLSJEROEN
    OLD BUILD VARIANTS IN MODULES
    dependencies {

    flav1Compile project(path: ':lib1', configuration: 'flav1Release')

    flav2Compile project(path: ':lib1', configuration: 'flav2Release')

    }

    View Slide

  28. @MOLSJEROEN
    OLD BUILD VARIANTS IN MODULES
    dependencies {

    flav1Compile project(path: ':lib1', configuration: 'flav1Release')

    flav2Compile project(path: ':lib1', configuration: 'flav2Release')

    }
    android {

    publishNonDefault true

    }


    View Slide

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


    productFlavors {

    red {

    dimension "color"

    ...

    }

    }

    View Slide

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


    productFlavors {

    red {

    dimension "color"

    ...

    }

    }

    View Slide

  31. @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'

    }

    View Slide

  32. @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'

    }

    View Slide

  33. @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'

    }

    View Slide

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

    View Slide

  35. @MOLSJEROEN
    ANDROID 3.0 FEATURES

    View Slide

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

    View Slide

  37. @MOLSJEROEN
    APK ANALYZER SUPPORTS PROGUARD

    View Slide

  38. @MOLSJEROEN
    INSTANT APPS

    View Slide

  39. @MOLSJEROEN
    NEW PROFILERS

    View Slide

  40. @MOLSJEROEN
    NEW PROFILERS

    View Slide

  41. @MOLSJEROEN
    NEW PROFILERS

    View Slide

  42. @MOLSJEROEN
    NEW PROFILERS

    View Slide

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

    View Slide

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

    View Slide