with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with...
Transcript of with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with...
![Page 1: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/1.jpg)
Android Development with GradleUsing the Android Plugin for Gradle
![Page 3: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/3.jpg)
Upcoming Book
Gradle for AndroidO'Reilly
Part of the Gradle series
![Page 5: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/5.jpg)
SDK Bundle
https://developer.android.com/sdk/index.html
Eclipse + ADT toolsAndroid SDK toolsAndroid Platform toolsLatest Android SDK + emulator
![Page 6: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/6.jpg)
Eclipse ADT
Does not support Gradle directly
Generate gradle build filemaps default structure to standard layoutno longer needed → can import project
![Page 7: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/7.jpg)
Gradle
Why Gradle?
![Page 8: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/8.jpg)
Gradle
Because reasons
![Page 9: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/9.jpg)
Gradle
Because reasons
(This is a Gradle conferenceYou already know why)
![Page 10: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/10.jpg)
Android Studiohttps://developer.android.com/sdk/installing/studio.html
Early Access Preview
![Page 11: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/11.jpg)
Android Studiohttps://developer.android.com/sdk/installing/studio.html
Early Access PreviewBased on IntelliJ IDEA
![Page 12: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/12.jpg)
Android Studiohttps://developer.android.com/sdk/installing/studio.html
Early Access PreviewBased on IntelliJ IDEAUses Gradle for builds
![Page 13: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/13.jpg)
Android Studiohttps://developer.android.com/sdk/installing/studio.html
Early Access PreviewBased on IntelliJ IDEAUses Gradle for builds
Early beta → beware of bugs and unsupported features
![Page 14: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/14.jpg)
Android Studio
Actually, latest version* is very useful
*As of Gradle Summit, 0.6
0.6 fixes issue with Gradle daemon
![Page 15: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/15.jpg)
Creating an application
Must select unique package namecom.example.myapp
(com.example reserved for samples)
Used in Google Play store
![Page 16: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/16.jpg)
Creating an application
Choose min SDK levelChoose target SDK level
![Page 17: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/17.jpg)
Manifest
AndroidManifest.xml<uses-sdk … />
<application>
<activity>... </activity>
…</application>
![Page 18: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/18.jpg)
Change for Gradle
Now minSdkVersion, targetSdkVersionset in build.gradle
Overrides AndroidManifest.xml
![Page 19: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/19.jpg)
Manifest
All activities must be declaredList permissionsIntent filtersServicesContent providers…
![Page 20: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/20.jpg)
Activities
Represents a screenExtend android.app.Activity
Full of callback methods
![Page 21: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/21.jpg)
Activities
Each activity has an XML layoutactivity_main.xml
activity_welcome.xml
XML tags with many attributes
![Page 22: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/22.jpg)
Activities
Callback methods:onCreate, onDestroy
onStart, onStop
onPause, onResume
… many others …
![Page 23: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/23.jpg)
res
Resources folder contains subfoldersdrawablelayoutmenuvalues...
![Page 24: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/24.jpg)
Providing resourceshttps://developer.android.com/guide/topics/resources/providing-resources.html
Specially named subdirectoriesvalues
Configuration qualifiersvalues-v11values-sw720dp-land
![Page 25: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/25.jpg)
values
keys and values → layer of indirectionstrings.xml:
<string name="hello_world">Hello world!</string>
![Page 26: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/26.jpg)
Accessing resources
XML → compiled into R.java: full of public inner classes (!)
(Button) findViewById(R.id.hello_button)
![Page 27: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/27.jpg)
Basics
Android plugin for GradleAdded via buildScript
Lots of customization
![Page 28: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/28.jpg)
Basicsbuildscript {
repositories { mavenCentral() }
dependencies {
classpath 'com.android.tools.build:gradle:0.11.1'
}
}
apply plugin: 'android'
![Page 29: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/29.jpg)
Properties in build.gradle
android {
versionCode …versionName …
}
or even in gradle.properties
![Page 30: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/30.jpg)
Multiproject Builds
By default, apps in AS are multiproject buildsbuild.gradle
settings.gradle
Can add additional libraries, ...
![Page 31: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/31.jpg)
Build Types
Two default build types:debug
release
![Page 32: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/32.jpg)
Configuring Build Types
Use buildTypes section of build.gradlebuildTypes {
release { … }
debug { … }
}
Can also add custom build types that way
![Page 33: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/33.jpg)
Configuring Build Types
Each build type defines a source setsrc/main/ …src/debug/ …src/release/ …
src/androidTest/… (discussed below)
![Page 34: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/34.jpg)
Configuring Build Types
Resources in build type source setsreplace their counterparts in main
Java classes conflict, howeverDefine class in each, or just in main
![Page 35: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/35.jpg)
Generating a Release
Can't assemble a release untilyou can sign it
![Page 36: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/36.jpg)
Signing Your App
Use Java's keytool to generate cert
![Page 37: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/37.jpg)
![Page 38: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/38.jpg)
Signing Your App
Add signing block to build.gradlesigningConfigs {
release {
storeFile file('ICNDB.keystore')
keyAlias 'ICNDB'
storePassword 'gradle_rules'
keyPassword 'carlos_ray_aka_chuck'
}
}
![Page 39: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/39.jpg)
Signing Your App
Passwords don't have to be in build file- Can use system properties- Can prompt user- Can use external files
See docs for suggestions
![Page 40: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/40.jpg)
Signing Your App
Add signingConfig to build type config buildTypes {
release {
// …
signingConfig signingConfigs.release
}
}
![Page 41: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/41.jpg)
Signing Your App
The signingReport task shows details
![Page 42: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/42.jpg)
Signing Your App
Invoke assembleRelease taskResulting apk in build/apk folder
![Page 43: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/43.jpg)
Testing
Use androidTest source setsrc/androidTest/java
![Page 44: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/44.jpg)
Testing
Use androidTest source setsrc/androidTest/java
compileAndroidTest dependencies
![Page 45: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/45.jpg)
Testing
Use androidTest source setsrc/androidTest/java
compileAndroidTest dependencies
Run connectedCheck task
![Page 46: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/46.jpg)
Flavors and Variants
buildTypesdebug, release
flavors → different versions of same appfree, paid
![Page 47: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/47.jpg)
Flavors and Variants
Each flavor generates an apk
Variants combine buildTypes and flavorsfree+debug, free+release,paid+debug, paid+release
![Page 48: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/48.jpg)
Multiple Flavors
See flavors sampleSee basicMultiFlavors sample
flavorDimensions …productFlavors { … }
![Page 49: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/49.jpg)
REST
Alternative:Spring for Android
http://projects.spring.io/spring-android/
RestTemplate classMap classes to JSON structure
![Page 50: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/50.jpg)
References
Android new build systemhttp://tools.android.com/tech-docs/new-build-system http://tools.android.com/tech-docs/new-build-system/user-guide
Developer's Guide section on Gradlehttps://developer.android.com/sdk/installing/studio-build.html
Android Developers on G+https://plus.google.com/+AndroidDevelopers/posts
![Page 51: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/51.jpg)
References
Xavier Ducrohet on G+https://plus.google.com/+XavierDucrohet/posts
adt-dev on Google Groupshttps://groups.google.com/forum/#!forum/adt-dev
![Page 52: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/52.jpg)
The Ultimate Android OS
Spock Testing Shouldn't
Data run on Android?
![Page 53: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle](https://reader030.fdocuments.us/reader030/viewer/2022021418/5a71cbdb7f8b9aa2538d222f/html5/thumbnails/53.jpg)
The Ultimate Android OS