SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
W13	
Track	Session	
4/20/2016	2:00	PM	
	
	
"Gradle	for	Android	Developers"	
	
Presented by:
Ken Kousen
Kousen IT, Inc.
	
Brought	to	you	by:	
	
	
	
340	Corporate	Way,	Suite	300,	Orange	Park,	FL	32073	
888-268-8770	·	904-278-0524	·	info@techwell.com	·	www.techwell.com
Ken Kousen
Kousen IT, Inc.
Ken Kousen is the President of Kousen IT, Inc., through which he does technical
training, mentoring, and consulting in all areas related to Java, specializing in
Android, Spring, Hibernate, Groovy, and Grails. He is the author of the Manning
book “Making Java Groovy” and the upcoming O'Reilly book "Gradle for
Android". Ken is a regular speaker on the No Fluff, Just Stuff conference tour, as
well as at many other international conferences. In 2013 he won a JavaOne Rock
Star award. Over the past decade he has taught thousands of developers in
business and industry. In addition to owning several technical certifications, his
academic background includes two BS degrees from M.I.T., an MS and a Ph.D.
from Princeton, and an MS in Computer Science from R.P.I. Contacts Ken
@kenkousen.
Android
Mobile Dev+Test 2016
Contact Info
Ken Kousen
Kousen IT, Inc.
ken.kousen@kousenit.com
http://www.kousenit.com
http://kousenit.wordpress.com (blog)
@kenkousen
https://github.com/kousen (repo)
Publications
O'Reilly video courses: See http://shop.oreilly.com for details
Groovy Programming Fundamentals
Practical Groovy Programming
Mastering Groovy Programming
Learning Android
Practical Android
Gradle Fundamentals
Gradle for Android
Spring Framework Essentials
Home Page
Developer home page
http://developer.android.com
Android dashboards, https://developer.android.com/about/dashboards/
Android dashboards, https://developer.android.com/about/dashboards/
Android dashboards, https://developer.android.com/about/dashboards/
SDK Bundle
https://developer.android.com/sdk/index.html
Android Studio IDE
Android SDK tools
Android 6.0 (Marshmallow) Platform
Android 6.0 Emulator
Android Studio
The only supported IDE
Based on IntelliJ IDEA
Uses Gradle for builds
Versions
Platform version:
2.3.3, 4.4, 5.0, 5.1, 6.0
Codename:
Gingerbread, ICS, JellyBean, KitKat, Lollipop,
Marshmallow
API numbers:
13, 14, 15, …, 19, (skip 20), 21, 22, 23
Compatibility library
API changed significantly as of 3.0+
ActionBar
Fragment
Compatibility library available
Allows for Material design on older devices
Training
https://developer.android.com/training/index.html
Brief tutorials
Getting Started
Thin, but useful
Reference
https://developer.android.com/reference/packages.html
Javadocs
Good search capabilities
Use magnifying glass
Creating an application
Must select unique application ID
com.mycompany.myapp
Used in Google Play store
(Not exposed to clients)
Choose min SDK level
Min level willing to support
Target SDK level preselected to current
Creating an application
Manifest
AndroidManifest.xml
<uses-permission
android:name="android.permission.INTERNET" />
<application>
<activity>... </activity>
…
</application>
Manifest
All activities
Permissions
Intents and Intent filters
Services
Content providers
…
Activities
Each screen is an activity
Extends android.app.Activity
Full of callback methods
Activities
Each activity has an XML layout
activity_main.xml
activity_welcome.xml
XML tags with many attributes
Activities
Activity callback methods:
onCreate, onDestroy
onStart, onStop
onPause, onResume
… many others …
HAXM
Intel Hardware Acceleration Execution Manager
https://software.intel.com/en-us/android/articles/intel-
hardware-accelerated-execution-manager
Installer + SDK Manager entry
Activity diagram (no pun intended):
https://developer.android.com/guide/components/activities.html
Moves from state to state
invoking callback methods
Activities
res
Resources folder contains subfolders
drawable
layout
menu
values
...
Providing resources
https://developer.android.
com/guide/topics/resources/providing-resources.html
Specially named subdirectories
values
Configuration qualifiers
values-v11
values-sw720dp-land
dp and sp
dp: density-independent pixels
Used for images
sp: scale-independent pixels
Used for strings
values
Keys and values → layer of indirection
strings.xml:
<string name="hello_world">Hello world!</string>
Declaring ids
If you need to access a resource from Java
need to provide an id
android:id="@+id/name"
+ defines, otherwise references
Accessing resources
XML → compiled into
R.java: full of public inner classes
generated file → do not modify
(Button) findViewById(R.id.hello_button)
Graphical editor
<LinearLayout>
<RelativeLayout>
… others, less common …
Layouts
Layouts
Add components to layouts
Must specify:
layout_width
layout_height
Layout
Add layout to activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
Widgets
Widgets generate events
Buttons → View.OnClickListener(...)
(Yes, anonymous inner classes)
Buttons
Adding a button listener
helloButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sayHello(v);
}
});
Widgets
<TextView> (Label in HTML)
<EditText> (TextField in HTML)
<Button>
<CheckBox>
<ToggleButton>
<DatePicker> See android.widget pkg
Widgets
<EditText> with text types
text, textEmailAddress, textUri
number, phone
https://developer.android.com/guide/topics/ui/controls/text.html
Toast
Brief message over UI
Toast.makeText(context, text, Toast.LENGTH_LONG).show();
Logging
android.util.Log
static methods
Log.d(), Log.v(), Log.i(),
Log.w(), Log.e()
Two args: TAG and message
Logging
TAG → String constant used as filter
Add filter to LogCat
Log messages in classes
Intent
Messaging object
Three use cases
- Start an activity
- Start a service
- Deliver a broadcast
Intent
Start an activity
Pass an intent to startActivity()
Or startActivityForResult()
Intent
Start a service
Services run in background
Pass intent to startService()
Intent
Deliver a broadcast
Sends messages to receivers
Pass intent to sendBroadcast()
Intent
Explicit
Specify component to start
Implicit
Declare action to perform (in manifest)
Intent
Extras → data carried to destination
(like a map of keys and values)
Intent intent = new Intent(this, WelcomeActivity.class);
intent.putExtra("name", name);
startActivity(intent);
Views and adapters
ListView with Adapters
ArrayAdapter
creates view for each item
setAdapter on ListView
ActionBar
Apps with version > 3.0
Inside <menu>:
<item
android:id="@+id/action_joke"
android:showAsAction="ifRoom|withText"
android:icon="@drawable/ic_launcher"
android:title="@string/get_joke"/>
ActionBar
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_joke:
// do whatever click should do
return true;
default:
return super.onOptionsItemSelected(item);
}
}
AsyncTask
Perform asynchronous work off UI thread
Publish results to UI thread
AsyncTask
AsyncTask<Params, Progress, Results>
Short operations (few seconds)
AsyncTask
onPreExecute()
doInBackground()
onProgressUpdate()
onPostExecute()
https://developer.android.com/reference/android/os/AsyncTask.html
Longer running tasks
Use java.concurrent package
Executor
ThreadPoolExecutor
FutureTask
Or, better yet, use services…
Services
Long-running, background operations
network operations
play music
file I/O
Services
Started
Runs to completion
Bound
Interacts with calling client
Only exists when bound
Services
"Runs in background"
Service runs in application thread
Keeps running if user switches apps
You can (and should) start new thread
Use AsyncTask, for example
REST
org.json package
JSONArray
JSONObject
android.util package
JsonReader
JsonWriter
REST
org.apache.http.client packages
HttpClient
HttpGet
HttpPost
...
REST
Alternative:
Spring for Android
http://projects.spring.io/spring-android/
RestTemplate class
Map classes to JSON structure
Other Alternatives
Retrofit
https://square.github.io/retrofit/
Uses OkHttp for networking
OkHttp
https://square.github.io/okhttp/
Networking client
Storage options
Shared preferences
Internal storage on device
External storage
SQLite databases
https://developer.android.com/guide/topics/data/data-storage.html
Storage options
Shared preferences
key/value pairs of primitives
getSharedPreferences()
multiple files by name
getPreferences()
Storage options
Internal storage
openFileOutput() → FileOutputStream
fos.write(...)
fos.close()
Same with input
Storage options
External storage
SD card or internal
Can share files with other apps
Storage options
SQLite database
accessible within app only
SQLite
Extend SQLiteOpenHelper
Supply constructor
Override onCreate()
Create tables with execSQL()
SQLite
Read and write using
getReadableDatabase()
getWriteableDatabase()
Assorted query() methods
SQLite
Can access from adb shell
Use sqlite3 tool
Content Providers
Provide data to other processes
Existing providers for calendar, contacts
Fragments
Portions of a user interface
Managed by activities
Fragments
Extend Fragment
or one of its subclasses
Use FragmentManager to manipulate
in a FragmentTransaction
Fragments
Fragments are portions of a UI
Owned by Activities
Additional callback methods
adb tool
Android Debug Bridge
Part of platform tools
adb tool
devices → list attached devices
pull, push → copy files to device
shell → open shell on device
Gradle for
Android
Basics
Android plugin for Gradle
Added via buildscript
Lots of customization
Basics
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.android.tools.build:gradle:1.3.2'
}
}
apply plugin: 'com.android.application'
Properties in build.gradle
android {
versionCode …
versionName …
}
or even in gradle.properties
Multi-project Builds
By default, apps in AS are multi-project builds
build.gradle
settings.gradle
Can add additional libraries, other modules,
and more
Changing the Gradle version
task wrapper(type: Wrapper) {
gradleVersion = 2.11
}
Or edit distribution URL in gradle-wrapper.
properties
distributionUrl=https://services.gradle.org/distributions/gradle-2.11-all.zip
Build Types
Two default build types:
debug
release
Configuring Build Types
Use buildTypes section of build.gradle
buildTypes {
release { … }
debug { … }
}
Can also add custom build types that way
Configuring Build Types
Each build type defines a source set
src/main/ …
src/debug/ …
src/release/ …
src/androidTest/… (discussed below)
Configuring Build Types
Resources in build type source sets
replace their counterparts in main
Java classes conflict, however
Define class in each, or just in main
Generating a Release
Can't assemble a release until
you can sign it
Signing Your App
Use Java's keytool to generate cert
Signing Your App
signingConfigs {
release {
storeFile file('ICNDB.keystore')
keyAlias 'ICNDB'
storePassword 'gradle_rules'
keyPassword 'carlos_ray_aka_chuck'
}
}
Signing Your App
Passwords don't have to be in build file
- Can use system properties
- Can prompt user
- Can use gradle.properties
See docs for suggestions
Signing Your App
Add signingConfig to build type config
buildTypes {
release {
// …
signingConfig signingConfigs.release
}
}
Signing Your App
The signingReport task shows details
Signing Your App
Invoke assembleRelease task
Resulting apk in build/outputs/apk folder
Flavors and Variants
buildTypes
debug, release
flavors → different versions of same app
arrogant, friendly, obsequious
Flavors and Variants
Each flavor generates an apk
Variants combine buildTypes and flavors
debug+arrogant, debug+friendly,
debug+obsequious
release+arrogant, release+friendly,
release+obsequious
Multiple Flavors
flavorDimensions 'attitude', 'client'
productFlavors {
arrogant { dimension 'attitude' }
…
stark { dimension 'client' }
wayne { dimension 'client' }
}
Custom Tasks
task copyApks(type: Copy, dependsOn: assembleDebug) {
from("$buildDir/outputs/apk") {
exclude '**/*unsigned.apk', '**/*unaligned.apk'
}
into '../apks'
}
Custom Tasks
task printVariantNames {
doLast {
android.applicationVariants.all { variant ->
println variant.name
}
}
}
Testing
Unit testing
Functional testing
Robotium
Espresso
Testing
With Gradle:
Tests run on all connected devices
simultaneously
Testing
Use androidTest source set
src/androidTest/java
Testing
Use androidTest source set
src/androidTest/java
androidTestCompile dependencies
Testing
Use androidTest source set
src/androidTest/java
Run connectedCheck task
References
Android new build system
http://tools.android.com/tech-docs/new-build-system
http://tools.android.com/tech-docs/new-build-system/user-guide
Developer's Guide section on Gradle
https://developer.android.com/sdk/installing/studio-build.html
Android Developers on G+
https://plus.google.com/+AndroidDevelopers/posts
References
Gradle Recipes for Android
http://shop.oreilly.com/product/0636920032656.do
Ask me for a coupon code :)
Summary
Activities and XML layouts
Intents and IntentFilters
Widgets
Services
Storage and SQLite
Content providers

