Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

174
Internal Library Dependency Management @KellyShuster

Transcript of Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Page 1: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Internal Library Dependency Management

@KellyShuster

Page 2: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

@KellyShuster

Page 3: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

@KellyShuster

Page 4: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 5: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 6: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 7: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

Page 8: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 9: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Git Submodules

Google’s Repo Tool

Artifactory

Jitpack

Page 10: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Git Submodules

Page 11: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

app mylibrary

Page 12: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 13: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 14: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

02-git-submodules

Page 15: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

How do you set it up?

Page 16: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git submodule add <lib-repo>

Page 17: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

Page 18: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

78c7046123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

Page 19: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample|+--.gitmodules+--dependency-sample-library

Page 20: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

[submodule "dependency-sample-library"] path = dependency-sample-library url = https://github.com/KioKrofovitch/dependency-sample-library.git

.gitmodules

Page 21: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Add Gradle References

Page 22: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

settings.gradleinclude ':app'include ':dependency-sample-library:mylibrary'

Page 23: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (app)dependencies { ...

compile project(':dependency-sample-library:mylibrary')}

Page 24: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Check Submodule Status

Page 25: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git submodule

Page 26: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 27: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 28: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 29: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

How do you get code?

Page 30: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git clone <repo> --recursive

Page 31: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git clone <repo>git submodule init

git submodule update

Page 32: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git checkout <branch>git submodule init

git submodule update

Page 33: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git checkout <branch>

Page 34: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 35: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 36: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 37: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git submodule init

Page 38: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git submodule update

Page 39: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 40: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 41: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Upstream changes

Page 42: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

git pullgit submodule update

Page 43: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Changing the library

Page 44: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 45: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ff07597123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

Page 46: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 47: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 48: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

ff07597

123ff09

fef9878

345f67e

Page 49: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Committing on a Detached Head

Page 50: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 51: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

How it happens

Page 52: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 53: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

1bd7125123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

Page 54: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 55: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 56: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

1bd7125123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

177458f

Page 57: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

1bd7125123789d

a2b789d

345a89d

678789d

dependency-sample dependency-sample-lib

177458f498defd

145458e

Page 58: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

1bd7125

177458f

498defd

145458e

Page 59: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

How to recover

Page 60: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 61: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 62: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 63: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Removing Submodules

Page 64: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 65: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 66: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

.gitmodules.git/modules

Page 67: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning brought to you by git

Page 68: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning brought to you by git

Versioning is specific and repeatable

Page 69: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning brought to you by git

Versioning is specific and repeatable

One Android Studio Project

Page 70: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning brought to you by git

Versioning is specific and repeatable

One Android Studio Project

Code access

Page 71: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsMagic is involved:

Page 72: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsMagic is involved:

Working with a detached head

Page 73: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsMagic is involved:

Working with a detached head

Pulling down latest submodule

Page 74: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsMagic is involved:

Working with a detached head

Pulling down latest submodule

Adding & tracking submodule reference

Page 75: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsMagic is involved:

Working with a detached head

Pulling down latest submodule

Adding & tracking submodule reference

Library versions are commit SHAs

Page 76: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Google’s Repo Tool

Page 77: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

app mylibrary

dependency-parent

manifest

Page 78: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 79: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

04-repo-tool

Page 80: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

How do you set it up?

Page 81: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-parent

manifest

Page 82: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... />

<default ... />

<project ... /></manifest>

Page 83: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote name="github" fetch="https://github.com" />

<default ... />

<project ... /> <project ... />

</manifest>

Page 84: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... />

<default revision="master" remote="github" />

<project ... />

</manifest>

Page 85: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... /> <default ... /> <project name="KioKrofovitch/dependency-sample"

</manifest>

Page 86: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... /> <default ... /> <project name="KioKrofovitch/dependency-sample" remote="github"

</manifest>

Page 87: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... /> <default ... /> <project name="KioKrofovitch/dependency-sample" remote="github" revision="04-repo-tool"

</manifest>

Page 88: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... /> <default ... /> <project name="KioKrofovitch/dependency-sample" remote="github" revision="04-repo-tool" path="dependency-sample"/>

</manifest>

Page 89: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... /> <default ... /> <project name="KioKrofovitch/dependency-sample" remote="github" revision="04-repo-tool" path="dependency-sample"/> <project name="KioKrofovitch/dependency-sample-library" remote="github" path="dependency-sample-library"/></manifest>

Page 90: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

default.xml<?xml version="1.0" encoding="UTF-8"?><manifest> <remote ... /> <default ... /> <project name="KioKrofovitch/dependency-sample" remote="github" revision="04-repo-tool" path="dependency-sample"/> <project name="KioKrofovitch/dependency-sample-library" remote="github" path="dependency-sample-library"/></manifest>

Page 91: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

repo init -u <parent-repo>

Page 92: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

parent|+--.repo

Page 93: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

repo sync

Page 94: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

parent|+--.repo+--dependency-sample+--dependency-sample-library

