SlideShare a Scribd company logo
1 of 174
Download to read offline
Internal Library
Dependency Management
@KellyShuster
@KellyShuster
@KellyShuster
dependency-sample dependency-sample-lib
Git Submodules
Google’s Repo Tool
Artifactory
Jitpack
Git Submodules
dependency-sample dependency-sample-lib
app mylibrary
02-git-submodules
How do you set it up?
git submodule add <lib-repo>
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
78c7046
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
dependency-sample
|
+--.gitmodules
+--dependency-sample-library
[submodule "dependency-sample-library"]
path = dependency-sample-library
url = https://github.com/KioKrofovitch/dependency-sample-library.git
.gitmodules
Add Gradle References
settings.gradle
include ':app'
include ':dependency-sample-library:mylibrary'
build.gradle (app)
dependencies {
...
compile project(':dependency-sample-library:mylibrary')
}
Check Submodule Status
git submodule
How do you get code?
git clone <repo> --recursive
git clone <repo>
git submodule init
git submodule update
git checkout <branch>
git submodule init
git submodule update
git checkout <branch>
git submodule init
git submodule update
Upstream changes
git pull
git submodule update
Changing the library
ff07597
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
ff07597
123ff09
fef9878
345f67e
Committing on a Detached Head
How it happens
1bd7125
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
1bd7125
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
177458f
1bd7125
123789d
a2b789d
345a89d
678789d
dependency-sample dependency-sample-lib
177458f
498defd
145458e
1bd7125
177458f
498defd
145458e
How to recover
Removing Submodules
.gitmodules
.git/modules
Pros
Versioning brought to you by git
Pros
Versioning brought to you by git
Versioning is specific and repeatable
Pros
Versioning brought to you by git
Versioning is specific and repeatable
One Android Studio Project
Pros
Versioning brought to you by git
Versioning is specific and repeatable
One Android Studio Project
Code access
Cons
Magic is involved:
Cons
Magic is involved:
Working with a detached head
Cons
Magic is involved:
Working with a detached head
Pulling down latest submodule
Cons
Magic is involved:
Working with a detached head
Pulling down latest submodule
Adding & tracking submodule reference
Cons
Magic is involved:
Working with a detached head
Pulling down latest submodule
Adding & tracking submodule reference
Library versions are commit SHAs
Google’s Repo Tool
dependency-sample dependency-sample-lib
app mylibrary
dependency-parent
manifest
04-repo-tool
How do you set it up?
dependency-parent
manifest
default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote ... />
<default ... />
<project ... />
</manifest>
default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="github"
fetch="https://github.com" />
<default ... />
<project ... />
<project ... />
</manifest>
default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote ... />
<default revision="master"
remote="github" />
<project ... />
</manifest>
default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote ... />
<default ... />
<project name="KioKrofovitch/dependency-sample"
</manifest>
default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote ... />
<default ... />
<project name="KioKrofovitch/dependency-sample"
remote="github"
</manifest>
default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote ... />
<default ... />
<project name="KioKrofovitch/dependency-sample"
remote="github"
revision="04-repo-tool"
</manifest>
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>
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>
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>
repo init -u <parent-repo>
parent
|
+--.repo
repo sync
parent
|
+--.repo
+--dependency-sample
+--dependency-sample-library
Add Gradle References
settings.gradle
include ':app'
include ':mylibrary'
settings.gradle
include ':app'
include ':mylibrary'
project(':mylibrary').projectDir
= new File('../dependency-sample-library/mylibrary')
build.gradle
dependencies {
...
compile project(':mylibrary')
}
78c7046
dependency-sample dependency-sample-lib
123789d
Pros
Versioning is a “flexible” version of git
Pros
Versioning is a “flexible” version of git
Versions are clearly defined in one place
Pros
Versioning is a “flexible” version of git
Versions are clearly defined in one place
One Android Studio project
Pros
Versioning is a “flexible” version of git
Versions are clearly defined in one place
One Android Studio project
Code access
Pros
Versioning 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
Cons
Overkill?
Cons
Overkill?
Repo + Git
Cons
Overkill?
Repo + Git
Detached head++
Cons
Overkill?
Repo + Git
Detached head++
Documentation / Community
Cons
Overkill?
Repo + Git
Detached head++
Documentation / Community
Less repeatable builds
Multiple Repositories,
Linked Using Maven
Artifactory
dependency-sample dependency-sample-lib
app
Artifactory
mylibrary
dependency-sample dependency-sample-lib
app mylibrary
Artifactory
Reference
dependency-sample dependency-sample-lib
app
Artifactory
Publish
mylibrary
03-artifactory
Publishing
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
}
}
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
}
}
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 { … }
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 { … }
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 { … }
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 { … }
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")
}
}
}
build.gradle (mylibrary)
artifactory {
contextUrl = 'http://localhost:8081/artifactory'
publish {
repository {
...
}
defaults {
...
}
}
}
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 { … }
}
}
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
}
}
}
gradle assemble artifactoryPublish
Referencing
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
}
}
}
}
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')
}
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')
}
gradle build --refresh-dependencies
Github
Code changes
& commits
Github Github
Code changes
& commits
Pull request
& merge
Github Github Artifactory
Code changes
& commits
Pull request
& merge Publish
Github Artifactory
Code changes
Publish
Pros
Versioning is human readable / determined
Pros
Versioning is human readable / determined
Benefits of JAR / AAR
Pros
Versioning is human readable / determined
Benefits of JAR / AAR
Potential to be highly automated
Cons
Versioning has zero tie to git
Cons
Versioning has zero tie to git
Low security
Cons
Versioning has zero tie to git
Low security
2 Android Studio Projects
Cons
Versioning has zero tie to git
Low security
2 Android Studio Projects
Stepping through code is harder
Cons
Versioning has zero tie to git
Low security
2 Android Studio Projects
Stepping through code is harder
Extra step of publishing
Jitpack
dependency-sample dependency-sample-lib
app
Jitpack
mylibrary
05-jitpack
build.gradle (project level)
allprojects {
repositories {
jcenter()
maven {
url "https://jitpack.io"
credentials { username authToken }
}
}
}
build.gradle (project level)
allprojects {
repositories {
jcenter()
maven {
url "https://jitpack.io"
credentials { username authToken }
}
}
}
build.gradle (app level)
dependencies {
...
compile 'com.github.User:repo:version'
}
build.gradle (app level)
dependencies {
compile
'com.github.KioKrofovitch:
dependency-sample-library:
02-git-submodules-SNAPSHOT'
}
<tag>
-SNAPSHOT
<branch>-SNAPSHOT
<short commit SHA>
gradle build --refresh-dependencies
Pros
Versioning:
Human readable AND managed by Git
Pros
Versioning:
Human readable AND managed by Git
Benefits of JAR / AAR
Pros
Versioning:
Human readable AND managed by Git
Benefits of JAR / AAR
No publishing stress
Cons
Waiting for publishing
Cons
Waiting for publishing
Potential for non-repeatable builds
Cons
Waiting for publishing
Potential for non-repeatable builds
2 Android Studio Projects
Cons
Waiting for publishing
Potential for non-repeatable builds
2 Android Studio Projects
Stepping through code is harder
Git Submodules
Google’s Repo Tool
Artifactory
Jitpack
@KellyShuster
https://github.com/KioKrofovitch/
dependency-sample
dependency-sample-library
dependency-parent
Resources
Git submodule
https://git-scm.com/docs/git-submodule
https://git-scm.com/book/en/v2/Git-Tools-Submodules
Repo Tool
http://www.instructables.com/id/Using-Googles-repo-command-in-your-own-projects/
Artifactory Open Source
https://www.jfrog.com/open-source/
Artifactory Professional
https://www.jfrog.com/artifactory/
Artifactory OS Tutorial
https://jeroenmols.github.io/blog/2015/08/06/artifactory/
Photo Credits
Android Robot
https://commons.wikimedia.org/wiki/File:Android_robot.svg
Trinity College Library
https://en.wikipedia.org/wiki/Trinity_College,_Dublin#/media/File:Long_Room_Interior,
_Trinity_College_Dublin,_Ireland_-_Diliff.jpg
Ruby
http://nicholasjohnson.com/ruby/
Clean Desk
http://www.levo.com/articles/career-advice/what-your-desk-says-about-you
Messy Desk
http://www.telegraph.co.uk/news/newstopics/howaboutthat/10225664/Having-a-messy-desk-makes-you-more-
creative.html
Headless Horseman Gif
https://www.lovethisgif.com/tag/headless+horseman
Ghost
http://38.media.tumblr.com/d30fe069cc48e11eeb31ae08293a159e/tumblr_nbtdxg9d6n1szf0nzo1_250.gif
Photo Credits
Neverending Story Book
http://www.dailyrecord.co.uk/entertainment/tv-radio/flashback-friday-neverending-story-proves-4948514
Unicorn w/ Rainbows
http://souloftruth.com/the-race-to-nowhere/
John Wayne
http://patch.com/california/sanclemente/best-ways-recycle-water-during-californias-dry-spell
Space Pic
http://wallpapershidef.com/outer-space-desktop-wallpaper.html
Computer
https://commons.wikimedia.org/wiki/File:Gnome-computer.svg
Crying Pikachu
http://gifrific.com/wp-content/uploads/2012/06/Picachu-crying-pokemon.gif
Branch
http://townhack.github.io/git-101/img/git-branch.png
Photo Credits
Maven Logo
https://commons.wikimedia.org/wiki/File:Maven_logo.svg