Más contenido relacionado

La actualidad más candente

Top Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web DevelopmentTop Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web DevelopmentSimon Guest
 
The Glass Class - Tutorial 3 - Android and GDK
The Glass Class - Tutorial 3 - Android and GDKThe Glass Class - Tutorial 3 - Android and GDK
The Glass Class - Tutorial 3 - Android and GDKGun Lee
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018Somkiat Khitwongwattana
 
Hieu Xamarin iOS9, Android M 3-11-2015
Hieu Xamarin iOS9, Android M  3-11-2015Hieu Xamarin iOS9, Android M  3-11-2015
Hieu Xamarin iOS9, Android M 3-11-2015Nguyen Hieu
 
Anatomy of android application
Anatomy of android applicationAnatomy of android application
Anatomy of android applicationNikunj Dhameliya
 
Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017Ivo Neskovic
 
Session #8 adding magic to your app
Session #8  adding magic to your appSession #8  adding magic to your app
Session #8 adding magic to your appVitali Pekelis
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Matthew McCullough
 
Synapseindia android apps intro to android development
Synapseindia android apps  intro to android developmentSynapseindia android apps  intro to android development
Synapseindia android apps intro to android developmentSynapseindiappsdevelopment
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...mharkus
 
Android development - Activities, Views & Intents
Android development - Activities, Views & IntentsAndroid development - Activities, Views & Intents
Android development - Activities, Views & IntentsLope Emano
 