Page 95: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Add Gradle References

Page 96: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

settings.gradleinclude ':app'include ':mylibrary'

Page 97: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

settings.gradleinclude ':app'include ':mylibrary'

project(':mylibrary').projectDir = new File('../dependency-sample-library/mylibrary')

Page 98: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradledependencies {

... compile project(':mylibrary')}

Page 99: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 100: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 101: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

78c7046

dependency-sample dependency-sample-lib

123789d

Page 102: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is a “flexible” version of git

Page 103: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is a “flexible” version of git

Versions are clearly defined in one place

Page 104: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is a “flexible” version of git

Versions are clearly defined in one place

One Android Studio project

Page 105: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is a “flexible” version of git

Versions are clearly defined in one place

One Android Studio project

Code access

Page 106: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is a “flexible” version of git

Versions are clearly defined in one place

One Android Studio project

Code access

It’s cool because AOSP uses it

Page 107: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsOverkill?

Page 108: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsOverkill?

Repo + Git

Page 109: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsOverkill?

Repo + Git

Detached head++

Page 110: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsOverkill?

Repo + Git

Detached head++

Documentation / Community

Page 111: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsOverkill?

Repo + Git

Detached head++

Documentation / Community

Less repeatable builds

Page 112: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Multiple Repositories, Linked Using Maven

Page 113: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Artifactory

Page 114: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

app

Artifactory

mylibrary

Page 115: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

app mylibrary

Artifactory

Reference

Page 116: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

app

Artifactory

Publish

mylibrary

Page 117: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

03-artifactory

Page 118: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 119: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Publishing

Page 120: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 121: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (project level)buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"

// NOTE: Do not place your application dependencies here; they // belong in the individual module build.gradle files }}

Page 122: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (project level)buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"

// NOTE: Do not place your application dependencies here; they // belong in the individual module build.gradle files }}

Page 123: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)apply plugin: 'com.android.library'apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'

def packageName = 'com.kiodev.myArtLibrary'def versionMajor = '1'def versionMinor = '0'def versionPatch = '0'

def libraryVersion = "${versionMajor}.${versionMinor}.${versionPatch}"

android { … }dependencies { … }publishing { … }artifactory { … }

Page 124: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)apply plugin: 'com.android.library'apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'

def packageName = 'com.kiodev.myArtLibrary'def versionMajor = '1'def versionMinor = '0'def versionPatch = '0'

def libraryVersion = "${versionMajor}.${versionMinor}.${versionPatch}"

android { … }dependencies { … }publishing { … }artifactory { … }

Page 125: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)apply plugin: 'com.android.library'apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'

def packageName = 'com.kiodev.myArtLibrary'def versionMajor = '1'def versionMinor = '0'def versionPatch = '0'

def libraryVersion = "${versionMajor}.${versionMinor}.${versionPatch}"

android { … }dependencies { … }publishing { … }artifactory { … }

Page 126: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)apply plugin: 'com.android.library'apply plugin: 'com.jfrog.artifactory'apply plugin: 'maven-publish'

def packageName = 'com.kiodev.myArtLibrary'def versionMajor = '1'def versionMinor = '0'def versionPatch = '0'

def libraryVersion = "${versionMajor}.${versionMinor}.${versionPatch}"

android { … }dependencies { … }publishing { … }artifactory { … }

