ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah
-
Upload
dicoding -
Category
Technology
-
view
292 -
download
0
Transcript of ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah
![Page 1: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/1.jpg)
Anton Nurdin TSenior Software Engineer, Xendit
anton46.com
DEEP UNDERSTANDING ABOUT
![Page 2: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/2.jpg)
What is Gradle?
![Page 3: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/3.jpg)
Android Build System
![Page 4: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/4.jpg)
Android Build System
antMaven
Gradle
SBT
buck
![Page 5: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/5.jpg)
Build Process
![Page 6: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/6.jpg)
![Page 7: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/7.jpg)
Multi-Language
Resource/Code Generation
Platform Diversity
![Page 8: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/8.jpg)
Why Gradle?1. Powerful Build System
- Declarative, Flexible- Imperative Customization - Tooling API
2. Build System Toolkit- Plugins create own DSL, APIs, IDE integration
3. Free/Open Source
![Page 9: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/9.jpg)
StructureSettings File
- settings.gradle
![Page 10: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/10.jpg)
StructureSettings File
- settings.gradle
Top-level Build File
![Page 11: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/11.jpg)
Top-level Build File
buildscript { repositories { jcenter() }
dependencies { classpath 'com.android.tools.build:gradle:2.0.0' } }
allprojects { repositories { jcenter() } }
build.gradle
![Page 12: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/12.jpg)
StructureSettings File
- settings.gradle
Top-level Build File
![Page 13: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/13.jpg)
StructureSettings File
- settings.gradle
Top-level Build File
Module-level Build File
![Page 14: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/14.jpg)
apply plugin: 'com.android.application'
android { compileSdkVersion 23 buildToolsVersion "23.0.3"
defaultConfig { ... }
buildTypes { ... }
productFlavors { ... } }
dependencies { ... }
Module-level Build File
build.gradle
![Page 15: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/15.jpg)
Gradle Tasksassemble
check
build
clean
assemble + check
assembleDebug + assembleRelease
connectedCheckdeviceCheck
![Page 16: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/16.jpg)
COSTUMIZATION
![Page 17: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/17.jpg)
Basic Customization
android { compileSdkVersion 23 buildToolsVersion "23.0.3"
defaultConfig { minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } }
build.gradle
![Page 18: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/18.jpg)
Basic Customization
def getVersionCode() { def code = ... return code; }
android { defaultConfig { versionCode getVersionCode()
... } }
build.gradle
![Page 19: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/19.jpg)
Basic Customizationandroid { defaultConfig {
applicationId “com.example.app” minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0"
applicationVariants.all { variant -> variant.outputs.each { output -> def file = output.outputFile def fileName = file.name.replace(".apk", "-v" + versionName + "-c" + versionCode + ".apk") output.outputFile = new File(file.parentFile, fileName) } } } }
build.gradle
![Page 20: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/20.jpg)
Basic Customization
app-debug-v1.0-c1.apk
app-release-v1.0-c1.apk
![Page 21: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/21.jpg)
Build Types- Build / Packaging customization
• Debuggable flag • ProGuard • Signing Configuration • Source / Resource Overlay\
- Debug and release prebuilt
![Page 22: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/22.jpg)
Build Types
android { buildTypes { debug { applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' } beta { applicationIdSuffix '.beta' versionNameSuffix '-BETA' } } }
build.gradle
![Page 23: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/23.jpg)
Build Types : Source Folder
src/main/AndroidManifest.xml src/main/java src/main/resource src/main/res src/main/assets src/main/aidl src/main/rs src/main/jni
src/debug/... src/release/... src/beta/...
src/androidTest/java src/androidTest/resource src/androidTest/res src/androidTest/assets src/androidTest/aidl src/androidTest/rs src/androidTest/jni
![Page 24: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/24.jpg)
Gradle Tasksassemble
check
build
clean
assemble + check
assembleDebug + assembleRelease + assembleBeta
connectedCheckdeviceCheck
![Page 25: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/25.jpg)
Signing Configuration
\
android { signingConfigs { release { storeFile file('<name>.keystore') keyAlias 'keyAlias' keyPassword 'keyPassword' storePassword 'storePassword' } } }
build.gradle
![Page 26: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/26.jpg)
Debuggable Release Builds
\
android { signingConfigs { debugRelease.intiWith(buildTypes.release) debugRelease { debuggable true applicationIdSuffix '.debugrelease' signingConfig signingConfigs.debug } } }
build.gradle
![Page 27: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/27.jpg)
DEPENDENCIES
![Page 28: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/28.jpg)
Dependency Scope: Java Projects
compile
\
runtime
testCompiletestRuntime
![Page 29: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/29.jpg)
Dependency Scope: Android Projects
compile
\
runtime
testCompiletestRuntime
compile
package
androidTestCompileandroidTestPackage
![Page 30: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/30.jpg)
Local Dependencies
\
android { ... }
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
build.gradle
![Page 31: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/31.jpg)
Remote Dependencies
\
repositories { jcenter() }
android { ... }
dependencies { compile 'com.android.support:appcompat-v7:23.2.1'
}
build.gradle
![Page 32: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/32.jpg)
Multi-Project Setup
\
settings.gradle
include ':app' include ':libraries:lib1' include ':libraries:lib2'
MyProject/ | settings.gradle + app/ | build.gradle
+ libraries/ + lib1/ | build.gradle
+ lib2/ | build.gradle
![Page 33: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/33.jpg)
Project Dependencies
\
android { ... }
dependencies { compile project(‘:libraries:lib1’)
}
build.gradle
![Page 34: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/34.jpg)
Android Library Project
\
apply plugin: 'com.android.library'
android { compileSdkVersion 23 buildToolsVersion '23.0.1' }
build.gradle
![Page 35: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/35.jpg)
Android Library- Binary Bundle (.aar)
• Uploadable to repositories
\- Support for
• assets • Proguard rules • Custom Lint rules • . . .
![Page 36: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/36.jpg)
BUILD VARIANTS
![Page 37: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/37.jpg)
Product Flavors- Different versions of the same application
• Paid vs Free • Multi-APK support in Google Play
\- Different Dimension(s) than BuildTypes
![Page 38: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/38.jpg)
Android Library Project
\
android { productFlavors { flavour1 { applicationId "com.example.flavour1" minSdkVersion 16 } flavour2 { applicationId "com.example.flavour2" } } }
build.gradle
![Page 39: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/39.jpg)
Build Types : Source Folder
src/main/AndroidManifest.xml src/main/java src/main/resource src/main/res src/main/assets src/main/aidl src/main/rs src/main/jni
src/androidTest/java src/androidTest/resource src/androidTest/res src/androidTest/assets src/androidTest/aidl src/androidTest/rs src/androidTest/jni
src/debug/... src/release/... src/beta/... src/flavor1/... src/androidTestFlavor1/...
![Page 40: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/40.jpg)
Variant = Build Type + Product Flavor(s)
No Flavors :
\debug release
- debug release
- - -
![Page 41: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/41.jpg)
Variant = Build Type + Product Flavor(s)
No Flavors :
\
debug release
- debug release
- - -
With Flavors : debug release
Flavor1 Flavor1Debug Flavor1Release
Flavor2 Flavor2Debug Flavor2Release
![Page 42: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/42.jpg)
Build Variants : Source Code
Multiple source folders, single output
src/main/java
src/debug/java
src/free/java
![Page 43: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/43.jpg)
Build Variants : Resource
Overlays
src/main/res
src/debug/res
src/free/res
![Page 44: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/44.jpg)
Build Variants : Signing Configuration
Priority Order
android.defaultConfig.signingConfig
android.buildTypes.release.signingConfig
android.productFlavors.free.signingConfig
![Page 45: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/45.jpg)
Build Variants : Package Name
Overlays + Suffix
android.defaultConfig.packageName
android.productFlavors.free.signingConfig
+ android.buildTypes.debug.packageNameSuffix
src/main/AndroidManifest.xml
![Page 46: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/46.jpg)
Build Variants : Proguard
android { ... buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
productFlavors { flavor2 { proguardFile 'flavor2-rules.pro' } } }
build.gradle
![Page 47: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/47.jpg)
Res / Code Generation
buildConfigField
resValue
![Page 48: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/48.jpg)
build.gradleandroid { buildTypes { debug { buildConfigField "String", "SERVER_URL", '"http://staging.example.co"' resValue "string", "facebook_app_id", '"12345678910'
... } release { buildConfigField "String", "SERVER_URL", '"https://example.co"' resValue "string", "facebook_app_id", '"0987654321'
... } } }
Res / Code Generation
![Page 49: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/49.jpg)
PERFORMACE
![Page 50: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/50.jpg)
GRADLE IS FAST
![Page 51: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/51.jpg)
GRADLE IS FAST
200 Projects
grade clean assemble —-parallel 7s
![Page 52: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/52.jpg)
• Android Studio IDE (Android Tooling Team) • Gradle Android Plugin (Android Tooling Team) • Gradle Flatform (Gradle Team) • Android Tooling (Android Platform Team)
Toolchain
![Page 53: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/53.jpg)
BOTLENECK
![Page 54: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/54.jpg)
Clean Install (61.9s)
1%8%
46% 27%
3%14% Install (8.89s)
After Dexing (2.06s)Dex (16.67s)Pre-Dex (28.54s)Before Dexing (5.04)Configuration (0.65)
![Page 55: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/55.jpg)
Install After Code Change (33.31s)
2%15%
50%
6%
27% Install (8.89s)After Dexing (2.06s)Dex (16.67s)Before Dexing (5.04s)Configuration (0.65s)
![Page 56: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/56.jpg)
PRE-DEXINGDEXING
![Page 57: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/57.jpg)
Hint• Enable the Gradle daemon and parallel build
dexOptions { incremental true }
• Incremental dexing
~/.gradle/gradle.properties
org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx1024m org.gradle.java.home=/path/to/jvm
• Offline Mode• Separate project into modules
![Page 58: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/58.jpg)
https://source.android.com/source/jack.html
Jack Compiler
![Page 59: ID Android TechTalk Series #6 : Google Service and Gradle - Anton Nurdin Tuhadiansyah](https://reader034.fdocuments.us/reader034/viewer/2022051709/587542151a28abb8208b537d/html5/thumbnails/59.jpg)
http://gradle.org/training/