More Related Content

What's hot

Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginXavier Hallade
 
Android App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structureAndroid App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structureVijay Rastogi
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsHassan Abid
 
Async task, threads, pools, and executors oh my!
Async task, threads, pools, and executors oh my!Async task, threads, pools, and executors oh my!
Async task, threads, pools, and executors oh my!Stacy Devino
 
Gradle,the new build system for android
Gradle,the new build system for androidGradle,the new build system for android
Gradle,the new build system for androidzhang ghui
 
When Enterprise Java Micro Profile meets Angular
When Enterprise Java Micro Profile meets AngularWhen Enterprise Java Micro Profile meets Angular
When Enterprise Java Micro Profile meets AngularAntonio Goncalves
 
Android development with Scala and SBT
Android development with Scala and SBTAndroid development with Scala and SBT
Android development with Scala and SBTAnton Yalyshev
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Shekhar Gulati
 
Reactive Streams and RxJava2
Reactive Streams and RxJava2Reactive Streams and RxJava2
Reactive Streams and RxJava2Yakov Fain
 
Exploring the power of Gradle in android studio - Basics & Beyond
Exploring the power of Gradle in android studio - Basics & BeyondExploring the power of Gradle in android studio - Basics & Beyond
Exploring the power of Gradle in android studio - Basics & BeyondKaushal Dhruw
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversingEnrique López Mañas
 