Day 4: Activity lifecycle
Day 4: Activity lifecycleDay 4: Activity lifecycle
Day 4: Activity lifecycleAhsanul Karim
 

La actualidad más candente (18)

Top Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web DevelopmentTop Ten Tips for HTML5/Mobile Web Development
Top Ten Tips for HTML5/Mobile Web Development
 
Ios - Introduction to platform & SDK
Ios - Introduction to platform & SDKIos - Introduction to platform & SDK
Ios - Introduction to platform & SDK
 
The Glass Class - Tutorial 3 - Android and GDK
The Glass Class - Tutorial 3 - Android and GDKThe Glass Class - Tutorial 3 - Android and GDK
The Glass Class - Tutorial 3 - Android and GDK
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018
 
Hieu Xamarin iOS9, Android M 3-11-2015
Hieu Xamarin iOS9, Android M  3-11-2015Hieu Xamarin iOS9, Android M  3-11-2015
Hieu Xamarin iOS9, Android M 3-11-2015
 
Anatomy of android application
Anatomy of android applicationAnatomy of android application
Anatomy of android application
 
Google Android
Google AndroidGoogle Android
Google Android
 
Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017Android - From Zero to Hero @ DEVit 2017
Android - From Zero to Hero @ DEVit 2017
 
Session #8 adding magic to your app
Session #8  adding magic to your appSession #8  adding magic to your app
Session #8 adding magic to your app
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
 
Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2Google App Engine for Java v0.0.2
Google App Engine for Java v0.0.2
 
Activity
ActivityActivity
Activity
 
Synapseindia android apps intro to android development
Synapseindia android apps  intro to android developmentSynapseindia android apps  intro to android development
Synapseindia android apps intro to android development
 
Android UI Fundamentals part 1
Android UI Fundamentals part 1Android UI Fundamentals part 1
Android UI Fundamentals part 1
 
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
GDG GeorgeTown Devfest 2014 Presentation: Android Wear: A Developer's Perspec...
 
Android development - Activities, Views & Intents
Android development - Activities, Views & IntentsAndroid development - Activities, Views & Intents
Android development - Activities, Views & Intents
 
Android Components
Android ComponentsAndroid Components
Android Components
 
Day 4: Activity lifecycle
Day 4: Activity lifecycleDay 4: Activity lifecycle
Day 4: Activity lifecycle
 

Destacado

Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overviewKevin He
 
Gradle & Android Studio - Introduction
Gradle & Android Studio - IntroductionGradle & Android Studio - Introduction
Gradle & Android Studio - IntroductionKevin Pelgrims
 
Android app fundamentals
Android app fundamentalsAndroid app fundamentals
Android app fundamentalsAmr Salman
 
Android Fundamentals - Day 2
Android Fundamentals - Day 2Android Fundamentals - Day 2
Android Fundamentals - Day 2Mohammad Tarek
 
Introduction to android studio 2.0 and data binding library
Introduction to android studio 2.0 and data binding libraryIntroduction to android studio 2.0 and data binding library
Introduction to android studio 2.0 and data binding libraryKaushal Dhruw
 
