Антон Руткевич, Сборка Android-библиотеки нового поколения с помощью Gradle
Gradle enabled android project
Click here to load reader
-
Upload
shaka-huang -
Category
Self Improvement
-
view
5.569 -
download
4
description
Transcript of Gradle enabled android project
![Page 1: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/1.jpg)
Gradle enabled android project
shakalaca @ Taipei GTUG
1
![Page 2: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/2.jpg)
about.me/shakalaca
http://profiles.google.com/shakalaca
2
![Page 3: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/3.jpg)
Outline• Gradle introduction
• Step by step tutorial
• Basic
• Dependency
• Sign / Proguard
• Variant
• Android Studio integration
• Q & A
3
![Page 4: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/4.jpg)
Gradle
4
![Page 5: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/5.jpg)
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
![Page 6: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/6.jpg)
.. short version
An open source build system that combines the power of Ant & Maven
6
![Page 7: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/7.jpg)
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
![Page 8: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/8.jpg)
Android project integration
• gradle android plugin
• http://tools.android.com/tech-docs/new-build-system/
=
8
![Page 9: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/9.jpg)
command• format
• gradle <command>
• command
• tasks
• assemble
• assemble release
• assemble debug
• aR
9
![Page 10: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/10.jpg)
output
• <project>/build/apk/
10
![Page 11: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/11.jpg)
Basic
11
![Page 12: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/12.jpg)
Eclipse project
12
![Page 13: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/13.jpg)
13
![Page 14: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/14.jpg)
build.gradle
• apply plugin: ‘android’
• dependencies
• compileSdkVersion
• buildToolsVersion
• defaultConfig
• sourceSets
14
![Page 15: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/15.jpg)
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
![Page 16: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/16.jpg)
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
![Page 17: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/17.jpg)
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
![Page 18: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/18.jpg)
defaultConfig
• versionCode
• versionName
• minSdkVersion
• targetSdkVersion
• packageName
• testPackageName
• testInstrumentationRunner
• signingConfig
• proguardFile
• proguardFiles
18
![Page 19: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/19.jpg)
Dependency
19
![Page 20: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/20.jpg)
Project structure
20
![Page 21: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/21.jpg)
21
![Page 22: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/22.jpg)
settings.gradle
• Used in multi-project hierarchy
• Define projects to be used in build
22
![Page 23: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/23.jpg)
settings.gradle
23
![Page 24: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/24.jpg)
settings.gradle
24
![Page 25: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/25.jpg)
er .. no direct way ?
25
![Page 26: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/26.jpg)
26
![Page 27: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/27.jpg)
27
![Page 28: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/28.jpg)
28
![Page 29: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/29.jpg)
Sign release key
29
![Page 30: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/30.jpg)
30
![Page 31: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/31.jpg)
Build Types
• default 2 types: debug & release
• for debugging & signing
31
![Page 32: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/32.jpg)
Build Types
• debuggable
• jniDebugBuild
• renderscriptDebugBuild
• renderscriptOptimLevel
• packageNameSuffix
• versionNameSuffix
• signingConfig
• zipAlign
• runProguard
• proguardFile
• proguardFiles
32
![Page 33: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/33.jpg)
tips
• Save your gradle.properties in ~/.gradle/
• .. If you work alone
33
![Page 34: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/34.jpg)
Proguard
34
![Page 35: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/35.jpg)
35
![Page 36: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/36.jpg)
Variant
36
![Page 37: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/37.jpg)
Build variants
• Creating different versions of same application
• free/paid
• multi-apk
• Build Variant = Build Type + Product Flavor
37
![Page 38: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/38.jpg)
Product Flavors
• Defines a customized version of application build by the project
• Free / Paid
• Amazon / Play Store / blah store
• Same type as defaultConfig
38
![Page 39: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/39.jpg)
39
![Page 40: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/40.jpg)
40
![Page 41: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/41.jpg)
One more thing
41
![Page 42: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/42.jpg)
gradle wrapper
• Setup gradle automatically
• $ANDROID_HOME/tools/templates/gradle/wrapper/
42
![Page 43: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/43.jpg)
43
![Page 44: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/44.jpg)
summry
• simple android project
• sign release key
• run proguard
• build variants
• wrapper
44
![Page 45: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/45.jpg)
Android Studio integration
45
![Page 46: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/46.jpg)
Android Studio integrationBETA
46
![Page 47: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/47.jpg)
Survival guide
Rule #1Always backup your project.
47
![Page 48: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/48.jpg)
Survival guide
Rule #2Don’t import production code until 1.0 is out..
48
![Page 49: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/49.jpg)
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
![Page 50: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/50.jpg)
R U KIDDING ME ?
50
![Page 51: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/51.jpg)
51
![Page 52: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/52.jpg)
Basic
52
![Page 53: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/53.jpg)
53
![Page 54: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/54.jpg)
configurations
54
![Page 55: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/55.jpg)
55
![Page 56: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/56.jpg)
import..
56
![Page 57: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/57.jpg)
import..
57
![Page 58: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/58.jpg)
import..
58
![Page 59: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/59.jpg)
import..
59
![Page 60: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/60.jpg)
Piece of cake
60
![Page 61: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/61.jpg)
Dependency
61
![Page 62: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/62.jpg)
project layout
62
![Page 63: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/63.jpg)
configurations
63
![Page 64: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/64.jpg)
... errrrrr
• Don’t recognize as library project
• No typo checking, no function reference, no ...
• But you can still build the project
64
![Page 65: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/65.jpg)
duplicated name ?
65
![Page 66: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/66.jpg)
try another way
66
![Page 67: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/67.jpg)
errrrrrr
67
![Page 68: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/68.jpg)
68
![Page 69: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/69.jpg)
Refine project layout
69
![Page 70: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/70.jpg)
working configurations
70
![Page 71: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/71.jpg)
tips
• as simple as possible
• library/xxx_lib
• use ‘:’ instead of ‘/’ in path
• ugly, but runs fine
71
![Page 72: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/72.jpg)
Local repository
72
![Page 73: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/73.jpg)
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
![Page 74: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/74.jpg)
project layout
74
![Page 75: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/75.jpg)
root-build.gradle
75
![Page 76: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/76.jpg)
library/build.gradle
76
![Page 77: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/77.jpg)
project/build.gradle
• archivesBaseName
• version
77
![Page 78: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/78.jpg)
app/build.gradle
78
![Page 79: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/79.jpg)
How
• deploy library
• ./gradlew deploy
• use local repository
• ./gradlew as -PuseRepo
79
![Page 80: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/80.jpg)
Tricks
80
![Page 81: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/81.jpg)
rename apk
81
![Page 82: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/82.jpg)
launch after install
82
![Page 83: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/83.jpg)
move out apk
83
![Page 84: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/84.jpg)
Refresh cache
• --refresh-dependencies
• stay up-to-date (?)
http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:cache_command_line_options
84
![Page 85: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/85.jpg)
Q & A
85
![Page 86: Gradle enabled android project](https://reader038.fdocuments.net/reader038/viewer/2022102510/53fb92f18d7f72e2698b45a0/html5/thumbnails/86.jpg)
References
• http://tools.android.com/tech-docs/new-build-system
• Guide / Samples
• http://www.gradle.org/documentation
86