Are app servers still fascinating
Are app servers still fascinatingAre app servers still fascinating
Are app servers still fascinatingAntonio Goncalves
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionStfalcon Meetups
 
Dagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsDagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsGlobalLogic Ukraine
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockRichard Lord
 
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobile
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobileJavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobile
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobileLoiane Groner
 

What's hot (20)

Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental pluginMastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
 
Android App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structureAndroid App development and test environment, Understaing android app structure
Android App development and test environment, Understaing android app structure
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
 
Angular beans
Angular beansAngular beans
Angular beans
 
Async task, threads, pools, and executors oh my!
Async task, threads, pools, and executors oh my!Async task, threads, pools, and executors oh my!
Async task, threads, pools, and executors oh my!
 
Gradle,the new build system for android
Gradle,the new build system for androidGradle,the new build system for android
Gradle,the new build system for android
 
When Enterprise Java Micro Profile meets Angular
When Enterprise Java Micro Profile meets AngularWhen Enterprise Java Micro Profile meets Angular
When Enterprise Java Micro Profile meets Angular
 
CDI: How do I ?
CDI: How do I ?CDI: How do I ?
CDI: How do I ?
 
Android development with Scala and SBT
Android development with Scala and SBTAndroid development with Scala and SBT
Android development with Scala and SBT
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud
 
Reactive Streams and RxJava2
Reactive Streams and RxJava2Reactive Streams and RxJava2
Reactive Streams and RxJava2
 
Di code steps
Di code stepsDi code steps
Di code steps
 
Exploring the power of Gradle in android studio - Basics & Beyond
Exploring the power of Gradle in android studio - Basics & BeyondExploring the power of Gradle in android studio - Basics & Beyond
Exploring the power of Gradle in android studio - Basics & Beyond
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversing
 
Are app servers still fascinating
Are app servers still fascinatingAre app servers still fascinating
Are app servers still fascinating
 
Dagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency InjectionDagger 2. Right way to do Dependency Injection
Dagger 2. Right way to do Dependency Injection
 
Dagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency InjectionsDagger 2. The Right Way to Dependency Injections
Dagger 2. The Right Way to Dependency Injections
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Application Frameworks: The new kids on the block
Application Frameworks: The new kids on the blockApplication Frameworks: The new kids on the block
Application Frameworks: The new kids on the block
 
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobile
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobileJavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobile
JavaOne Brasil 2016: JavaEE e HTML5: da web/desktop ao mobile
 

Viewers also liked

Evolving the Android Core with Aspects
Evolving the Android Core with AspectsEvolving the Android Core with Aspects
Evolving the Android Core with AspectsCarlo Pescio
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternFabio Collini
 