What’s new for Android Developers in 2015 - Material Design, Android Studio, ...
What’s new for Android Developers in 2015 - Material Design, Android Studio, ...What’s new for Android Developers in 2015 - Material Design, Android Studio, ...
What’s new for Android Developers in 2015 - Material Design, Android Studio, ...Deepu S Nath
 
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
 
Gradle and Android Studio : Best of Friends
Gradle and Android Studio : Best of FriendsGradle and Android Studio : Best of Friends
Gradle and Android Studio : Best of FriendsRomin Irani
 
Android Application Fundamentals
Android Application FundamentalsAndroid Application Fundamentals
Android Application FundamentalsVikalp Jain
 
New to android studio
New to android studioNew to android studio
New to android studioEngine Bai
 
A Deep Dive into Open Source Android Development
A Deep Dive into Open Source Android DevelopmentA Deep Dive into Open Source Android Development
A Deep Dive into Open Source Android DevelopmentDavid Wu
 
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
 
Intents in Android
Intents in AndroidIntents in Android
Intents in Androidma-polimi
 
Android User Interface Tutorial: DatePicker, TimePicker & Spinner
Android User Interface Tutorial: DatePicker, TimePicker & SpinnerAndroid User Interface Tutorial: DatePicker, TimePicker & Spinner
Android User Interface Tutorial: DatePicker, TimePicker & SpinnerAhsanul Karim
 
Day 4: Android: UI Widgets
Day 4: Android: UI WidgetsDay 4: Android: UI Widgets
Day 4: Android: UI WidgetsAhsanul Karim
 
How to improve gradle build speed
How to improve gradle build speedHow to improve gradle build speed
How to improve gradle build speedFate Chang
 

Destacado (20)

Android gradle-build-system-overview
Android gradle-build-system-overviewAndroid gradle-build-system-overview
Android gradle-build-system-overview
 
Gradle & Android Studio - Introduction
Gradle & Android Studio - IntroductionGradle & Android Studio - Introduction
Gradle & Android Studio - Introduction
 
Android app fundamentals
Android app fundamentalsAndroid app fundamentals
Android app fundamentals
 
Android Fundamentals
Android FundamentalsAndroid Fundamentals
Android Fundamentals
 
Android Fundamentals - Day 2
Android Fundamentals - Day 2Android Fundamentals - Day 2
Android Fundamentals - Day 2
 
Introduction to android studio 2.0 and data binding library
Introduction to android studio 2.0 and data binding libraryIntroduction to android studio 2.0 and data binding library
Introduction to android studio 2.0 and data binding library
 
What’s new for Android Developers in 2015 - Material Design, Android Studio, ...
What’s new for Android Developers in 2015 - Material Design, Android Studio, ...What’s new for Android Developers in 2015 - Material Design, Android Studio, ...
What’s new for Android Developers in 2015 - Material Design, Android Studio, ...
 
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
 
Gradle and Android Studio : Best of Friends
Gradle and Android Studio : Best of FriendsGradle and Android Studio : Best of Friends
Gradle and Android Studio : Best of Friends
 
Android Fundamentals
Android FundamentalsAndroid Fundamentals
Android Fundamentals
 
Android Application Fundamentals
Android Application FundamentalsAndroid Application Fundamentals
Android Application Fundamentals
 
New to android studio
New to android studioNew to android studio
New to android studio
 
AndroidManifest
AndroidManifestAndroidManifest
AndroidManifest
 
A Deep Dive into Open Source Android Development
A Deep Dive into Open Source Android DevelopmentA Deep Dive into Open Source Android Development
A Deep Dive into Open Source Android Development
 
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
 
Intents in Android
Intents in AndroidIntents in Android
Intents in Android
 
Android User Interface Tutorial: DatePicker, TimePicker & Spinner
Android User Interface Tutorial: DatePicker, TimePicker & SpinnerAndroid User Interface Tutorial: DatePicker, TimePicker & Spinner
Android User Interface Tutorial: DatePicker, TimePicker & Spinner
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Day 4: Android: UI Widgets
Day 4: Android: UI WidgetsDay 4: Android: UI Widgets
Day 4: Android: UI Widgets
 
How to improve gradle build speed
How to improve gradle build speedHow to improve gradle build speed
How to improve gradle build speed
 

Similar a Gradle for Android Developers

Android app development basics
Android app development basicsAndroid app development basics
Android app development basicsAnton Narusberg
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsMatteo Manchi
 
Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android ProgrammingRaveendra R
 
Android Workshop
Android WorkshopAndroid Workshop
Android WorkshopJunda Ong
 
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
 
Pengenalan AngularJS
Pengenalan AngularJSPengenalan AngularJS
Pengenalan AngularJSEdi Santoso
 
What's new in android jakarta gdg (2015-08-26)
What's new in android   jakarta gdg (2015-08-26)What's new in android   jakarta gdg (2015-08-26)
What's new in android jakarta gdg (2015-08-26)Google
 
Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.Mohammad Shaker
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Filippo Matteo Riggio
 
Android apps development
Android apps developmentAndroid apps development
Android apps developmentMonir Zzaman
 
Apache Cordova In Action
Apache Cordova In ActionApache Cordova In Action
Apache Cordova In ActionHazem Saleh
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdfImranS18
 
Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Patrick Lauke
 
Learn How to Animate your Android App
Learn How to Animate your Android AppLearn How to Animate your Android App
Learn How to Animate your Android AppEdureka!
 
ESW #1 - Developing For Android
ESW #1 - Developing For AndroidESW #1 - Developing For Android
ESW #1 - Developing For Androideatsleepweb
 
