53
Android Development with Gradle Using the Android Plugin for Gradle

with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

  • Upload
    doandan

  • View
    275

  • Download
    1

Embed Size (px)

Citation preview

Page 1: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

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

Upcoming Book

Gradle for AndroidO'Reilly

Part of the Gradle series

Page 4: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

Android Home Page

Developer home pagehttp://developer.android.com

Page 5: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

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

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

Gradle

Why Gradle?

Page 8: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

Gradle

Because reasons

Page 9: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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
Page 38: with Gradle Android Development - Rich Web Experience · PDF fileAndroid Development with Gradle Using the Android Plugin for Gradle

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

The Ultimate Android OS