Android Internal Library Management
Android Internal Library ManagementAndroid Internal Library Management
Android Internal Library ManagementKelly Shuster
 
Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016Matteo Bonifazi
 
Crafting Great Hypotheses - Droidcon 2016
Crafting Great Hypotheses - Droidcon 2016Crafting Great Hypotheses - Droidcon 2016
Crafting Great Hypotheses - Droidcon 2016Hoang Huynh
 
A realtime infrastructure for Android apps: Firebase may be what you need..an...
A realtime infrastructure for Android apps: Firebase may be what you need..an...A realtime infrastructure for Android apps: Firebase may be what you need..an...
A realtime infrastructure for Android apps: Firebase may be what you need..an...Alessandro Martellucci
 
Add ClassyShark to your Android toolbox
Add ClassyShark to your Android toolboxAdd ClassyShark to your Android toolbox
Add ClassyShark to your Android toolboxBoris Farber
 
World-Class Testing Development Pipeline for Android
 World-Class Testing Development Pipeline for Android World-Class Testing Development Pipeline for Android
World-Class Testing Development Pipeline for AndroidPedro Vicente Gómez Sánchez
 

Viewers also liked (8)

Evolving the Android Core with Aspects
Evolving the Android Core with AspectsEvolving the Android Core with Aspects
Evolving the Android Core with Aspects
 
Data Binding in Action using MVVM pattern
Data Binding in Action using MVVM patternData Binding in Action using MVVM pattern
Data Binding in Action using MVVM pattern
 
Android Internal Library Management
Android Internal Library ManagementAndroid Internal Library Management
Android Internal Library Management
 
Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016Engage and retain users in the android world - Droidcon Italy 2016
Engage and retain users in the android world - Droidcon Italy 2016
 
Crafting Great Hypotheses - Droidcon 2016
Crafting Great Hypotheses - Droidcon 2016Crafting Great Hypotheses - Droidcon 2016
Crafting Great Hypotheses - Droidcon 2016
 
A realtime infrastructure for Android apps: Firebase may be what you need..an...
A realtime infrastructure for Android apps: Firebase may be what you need..an...A realtime infrastructure for Android apps: Firebase may be what you need..an...
A realtime infrastructure for Android apps: Firebase may be what you need..an...
 
Add ClassyShark to your Android toolbox
Add ClassyShark to your Android toolboxAdd ClassyShark to your Android toolbox
Add ClassyShark to your Android toolbox
 
World-Class Testing Development Pipeline for Android
 World-Class Testing Development Pipeline for Android World-Class Testing Development Pipeline for Android
World-Class Testing Development Pipeline for Android
 

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

20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdevFrank Rousseau
 
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsAmazon Web Services
 
Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16Rafael Dohms
 
China Science Challenge
China Science ChallengeChina Science Challenge
China Science Challengeremko caprio
 
SgCodeJam24 Workshop
SgCodeJam24 WorkshopSgCodeJam24 Workshop
SgCodeJam24 Workshopremko caprio
 
Plugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsPlugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsSadayuki Furuhashi
 
Get started with AAR
Get started with AARGet started with AAR
Get started with AARRené Mertins
 
Composer The Right Way
Composer The Right WayComposer The Right Way
Composer The Right WayRafael Dohms
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalDrupalDay
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupalsparkfabrik
 
Composer the right way - DPC15
Composer the right way - DPC15Composer the right way - DPC15
Composer the right way - DPC15Rafael Dohms
 
Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15Rafael Dohms
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
Composer the right way [SweetlakePHP]
Composer the right way [SweetlakePHP]Composer the right way [SweetlakePHP]
Composer the right way [SweetlakePHP]Rafael Dohms
 
Composer The Right Way - PHPUGMRN
Composer The Right Way - PHPUGMRNComposer The Right Way - PHPUGMRN
Composer The Right Way - PHPUGMRNRafael Dohms
 
CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2CodeIgniter Conference
 
Grails plugin development
Grails plugin developmentGrails plugin development
Grails plugin developmentMohd Farid
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code baseRobert Munteanu
 
Scaling up development of a modular code base - R Munteanu
Scaling up development of a modular code base - R MunteanuScaling up development of a modular code base - R Munteanu
Scaling up development of a modular code base - R Munteanumfrancis
 

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

20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
 
Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16Composer the Right Way - PHPBNL16
Composer the Right Way - PHPBNL16
 
China Science Challenge
China Science ChallengeChina Science Challenge
China Science Challenge
 
SgCodeJam24 Workshop
SgCodeJam24 WorkshopSgCodeJam24 Workshop
SgCodeJam24 Workshop
 
Plugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsPlugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGems
 
Get started with AAR
Get started with AARGet started with AAR
Get started with AAR
 
Composer The Right Way
Composer The Right WayComposer The Right Way
Composer The Right Way
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupal
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupal
 
Composer the right way - DPC15
Composer the right way - DPC15Composer the right way - DPC15
Composer the right way - DPC15
 
Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15Composer The Right Way #PHPjhb15
Composer The Right Way #PHPjhb15
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Composer the right way [SweetlakePHP]
Composer the right way [SweetlakePHP]Composer the right way [SweetlakePHP]
Composer the right way [SweetlakePHP]
 
Composer The Right Way - PHPUGMRN
Composer The Right Way - PHPUGMRNComposer The Right Way - PHPUGMRN
Composer The Right Way - PHPUGMRN
 
CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2CICON2010: Adam Griffiths - CodeIgniter 2
CICON2010: Adam Griffiths - CodeIgniter 2
 
Grails plugin development
Grails plugin developmentGrails plugin development
Grails plugin development
 
Core Android
Core AndroidCore Android
Core Android
 
Scaling up development of a modular code base
Scaling up development of a modular code baseScaling up development of a modular code base
Scaling up development of a modular code base
 
Scaling up development of a modular code base - R Munteanu
Scaling up development of a modular code base - R MunteanuScaling up development of a modular code base - R Munteanu
Scaling up development of a modular code base - R Munteanu
 

More from Kelly Shuster

Android Support Libraries
Android Support LibrariesAndroid Support Libraries
Android Support LibrariesKelly Shuster
 
Technical speaking 101
Technical speaking 101Technical speaking 101
Technical speaking 101Kelly Shuster
 
Let's Build Software Everyone Can Use (Denver Startup Week 2016)
Let's Build Software Everyone Can Use (Denver Startup Week 2016)Let's Build Software Everyone Can Use (Denver Startup Week 2016)
Let's Build Software Everyone Can Use (Denver Startup Week 2016)Kelly Shuster
 
Lightning Talk on Programming Accessible Software
Lightning Talk on Programming Accessible SoftwareLightning Talk on Programming Accessible Software
Lightning Talk on Programming Accessible SoftwareKelly Shuster
 
Android Accessibility - Droidcon London
Android Accessibility - Droidcon LondonAndroid Accessibility - Droidcon London
Android Accessibility - Droidcon LondonKelly Shuster
 
Intro to Android (WWC Denver July 2015)
Intro to Android (WWC Denver July 2015)Intro to Android (WWC Denver July 2015)
Intro to Android (WWC Denver July 2015)Kelly Shuster
 
Android Accessibility - DroidCon Berlin 2015
Android Accessibility - DroidCon Berlin 2015Android Accessibility - DroidCon Berlin 2015
Android Accessibility - DroidCon Berlin 2015Kelly Shuster
 

More from Kelly Shuster (7)

Android Support Libraries
Android Support LibrariesAndroid Support Libraries
Android Support Libraries
 
Technical speaking 101
Technical speaking 101Technical speaking 101
Technical speaking 101
 
Let's Build Software Everyone Can Use (Denver Startup Week 2016)
Let's Build Software Everyone Can Use (Denver Startup Week 2016)Let's Build Software Everyone Can Use (Denver Startup Week 2016)
Let's Build Software Everyone Can Use (Denver Startup Week 2016)
 
Lightning Talk on Programming Accessible Software
Lightning Talk on Programming Accessible SoftwareLightning Talk on Programming Accessible Software
Lightning Talk on Programming Accessible Software
 
Android Accessibility - Droidcon London
Android Accessibility - Droidcon LondonAndroid Accessibility - Droidcon London
Android Accessibility - Droidcon London
 
Intro to Android (WWC Denver July 2015)
Intro to Android (WWC Denver July 2015)Intro to Android (WWC Denver July 2015)
Intro to Android (WWC Denver July 2015)
 
Android Accessibility - DroidCon Berlin 2015
Android Accessibility - DroidCon Berlin 2015Android Accessibility - DroidCon Berlin 2015
Android Accessibility - DroidCon Berlin 2015
 

Recently uploaded

Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfkalichargn70th171
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Advantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptxAdvantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptxRTS corp
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxSasikiranMarri
 
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdfSteve Caron
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jNeo4j
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxAS Design & AST.
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 

Recently uploaded (20)

Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Advantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptxAdvantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptx
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
 
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4jGraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
GraphSummit Madrid - Product Vision and Roadmap - Luis Salvador Neo4j
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptx
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 

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