Android - Open Source Bridge 2011
Android - Open Source Bridge 2011Android - Open Source Bridge 2011
Android - Open Source Bridge 2011sullis
 

Similar a Gradle for Android Developers (20)

Android app development basics
Android app development basicsAndroid app development basics
Android app development basics
 
Intro to Android Programming
Intro to Android ProgrammingIntro to Android Programming
Intro to Android Programming
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
 
Introduction to Android Programming
Introduction to Android ProgrammingIntroduction to Android Programming
Introduction to Android Programming
 
Android Workshop
Android WorkshopAndroid Workshop
Android Workshop
 
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
 
Pengenalan AngularJS
Pengenalan AngularJSPengenalan AngularJS
Pengenalan AngularJS
 
Android workshop
Android workshopAndroid workshop
Android workshop
 
What's new in android jakarta gdg (2015-08-26)
What's new in android   jakarta gdg (2015-08-26)What's new in android   jakarta gdg (2015-08-26)
What's new in android jakarta gdg (2015-08-26)
 
Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.Mobile Software Engineering Crash Course - C04 Android Cont.
Mobile Software Engineering Crash Course - C04 Android Cont.
 
Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2Mobile App Development: Primi passi con NativeScript e Angular 2
Mobile App Development: Primi passi con NativeScript e Angular 2
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
 
Android apps development
Android apps developmentAndroid apps development
Android apps development
 
Apache Cordova In Action
Apache Cordova In ActionApache Cordova In Action
Apache Cordova In Action
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdf
 
Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010Making your site mobile-friendly - DevCSI Reading 21.07.2010
Making your site mobile-friendly - DevCSI Reading 21.07.2010
 
Learn How to Animate your Android App
Learn How to Animate your Android AppLearn How to Animate your Android App
Learn How to Animate your Android App
 
ESW #1 - Developing For Android
ESW #1 - Developing For AndroidESW #1 - Developing For Android
ESW #1 - Developing For Android
 
Android - Open Source Bridge 2011
Android - Open Source Bridge 2011Android - Open Source Bridge 2011
Android - Open Source Bridge 2011
 
Android Basics
Android BasicsAndroid Basics
Android Basics
 

Más de Josiah Renaudin

Solve Everyday IT Problems with DevOps
Solve Everyday IT Problems with DevOpsSolve Everyday IT Problems with DevOps
Solve Everyday IT Problems with DevOpsJosiah Renaudin
 
End-to-End Quality Approach: 14 Levels of Testing
End-to-End Quality Approach: 14 Levels of TestingEnd-to-End Quality Approach: 14 Levels of Testing
End-to-End Quality Approach: 14 Levels of TestingJosiah Renaudin
 
Product Management: The Innovation Glue for the Lean Enterprise
Product Management: The Innovation Glue for the Lean EnterpriseProduct Management: The Innovation Glue for the Lean Enterprise
Product Management: The Innovation Glue for the Lean EnterpriseJosiah Renaudin
 
Slay the Dragons of Agile Measurement
Slay the Dragons of Agile MeasurementSlay the Dragons of Agile Measurement
Slay the Dragons of Agile MeasurementJosiah Renaudin
 
Blending Product Discovery and Product Delivery
Blending Product Discovery and Product DeliveryBlending Product Discovery and Product Delivery
Blending Product Discovery and Product DeliveryJosiah Renaudin
 
Determining Business Value in Agile Development
Determining Business Value in Agile DevelopmentDetermining Business Value in Agile Development
Determining Business Value in Agile DevelopmentJosiah Renaudin
 
Three Things You MUST Know to Transform into an Agile Enterprise
Three Things You MUST Know to Transform into an Agile EnterpriseThree Things You MUST Know to Transform into an Agile Enterprise
Three Things You MUST Know to Transform into an Agile EnterpriseJosiah Renaudin
 
Internet of Things and the Wisdom of Mobile
Internet of Things and the Wisdom of MobileInternet of Things and the Wisdom of Mobile
Internet of Things and the Wisdom of MobileJosiah Renaudin
 
How to Do Kick-Ass Software Development
How to Do Kick-Ass Software DevelopmentHow to Do Kick-Ass Software Development
How to Do Kick-Ass Software DevelopmentJosiah Renaudin
 
The Power of an Agile Mindset
The Power of an Agile MindsetThe Power of an Agile Mindset
The Power of an Agile MindsetJosiah Renaudin
 
DevOps and the Culture of High-Performing Software Organizations
DevOps and the Culture of High-Performing Software OrganizationsDevOps and the Culture of High-Performing Software Organizations
DevOps and the Culture of High-Performing Software OrganizationsJosiah Renaudin
 
Uncover Untold Stories in Your Data: A Deep Dive on Data Profiling
Uncover Untold Stories in Your Data: A Deep Dive on Data ProfilingUncover Untold Stories in Your Data: A Deep Dive on Data Profiling
Uncover Untold Stories in Your Data: A Deep Dive on Data ProfilingJosiah Renaudin
 
Build a Quality Engineering and Automation Framework
Build a Quality Engineering and Automation FrameworkBuild a Quality Engineering and Automation Framework
Build a Quality Engineering and Automation FrameworkJosiah Renaudin
 
Don’t Be Another Statistic! Develop a Long-Term Test Automation Strategy
Don’t Be Another Statistic! Develop a Long-Term Test Automation StrategyDon’t Be Another Statistic! Develop a Long-Term Test Automation Strategy
Don’t Be Another Statistic! Develop a Long-Term Test Automation StrategyJosiah Renaudin
 
Testing Lessons from the Land of Make Believe
Testing Lessons from the Land of Make BelieveTesting Lessons from the Land of Make Believe
Testing Lessons from the Land of Make BelieveJosiah Renaudin
 