Page 127: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)publishing { publications { aar(MavenPublication) { groupId packageName version = libraryVersion artifactId project.getName()

// Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-release.aar") } }}

Page 128: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)artifactory { contextUrl = 'http://localhost:8081/artifactory' publish { repository { ... }

defaults { ... } }}

Page 129: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)artifactory { contextUrl = 'http://localhost:8081/artifactory' publish { repository { // The Artifactory repository key to publish to repoKey = 'libs-release-local'

// Defined in gradle.properties username = artifactory_user password = artifactory_password } defaults { … } }}

Page 130: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (mylibrary)artifactory { contextUrl = 'http://localhost:8081/artifactory' publish { repository { ... } defaults { // Tell the Artifactory Plugin which artifacts to publish publications('aar') publishArtifacts = true

// Properties to be attached to the published artifacts. properties = ['qa.level': 'basic', 'dev.team': 'core'] // Publish generated POM files to Artifactory (true by default) publishPom = true } }}

Page 131: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

gradle assemble artifactoryPublish

Page 132: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 133: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Referencing

Page 134: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (project level)allprojects { repositories { jcenter()

maven { url "http://localhost:8081/artifactory/libs-release-local" // Defined in gradle.properties credentials { username = artifactory_user password = artifactory_password } } }}

Page 135: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (app)android { … }

dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1'

compile(group: 'com.kiodev.myArtLibrary', name: 'mylibrary', version: '1.0.0', ext: 'aar')}

Page 136: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (app)android { … }

dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1'

compile(group: 'com.kiodev.myArtLibrary', name: 'mylibrary', version: '1.0.0', ext: 'aar')}

Page 137: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

gradle build --refresh-dependencies

Page 138: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 139: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 140: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Github

Code changes & commits

Page 141: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Github Github

Code changes & commits

Pull request& merge

Page 142: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Github Github Artifactory

Code changes & commits

Pull request& merge Publish

Page 143: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Github Artifactory

Code changes

Publish

Page 144: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is human readable / determined

Page 145: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is human readable / determined

Benefits of JAR / AAR

Page 146: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning is human readable / determined

Benefits of JAR / AAR

Potential to be highly automated

Page 147: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsVersioning has zero tie to git

Page 148: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsVersioning has zero tie to git

Low security

Page 149: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsVersioning has zero tie to git

Low security

2 Android Studio Projects

Page 150: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsVersioning has zero tie to git

Low security

2 Android Studio Projects

Stepping through code is harder

Page 151: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsVersioning has zero tie to git

Low security

2 Android Studio Projects

Stepping through code is harder

Extra step of publishing

Page 152: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Jitpack

Page 153: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

dependency-sample dependency-sample-lib

app

Jitpack

mylibrary

Page 154: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Page 155: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

05-jitpack

Page 156: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (project level)allprojects { repositories { jcenter()

maven { url "https://jitpack.io" credentials { username authToken } } }}

Page 157: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (project level)allprojects { repositories { jcenter()

maven { url "https://jitpack.io" credentials { username authToken } } }}

Page 158: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (app level)dependencies { ... compile 'com.github.User:repo:version'}

Page 159: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

build.gradle (app level)dependencies { compile

'com.github.KioKrofovitch: dependency-sample-library: 02-git-submodules-SNAPSHOT'

}

Page 160: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

<tag>-SNAPSHOT

<branch>-SNAPSHOT<short commit SHA>

Page 161: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

gradle build --refresh-dependencies

Page 162: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning:

Human readable AND managed by Git

Page 163: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning:

Human readable AND managed by Git

Benefits of JAR / AAR

Page 164: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ProsVersioning:

Human readable AND managed by Git

Benefits of JAR / AAR

No publishing stress

Page 165: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsWaiting for publishing

Page 166: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsWaiting for publishing

Potential for non-repeatable builds

Page 167: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsWaiting for publishing

Potential for non-repeatable builds

2 Android Studio Projects

Page 168: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ConsWaiting for publishing

Potential for non-repeatable builds

2 Android Studio Projects

Stepping through code is harder

Page 169: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Git Submodules

Google’s Repo Tool

Artifactory

Jitpack

Page 170: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

@KellyShuster

https://github.com/KioKrofovitch/

dependency-sampledependency-sample-library

dependency-parent

Page 171: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

ResourcesGit submodulehttps://git-scm.com/docs/git-submodule https://git-scm.com/book/en/v2/Git-Tools-Submodules

Repo Toolhttp://www.instructables.com/id/Using-Googles-repo-command-in-your-own-projects/ Artifactory Open Sourcehttps://www.jfrog.com/open-source/

Artifactory Professionalhttps://www.jfrog.com/artifactory/

Artifactory OS Tutorialhttps://jeroenmols.github.io/blog/2015/08/06/artifactory/

Page 172: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Photo CreditsAndroid Robothttps://commons.wikimedia.org/wiki/File:Android_robot.svg

Trinity College Libraryhttps://en.wikipedia.org/wiki/Trinity_College,_Dublin#/media/File:Long_Room_Interior,_Trinity_College_Dublin,_Ireland_-_Diliff.jpg

Rubyhttp://nicholasjohnson.com/ruby/

Clean Deskhttp://www.levo.com/articles/career-advice/what-your-desk-says-about-you

Messy Deskhttp://www.telegraph.co.uk/news/newstopics/howaboutthat/10225664/Having-a-messy-desk-makes-you-more-creative.html

Headless Horseman Gifhttps://www.lovethisgif.com/tag/headless+horseman

Ghosthttp://38.media.tumblr.com/d30fe069cc48e11eeb31ae08293a159e/tumblr_nbtdxg9d6n1szf0nzo1_250.gif

Page 173: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Photo CreditsNeverending Story Bookhttp://www.dailyrecord.co.uk/entertainment/tv-radio/flashback-friday-neverending-story-proves-4948514

Unicorn w/ Rainbowshttp://souloftruth.com/the-race-to-nowhere/

John Wayne http://patch.com/california/sanclemente/best-ways-recycle-water-during-californias-dry-spell

Space Pichttp://wallpapershidef.com/outer-space-desktop-wallpaper.html

Computerhttps://commons.wikimedia.org/wiki/File:Gnome-computer.svg

Crying Pikachuhttp://gifrific.com/wp-content/uploads/2012/06/Picachu-crying-pokemon.gif

Branchhttp://townhack.github.io/git-101/img/git-branch.png

Page 174: Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)

Photo CreditsMaven Logohttps://commons.wikimedia.org/wiki/File:Maven_logo.svg