gradle enabled android project
Embed Size (px)
DESCRIPTION
Learn to use gradle in android project You can find the samples here: https://github.com/shakalaca/learning_gradle_androidTRANSCRIPT

Gradle enabled android project
shakalaca @ Taipei GTUG
1

about.me/shakalaca
http://profiles.google.com/shakalaca
2

Outline• Gradle introduction
• Step by step tutorial
• Basic
• Dependency
• Sign / Proguard
• Variant
• Android Studio integration
• Q & A
3

Gradle
4

What is gradle ?Gradle is build automation evolved. Gradle can automate the building, testing, publishing, deployment and more of software packages or other types of projects such as generated static websites, generated documentation or indeed anything else.
Gradle combines the power and flexibility of Ant with the dependency management and conventions of Maven into a more effective way to build. Powered by a Groovy DSL and packed with innovation, Gradle provides a declarative way to describe all kinds of builds through sensible defaults. Gradle is quickly becoming the build system of choice for many open source projects, leading edge enterprises and legacy automation challenges.
- http://www.gradle.org/
5

.. short version
An open source build system that combines the power of Ant & Maven
6

Why gradle ?
• Powerful Build System
• Declarative, Flexible
• Imperative customization
• Tooling API
• Build System Toolkit
• Plugins create own DSL, APIs, IDE integration
• Free / Open Source
7

Android project integration
• gradle android plugin
• http://tools.android.com/tech-docs/new-build-system/
=
8

command• format
• gradle <command>
• command
• tasks
• assemble
• assemble release
• assemble debug
• aR
9

output
• <project>/build/apk/
10

Basic
11

Eclipse project
12

13

build.gradle
• apply plugin: ‘android’
• dependencies
• compileSdkVersion
• buildToolsVersion
• defaultConfig
• sourceSets
14

dependencies
• compile project(‘:project1’)
• compile fileTree(dir: ‘libs’, include: ‘*.jar’)
• compile files(‘libs/android-support-v4.jar’)
• compile ‘com.android.support:support-v4:13.0.0’
15

android packages
• com.android.support:support-v4:13.0.0
• com.android.support:support-v13:13.0.0
• com.android.support:gridlayout-v7:13.0.0
• com.google.android.gms:play-services:3.1.36
16

android packages
• com.android.support:support-v4:18.0.0
• com.android.support:support-v13:18.0.0
• com.android.support:gridlayout-v7:18.0.0
• com.google.android.gms:play-services:3.2.25
17

defaultConfig
• versionCode
• versionName
• minSdkVersion
• targetSdkVersion
• packageName
• testPackageName
• testInstrumentationRunner
• signingConfig
• proguardFile
• proguardFiles
18

Dependency
19

Project structure
20

21

settings.gradle
• Used in multi-project hierarchy
• Define projects to be used in build
22

settings.gradle
23

settings.gradle
24

er .. no direct way ?
25

26

27

28

Sign release key
29

30

Build Types
• default 2 types: debug & release
• for debugging & signing
31

Build Types
• debuggable
• jniDebugBuild
• renderscriptDebugBuild
• renderscriptOptimLevel
• packageNameSuffix
• versionNameSuffix
• signingConfig
• zipAlign
• runProguard
• proguardFile
• proguardFiles
32

tips
• Save your gradle.properties in ~/.gradle/
• .. If you work alone
33

Proguard
34

35

Variant
36

Build variants
• Creating different versions of same application
• free/paid
• multi-apk
• Build Variant = Build Type + Product Flavor
37

Product Flavors
• Defines a customized version of application build by the project
• Free / Paid
• Amazon / Play Store / blah store
• Same type as defaultConfig
38

39

40

One more thing
41

gradle wrapper
• Setup gradle automatically
• $ANDROID_HOME/tools/templates/gradle/wrapper/
42

43

summry
• simple android project
• sign release key
• run proguard
• build variants
• wrapper
44

Android Studio integration
45

Android Studio integrationBETA
46

Survival guide
Rule #1Always backup your project.
47

Survival guide
Rule #2Don’t import production code until 1.0 is out..
48

Best practice ?
• Import modules manually
• pro
• short compile / AS startup time
• consider project with multiple libraries..
• con
• no variant builds (ok for most people)
49

R U KIDDING ME ?
50

51

Basic
52

53

configurations
54

55

import..
56

import..
57

import..
58

import..
59

Piece of cake
60

Dependency
61

project layout
62

configurations
63

... errrrrr
• Don’t recognize as library project
• No typo checking, no function reference, no ...
• But you can still build the project
64

duplicated name ?
65

try another way
66

errrrrrr
67

68

Refine project layout
69

working configurations
70

tips
• as simple as possible
• library/xxx_lib
• use ‘:’ instead of ‘/’ in path
• ugly, but runs fine
71

Local repository
72

What & Why ?
• Use aar instead of re-compiling everything
• aar: Binary distribution of an Android Library Project
• http://tools.android.com/tech-docs/new-build-system/aar-format
• Time is money
• DRY
73

project layout
74

root-build.gradle
75

library/build.gradle
76

project/build.gradle
• archivesBaseName
• version
77

app/build.gradle
78

How
• deploy library
• ./gradlew deploy
• use local repository
• ./gradlew as -PuseRepo
79

Tricks
80

rename apk
81

launch after install
82

move out apk
83

Refresh cache
• --refresh-dependencies
• stay up-to-date (?)
http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:cache_command_line_options
84

Q & A
85

References
• http://tools.android.com/tech-docs/new-build-system
• Guide / Samples
• http://www.gradle.org/documentation
86