Finding Success with Test Process Improvement
Finding Success with Test Process ImprovementFinding Success with Test Process Improvement
Finding Success with Test Process ImprovementJosiah Renaudin
 
Git and GitHub for Testers
Git and GitHub for TestersGit and GitHub for Testers
Git and GitHub for TestersJosiah Renaudin
 
Stay Ahead of the Mobile and Web Testing Maturity Curve
Stay Ahead of the Mobile and Web Testing Maturity CurveStay Ahead of the Mobile and Web Testing Maturity Curve
Stay Ahead of the Mobile and Web Testing Maturity CurveJosiah Renaudin
 
The Selenium Grid: Run Multiple Automated Tests in Parallel
The Selenium Grid: Run Multiple Automated Tests in ParallelThe Selenium Grid: Run Multiple Automated Tests in Parallel
The Selenium Grid: Run Multiple Automated Tests in ParallelJosiah Renaudin
 
Testing at Startup Companies: What, When, Where, and How
Testing at Startup Companies: What, When, Where, and HowTesting at Startup Companies: What, When, Where, and How
Testing at Startup Companies: What, When, Where, and HowJosiah Renaudin
 

Más de Josiah Renaudin (20)

Solve Everyday IT Problems with DevOps
Solve Everyday IT Problems with DevOpsSolve Everyday IT Problems with DevOps
Solve Everyday IT Problems with DevOps
 
End-to-End Quality Approach: 14 Levels of Testing
End-to-End Quality Approach: 14 Levels of TestingEnd-to-End Quality Approach: 14 Levels of Testing
End-to-End Quality Approach: 14 Levels of Testing
 
Product Management: The Innovation Glue for the Lean Enterprise
Product Management: The Innovation Glue for the Lean EnterpriseProduct Management: The Innovation Glue for the Lean Enterprise
Product Management: The Innovation Glue for the Lean Enterprise
 
Slay the Dragons of Agile Measurement
Slay the Dragons of Agile MeasurementSlay the Dragons of Agile Measurement
Slay the Dragons of Agile Measurement
 
Blending Product Discovery and Product Delivery
Blending Product Discovery and Product DeliveryBlending Product Discovery and Product Delivery
Blending Product Discovery and Product Delivery
 
Determining Business Value in Agile Development
Determining Business Value in Agile DevelopmentDetermining Business Value in Agile Development
Determining Business Value in Agile Development
 
Three Things You MUST Know to Transform into an Agile Enterprise
Three Things You MUST Know to Transform into an Agile EnterpriseThree Things You MUST Know to Transform into an Agile Enterprise
Three Things You MUST Know to Transform into an Agile Enterprise
 
Internet of Things and the Wisdom of Mobile
Internet of Things and the Wisdom of MobileInternet of Things and the Wisdom of Mobile
Internet of Things and the Wisdom of Mobile
 
How to Do Kick-Ass Software Development
How to Do Kick-Ass Software DevelopmentHow to Do Kick-Ass Software Development
How to Do Kick-Ass Software Development
 
The Power of an Agile Mindset
The Power of an Agile MindsetThe Power of an Agile Mindset
The Power of an Agile Mindset
 
DevOps and the Culture of High-Performing Software Organizations
DevOps and the Culture of High-Performing Software OrganizationsDevOps and the Culture of High-Performing Software Organizations
DevOps and the Culture of High-Performing Software Organizations
 
Uncover Untold Stories in Your Data: A Deep Dive on Data Profiling
Uncover Untold Stories in Your Data: A Deep Dive on Data ProfilingUncover Untold Stories in Your Data: A Deep Dive on Data Profiling
Uncover Untold Stories in Your Data: A Deep Dive on Data Profiling
 
Build a Quality Engineering and Automation Framework
Build a Quality Engineering and Automation FrameworkBuild a Quality Engineering and Automation Framework
Build a Quality Engineering and Automation Framework
 
Don’t Be Another Statistic! Develop a Long-Term Test Automation Strategy
Don’t Be Another Statistic! Develop a Long-Term Test Automation StrategyDon’t Be Another Statistic! Develop a Long-Term Test Automation Strategy
Don’t Be Another Statistic! Develop a Long-Term Test Automation Strategy
 
Testing Lessons from the Land of Make Believe
Testing Lessons from the Land of Make BelieveTesting Lessons from the Land of Make Believe
Testing Lessons from the Land of Make Believe
 
Finding Success with Test Process Improvement
Finding Success with Test Process ImprovementFinding Success with Test Process Improvement
Finding Success with Test Process Improvement
 
Git and GitHub for Testers
Git and GitHub for TestersGit and GitHub for Testers
Git and GitHub for Testers
 
Stay Ahead of the Mobile and Web Testing Maturity Curve
Stay Ahead of the Mobile and Web Testing Maturity CurveStay Ahead of the Mobile and Web Testing Maturity Curve
Stay Ahead of the Mobile and Web Testing Maturity Curve
 
The Selenium Grid: Run Multiple Automated Tests in Parallel
The Selenium Grid: Run Multiple Automated Tests in ParallelThe Selenium Grid: Run Multiple Automated Tests in Parallel
The Selenium Grid: Run Multiple Automated Tests in Parallel
 
Testing at Startup Companies: What, When, Where, and How
Testing at Startup Companies: What, When, Where, and HowTesting at Startup Companies: What, When, Where, and How
Testing at Startup Companies: What, When, Where, and How
 

Último

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineeringssuserb3a23b
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 

Último (20)

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineering
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 

Gradle for Android Developers

  • 1. W13 Track Session 4/20/2016 2:00 PM "Gradle for Android Developers" Presented by: Ken Kousen Kousen IT, Inc. Brought to you by: 340 Corporate Way, Suite 300, Orange Park, FL 32073 888-268-8770 · 904-278-0524 · info@techwell.com · www.techwell.com
  • 2. Ken Kousen Kousen IT, Inc. Ken Kousen is the President of Kousen IT, Inc., through which he does technical training, mentoring, and consulting in all areas related to Java, specializing in Android, Spring, Hibernate, Groovy, and Grails. He is the author of the Manning book “Making Java Groovy” and the upcoming O'Reilly book "Gradle for Android". Ken is a regular speaker on the No Fluff, Just Stuff conference tour, as well as at many other international conferences. In 2013 he won a JavaOne Rock Star award. Over the past decade he has taught thousands of developers in business and industry. In addition to owning several technical certifications, his academic background includes two BS degrees from M.I.T., an MS and a Ph.D. from Princeton, and an MS in Computer Science from R.P.I. Contacts Ken @kenkousen.
  • 3. Android Mobile Dev+Test 2016 Contact Info Ken Kousen Kousen IT, Inc. ken.kousen@kousenit.com http://www.kousenit.com http://kousenit.wordpress.com (blog) @kenkousen https://github.com/kousen (repo)
  • 4. Publications O'Reilly video courses: See http://shop.oreilly.com for details Groovy Programming Fundamentals Practical Groovy Programming Mastering Groovy Programming Learning Android Practical Android Gradle Fundamentals Gradle for Android Spring Framework Essentials Home Page Developer home page http://developer.android.com
  • 5. Android dashboards, https://developer.android.com/about/dashboards/ Android dashboards, https://developer.android.com/about/dashboards/
  • 6. Android dashboards, https://developer.android.com/about/dashboards/ SDK Bundle https://developer.android.com/sdk/index.html Android Studio IDE Android SDK tools Android 6.0 (Marshmallow) Platform Android 6.0 Emulator
  • 7. Android Studio The only supported IDE Based on IntelliJ IDEA Uses Gradle for builds Versions Platform version: 2.3.3, 4.4, 5.0, 5.1, 6.0 Codename: Gingerbread, ICS, JellyBean, KitKat, Lollipop, Marshmallow API numbers: 13, 14, 15, …, 19, (skip 20), 21, 22, 23
  • 8. Compatibility library API changed significantly as of 3.0+ ActionBar Fragment Compatibility library available Allows for Material design on older devices Training https://developer.android.com/training/index.html Brief tutorials Getting Started Thin, but useful
  • 9. Reference https://developer.android.com/reference/packages.html Javadocs Good search capabilities Use magnifying glass Creating an application Must select unique application ID com.mycompany.myapp Used in Google Play store (Not exposed to clients)
  • 10. Choose min SDK level Min level willing to support Target SDK level preselected to current Creating an application Manifest AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET" /> <application> <activity>... </activity> … </application>
  • 11. Manifest All activities Permissions Intents and Intent filters Services Content providers … Activities Each screen is an activity Extends android.app.Activity Full of callback methods
  • 12. Activities Each activity has an XML layout activity_main.xml activity_welcome.xml XML tags with many attributes Activities Activity callback methods: onCreate, onDestroy onStart, onStop onPause, onResume … many others …
  • 13. HAXM Intel Hardware Acceleration Execution Manager https://software.intel.com/en-us/android/articles/intel- hardware-accelerated-execution-manager Installer + SDK Manager entry Activity diagram (no pun intended): https://developer.android.com/guide/components/activities.html Moves from state to state invoking callback methods Activities
  • 14. res Resources folder contains subfolders drawable layout menu values ... Providing resources https://developer.android. com/guide/topics/resources/providing-resources.html Specially named subdirectories values Configuration qualifiers values-v11 values-sw720dp-land
  • 15. dp and sp dp: density-independent pixels Used for images sp: scale-independent pixels Used for strings values Keys and values → layer of indirection strings.xml: <string name="hello_world">Hello world!</string>
  • 16. Declaring ids If you need to access a resource from Java need to provide an id android:id="@+id/name" + defines, otherwise references Accessing resources XML → compiled into R.java: full of public inner classes generated file → do not modify (Button) findViewById(R.id.hello_button)
  • 18. Layouts Add components to layouts Must specify: layout_width layout_height Layout Add layout to activity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) }
  • 19. Widgets Widgets generate events Buttons → View.OnClickListener(...) (Yes, anonymous inner classes) Buttons Adding a button listener helloButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sayHello(v); } });
  • 20. Widgets <TextView> (Label in HTML) <EditText> (TextField in HTML) <Button> <CheckBox> <ToggleButton> <DatePicker> See android.widget pkg Widgets <EditText> with text types text, textEmailAddress, textUri number, phone https://developer.android.com/guide/topics/ui/controls/text.html
  • 21. Toast Brief message over UI Toast.makeText(context, text, Toast.LENGTH_LONG).show(); Logging android.util.Log static methods Log.d(), Log.v(), Log.i(), Log.w(), Log.e() Two args: TAG and message
  • 22. Logging TAG → String constant used as filter Add filter to LogCat Log messages in classes Intent Messaging object Three use cases - Start an activity - Start a service - Deliver a broadcast
  • 23. Intent Start an activity Pass an intent to startActivity() Or startActivityForResult() Intent Start a service Services run in background Pass intent to startService()
  • 24. Intent Deliver a broadcast Sends messages to receivers Pass intent to sendBroadcast() Intent Explicit Specify component to start Implicit Declare action to perform (in manifest)
  • 25. Intent Extras → data carried to destination (like a map of keys and values) Intent intent = new Intent(this, WelcomeActivity.class); intent.putExtra("name", name); startActivity(intent); Views and adapters ListView with Adapters ArrayAdapter creates view for each item setAdapter on ListView
  • 26. ActionBar Apps with version > 3.0 Inside <menu>: <item android:id="@+id/action_joke" android:showAsAction="ifRoom|withText" android:icon="@drawable/ic_launcher" android:title="@string/get_joke"/> ActionBar public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_joke: // do whatever click should do return true; default: return super.onOptionsItemSelected(item); } }
  • 27. AsyncTask Perform asynchronous work off UI thread Publish results to UI thread AsyncTask AsyncTask<Params, Progress, Results> Short operations (few seconds)
  • 29. Services Long-running, background operations network operations play music file I/O Services Started Runs to completion Bound Interacts with calling client Only exists when bound
  • 30. Services "Runs in background" Service runs in application thread Keeps running if user switches apps You can (and should) start new thread Use AsyncTask, for example REST org.json package JSONArray JSONObject android.util package JsonReader JsonWriter
  • 31. REST org.apache.http.client packages HttpClient HttpGet HttpPost ... REST Alternative: Spring for Android http://projects.spring.io/spring-android/ RestTemplate class Map classes to JSON structure
  • 32. Other Alternatives Retrofit https://square.github.io/retrofit/ Uses OkHttp for networking OkHttp https://square.github.io/okhttp/ Networking client Storage options Shared preferences Internal storage on device External storage SQLite databases https://developer.android.com/guide/topics/data/data-storage.html
  • 33. Storage options Shared preferences key/value pairs of primitives getSharedPreferences() multiple files by name getPreferences() Storage options Internal storage openFileOutput() → FileOutputStream fos.write(...) fos.close() Same with input
  • 34. Storage options External storage SD card or internal Can share files with other apps Storage options SQLite database accessible within app only
  • 35. SQLite Extend SQLiteOpenHelper Supply constructor Override onCreate() Create tables with execSQL() SQLite Read and write using getReadableDatabase() getWriteableDatabase() Assorted query() methods
  • 36. SQLite Can access from adb shell Use sqlite3 tool Content Providers Provide data to other processes Existing providers for calendar, contacts
  • 37. Fragments Portions of a user interface Managed by activities Fragments Extend Fragment or one of its subclasses Use FragmentManager to manipulate in a FragmentTransaction
  • 38. Fragments Fragments are portions of a UI Owned by Activities Additional callback methods adb tool Android Debug Bridge Part of platform tools
  • 39. adb tool devices → list attached devices pull, push → copy files to device shell → open shell on device Gradle for Android
  • 40. Basics Android plugin for Gradle Added via buildscript Lots of customization Basics buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.2' } } apply plugin: 'com.android.application'
  • 41. Properties in build.gradle android { versionCode … versionName … } or even in gradle.properties Multi-project Builds By default, apps in AS are multi-project builds build.gradle settings.gradle Can add additional libraries, other modules, and more
  • 42. Changing the Gradle version task wrapper(type: Wrapper) { gradleVersion = 2.11 } Or edit distribution URL in gradle-wrapper. properties distributionUrl=https://services.gradle.org/distributions/gradle-2.11-all.zip Build Types Two default build types: debug release
  • 43. Configuring Build Types Use buildTypes section of build.gradle buildTypes { release { … } debug { … } } Can also add custom build types that way Configuring Build Types Each build type defines a source set src/main/ … src/debug/ … src/release/ … src/androidTest/… (discussed below)
  • 44. Configuring Build Types Resources in build type source sets replace their counterparts in main Java classes conflict, however Define class in each, or just in main Generating a Release Can't assemble a release until you can sign it
  • 45. Signing Your App Use Java's keytool to generate cert
  • 46. Signing Your App signingConfigs { release { storeFile file('ICNDB.keystore') keyAlias 'ICNDB' storePassword 'gradle_rules' keyPassword 'carlos_ray_aka_chuck' } } Signing Your App Passwords don't have to be in build file - Can use system properties - Can prompt user - Can use gradle.properties See docs for suggestions
  • 47. Signing Your App Add signingConfig to build type config buildTypes { release { // … signingConfig signingConfigs.release } } Signing Your App The signingReport task shows details
  • 48. Signing Your App Invoke assembleRelease task Resulting apk in build/outputs/apk folder Flavors and Variants buildTypes debug, release flavors → different versions of same app arrogant, friendly, obsequious
  • 49. Flavors and Variants Each flavor generates an apk Variants combine buildTypes and flavors debug+arrogant, debug+friendly, debug+obsequious release+arrogant, release+friendly, release+obsequious Multiple Flavors flavorDimensions 'attitude', 'client' productFlavors { arrogant { dimension 'attitude' } … stark { dimension 'client' } wayne { dimension 'client' } }
  • 50. Custom Tasks task copyApks(type: Copy, dependsOn: assembleDebug) { from("$buildDir/outputs/apk") { exclude '**/*unsigned.apk', '**/*unaligned.apk' } into '../apks' } Custom Tasks task printVariantNames { doLast { android.applicationVariants.all { variant -> println variant.name } } }
  • 51. Testing Unit testing Functional testing Robotium Espresso Testing With Gradle: Tests run on all connected devices simultaneously
  • 52. Testing Use androidTest source set src/androidTest/java Testing Use androidTest source set src/androidTest/java androidTestCompile dependencies
  • 53. Testing Use androidTest source set src/androidTest/java Run connectedCheck task References Android new build system http://tools.android.com/tech-docs/new-build-system http://tools.android.com/tech-docs/new-build-system/user-guide Developer's Guide section on Gradle https://developer.android.com/sdk/installing/studio-build.html Android Developers on G+ https://plus.google.com/+AndroidDevelopers/posts
  • 54. References Gradle Recipes for Android http://shop.oreilly.com/product/0636920032656.do Ask me for a coupon code :) Summary Activities and XML layouts Intents and IntentFilters Widgets Services Storage and SQLite Content providers