SlideShare a Scribd company logo
Gradle and
Your Android
Wearable
Projects
Copyright © 2014 CommonsWare, LLC
One APK To Rule Them All
●

One APK, regardless of device type

●

Original Android development vision

●

●

Still works for conventional apps... within
reason
Starts to break down as you go beyond
traditional device types into things like
wearables

Copyright © 2014 CommonsWare, LLC
Presentation Terminology
●

Device
●

Runs a mainstream mobile operating system, designed for
multiple form factors
–
–

●

Today: Android, Tizen
Tomorrow: who knows?

Accessory
●

●

●

Runs some dedicated OS
Most/all app logic resides on tethered phone or tablet

Hybrid: dedicated OS, but apps run on wearable

Copyright © 2014 CommonsWare, LLC
Terminology Examples
●

Device
●
●

Omate TrueSmart

●

I'm Watch

●

●

Google Glass

Samsung Gear 2 / Gear 2 Neo

Accessory
●
●

Samsung Gear Fit

●

●

SONY SmartWatch/SW2
Fitbit

Hybrid
●

Pebble

Copyright © 2014 CommonsWare, LLC
Wearables: Why Multiple APKs?
●

CPU architecture

●

Distribution channel (e.g., no Play Services)

●

Per-device libraries
●

Licensing

●

Bulk

●

API level

●

Entry points and security

●

Resources

Copyright © 2014 CommonsWare, LLC
A Specific Wearable Scenario
●

Main App
●

●

SONY SW2
●

●

Phones, tablets, modern Android wearable devices
(Omate TrueSmart)
Dedicated libraries

I'm Watch
●

Workarounds where new API options are missing

Copyright © 2014 CommonsWare, LLC
Other Possible Scenarios
●

Samsung Gear Fit
●

●

Dedicated libraries, dedicated distribution channel

Google Glass
●

●

●

New UI backed by common code
Dedicated distribution channel

Pebble
●

Separate C language project for on-device portion of app

●

Android project for the on-phone tethered side

Copyright © 2014 CommonsWare, LLC
Classic Solution: Library Project
●

Common materials in the library
●

Java code

●

Standard resources

●

Per-device apps that leverage the library

●

Works, but a bit clunky
●

Future: relegated to cases where library needs to
be used by totally disparate apps

Copyright © 2014 CommonsWare, LLC
Gradle Solution: Product Flavors
●

One Project, N Flavors
●

●

Alternative Java classes (one per flavor)

●

●

Additions to manifest
Additional or replacement resources

Each Flavor Generates Own APK
●

●

Unique package name, but independent from your
R classes

Other techniques available as well

Copyright © 2014 CommonsWare, LLC
What Is Gradle?
●

Role: Build Automation
●

●

Implementation: It's Groovy
●

●

Think Ant plus Maven plus other goodness
DSL implemented in Groovy, blending declarative
structures and full-blown scripting

Provider: Gradleware
●

Open source, Apache licensed

Copyright © 2014 CommonsWare, LLC
Gotta Getta Gradle
●

Direct Download

●

The Gradle Wrapper
●

gradlew script and related files in a repo

●

Designed for boostrapping
–
–

●

Running the script does a Gradle build
Running the script installs Gradle itself if development
machine does not have it

Actual Gradle comes from wherever script says
–

Net: only use this if you REALLY trust the source

Copyright © 2014 CommonsWare, LLC
The Basic Gradle Process
●

Write build.gradle File
●

●

Same role as build.xml for Ant, etc.

●

●

Describes sources and results
Usually in root of project directory

Run gradle / gradlew
●

Supply task name as command-line parameter

●

Optional: IDE integration

Copyright © 2014 CommonsWare, LLC
Escape From Eclipse
●

Exporting a build.gradle
●

Export wizard in Eclipse through current ADT

●

Choose project(s) to export

●

Get build.gradle files generated for you
–

●

A bit more complicated than the normal build.gradle
starting point due to legacy project structure

NOTE: Not Kept in Sync!
●

Project changes in Eclipse do not mirror to
build.gradle!

Copyright © 2014 CommonsWare, LLC
build.gradle: High-Level View
●

buildscript {}
●

Describing dependencies for running the build

●

Key: Android plugin

●

apply plugin: 'android'

●

dependencies {}
●

●

Describing compile-time dependencies (JARs, etc.)

android {}
●

Tailoring what Android builds for you

Copyright © 2014 CommonsWare, LLC
Tons o' Tasks
●

assemble*
●

●

●

Compiles APK for you
Tied to “build type” (assembleDebug,
assembleRelease are default)

install*
●

Installs APK on device for you, after assembly

●

Only installDebug works by default
–

installRelease requires configuring your signing
keys

Copyright © 2014 CommonsWare, LLC
Project Structures, Old and New
●

Original Recipe
●

●

●

src/, res/, assets/ in top-level project directory
libs/ also in top-level project directory

New Project Structure
●

src/, res/, assets/ in subdirectory
–
–

●

main/ by default
Others by “build type” or “product flavor”

libs/ remains in top-level directory
–

Or gone, replaced by artifacts

Copyright © 2014 CommonsWare, LLC
Pieces of New Project Structure
●

Source Sets

●

Build Types

●

Product Flavors

●

Build Variants

Copyright © 2014 CommonsWare, LLC
Source Sets
●

Gradle Construct for Organizing “Source”
●

●

In Android's case, includes resources and assets

Vision
●

●

Have one main/ source set with most of your code
Have alternatives in other source sets, used
conditionally
–

Resources, assets: can replace main/ source set

–

Java: cannot replace main/, can only add

Copyright © 2014 CommonsWare, LLC
Build Types
●

Android Plugin Construct for Describing
Output Variations
●

●

Two build types come default: debug and
release

Build Types Configurable
●

●

●

Project properties in build.gradle
Source sets

Define Others As Needed
●

Smoke tests, debuggable-release builds, etc.

Copyright © 2014 CommonsWare, LLC
Product Flavors and Build Variants
●

Product Flavors
●

●

●

Android plugin construct for different deployment
variations
None defined by default, can create your own

Build Variants
●

●

Cross product of build types and product flavors
Drive task names (assembleSonyDebug) and
results

Copyright © 2014 CommonsWare, LLC
Quick Dependencies Overview
●

Sub-Projects

●

JARs
●

●

AARs
●

●

compile fileTree(), sub-projects, or replace
with artifacts
Compiled Android library projects

Artifacts
●

Maven Central and/or your own repositories

●

JARs and AARs supported

Copyright © 2014 CommonsWare, LLC
Specific Scenario Build Script
●

One Project

●

Three Product Flavors
●

standard

●

sony

●

imwatch

Copyright © 2014 CommonsWare, LLC
Flavor-Specific Changes
●

SONY
●

sonyCompile

●

Hand-rolled local artifacts for SONY libraries
–

●

Long-term: hope they publish to Maven Central or own
artifact repository

I'm Watch
●

Resources

Copyright © 2014 CommonsWare, LLC
What You Get
●

Three APKs
●

●

●

Two for Play Store distribution (standard and
SONY)
One for dedicated distribution (I'm Watch)

In general, one APK per build variant
●

For release = one APK per product flavor

Copyright © 2014 CommonsWare, LLC
Gradle Pros...
●

One build system to rule them all
●

●

...in the fullness of time

Much more powerful than Ant for
command-line builds

●

More flexible options for code reuse

●

Richer build script syntax

Copyright © 2014 CommonsWare, LLC
...and Cons
●

Android Studio still a work in progress

●

No Eclipse support yet

●

Gradle for Android still has its own bugs and
limitations

●

Breaking changes with updates

●

AAR packaging far from universal
●

...let alone being artifacts for easy consumption

Copyright © 2014 CommonsWare, LLC
Where To Learn More
●

http://tools.android.com/
●

Home of the Android tools team

●

Information on Gradle for Android, Android Studio
–

●

http://gradle.org
●

●

For general Gradle information

http://gradleware.com
●

●

Note: much is out of date!

Firm behind Gradle's development, offering training and consulting

http://commonsware.com/Android
●

Some book by some balding guy

●

Several chapters on Gradle for Android

Copyright © 2014 CommonsWare, LLC

More Related Content

PDF
Getting Android Developers for Your Wearables
PDF
When Microwatts Are Precious: Battery Tips for Wearable Apps
PDF
Rich Text Editing and Beyond
PDF
Android Security: Defending Your Users
PDF
Backwards Compatibility: Strategies and Tactics
PDF
Google TV For Fun
PDF
App integration: Strategies and Tactics
PDF
App Integration (Revised and Updated)
Getting Android Developers for Your Wearables
When Microwatts Are Precious: Battery Tips for Wearable Apps
Rich Text Editing and Beyond
Android Security: Defending Your Users
Backwards Compatibility: Strategies and Tactics
Google TV For Fun
App integration: Strategies and Tactics
App Integration (Revised and Updated)

What's hot (20)

PDF
Embedded Android Workshop with Pie
PDF
Targeting Android with Qt
PDF
Effective Spring on Kubernetes
PPTX
Google I/O 2019 - what's new in Android Q and Jetpack
PDF
The unconventional devices for the video streaming in Android
PDF
Embedded Android Workshop with Marshmallow
PDF
Developer Student Clubs NUK - Flutter for Beginners
PDF
IPhone Web Development With Grails from CodeMash 2009
PDF
Introduce Android TV and new features from Google I/O 2016
PDF
Rapid and Reliable Developing with HTML5 & GWT
PDF
Embedded Android Workshop with Lollipop
PPTX
Flutter not yet another mobile cross-platform framework - i ox-kl19
PDF
Mobile development with Flutter
PDF
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
PPTX
UI Automation Using Flutter
PDF
Flutter101
PPTX
[Android] DI in multimodule application
KEY
Web and Native in 2012
PDF
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
PDF
JHipster for Spring Boot webinar
Embedded Android Workshop with Pie
Targeting Android with Qt
Effective Spring on Kubernetes
Google I/O 2019 - what's new in Android Q and Jetpack
The unconventional devices for the video streaming in Android
Embedded Android Workshop with Marshmallow
Developer Student Clubs NUK - Flutter for Beginners
IPhone Web Development With Grails from CodeMash 2009
Introduce Android TV and new features from Google I/O 2016
Rapid and Reliable Developing with HTML5 & GWT
Embedded Android Workshop with Lollipop
Flutter not yet another mobile cross-platform framework - i ox-kl19
Mobile development with Flutter
Chrome Dev Summit Highlights (NYC GDG Dec 2013)
UI Automation Using Flutter
Flutter101
[Android] DI in multimodule application
Web and Native in 2012
Mastering the NDK with Android Studio 2.0 and the gradle-experimental plugin
JHipster for Spring Boot webinar
Ad

Similar to Gradle and Your Android Wearable Projects (20)

PDF
LinkedIn's Consistent Android Testing Environments Using Gradle
PPTX
Google ART (Android RunTime)
PDF
Android Development Tutorial V3
PPTX
Build your android app with gradle
PPTX
Apache Maven
PDF
Open Source Jumpstart Tooling Up Intro
PDF
Embedded Android Workshop with Marshmallow
PDF
Embedded Android Workshop with Lollipop
PDF
Continuous integration for androids
PDF
Voxxed days Vilnius 2015 - Android Reverse Engineering Lab
PPTX
Android Application Development
ODP
Intoduction to Android Development
PDF
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
PDF
Droidcon uk2012 androvm
PDF
Embedded Android Workshop with Nougat
PPTX
Mobile UI Testing using Appium and Docker
PDF
Embedded Android Workshop with Marshmallow
PDF
Embedded Android Workshop with Marshmallow
PPTX
Apigee deploy grunt plugin.1.0
PPTX
LinkedIn's Consistent Android Testing Environments Using Gradle
Google ART (Android RunTime)
Android Development Tutorial V3
Build your android app with gradle
Apache Maven
Open Source Jumpstart Tooling Up Intro
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with Lollipop
Continuous integration for androids
Voxxed days Vilnius 2015 - Android Reverse Engineering Lab
Android Application Development
Intoduction to Android Development
ENIB 2015-2016 - CAI Web - S01E01- La forge JavaScript
Droidcon uk2012 androvm
Embedded Android Workshop with Nougat
Mobile UI Testing using Appium and Docker
Embedded Android Workshop with Marshmallow
Embedded Android Workshop with Marshmallow
Apigee deploy grunt plugin.1.0
Ad

More from CommonsWare (20)

PDF
The Action Bar: Front to Back
PDF
Secondary Screen Support Using DisplayManager
PDF
Mastering the Master Detail Pattern
PDF
Not Quite As Painful Threading
PDF
Android Development: The 20,000-Foot View
PDF
Maps V2... And You!
PDF
A Deep Dive Into ViewPager
PDF
Second-Screen Support in Android 4.2
PDF
Integrate Android Apps and Web Apps
PDF
From Android to the Mobile Web
PDF
X Means Y
PDF
The Wonderful World of Wearables
PDF
Securing User Data with SQLCipher
PDF
Beaming Data to Devices with NFC
PDF
What's New in Jelly Bean
PDF
Making Money at Mobile: 60 Business Models
PDF
AppsWorld Keynote
PDF
Android Hardware That's A Little Bit... Odd
PDF
If I Were Starting Now
PDF
Tuning Android Applications (Part Deux)
The Action Bar: Front to Back
Secondary Screen Support Using DisplayManager
Mastering the Master Detail Pattern
Not Quite As Painful Threading
Android Development: The 20,000-Foot View
Maps V2... And You!
A Deep Dive Into ViewPager
Second-Screen Support in Android 4.2
Integrate Android Apps and Web Apps
From Android to the Mobile Web
X Means Y
The Wonderful World of Wearables
Securing User Data with SQLCipher
Beaming Data to Devices with NFC
What's New in Jelly Bean
Making Money at Mobile: 60 Business Models
AppsWorld Keynote
Android Hardware That's A Little Bit... Odd
If I Were Starting Now
Tuning Android Applications (Part Deux)

Recently uploaded (20)

PDF
Machine learning based COVID-19 study performance prediction
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
Big Data Technologies - Introduction.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Encapsulation theory and applications.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PDF
Review of recent advances in non-invasive hemoglobin estimation
Machine learning based COVID-19 study performance prediction
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
MYSQL Presentation for SQL database connectivity
Unlocking AI with Model Context Protocol (MCP)
Spectral efficient network and resource selection model in 5G networks
Reach Out and Touch Someone: Haptics and Empathic Computing
Mobile App Security Testing_ A Comprehensive Guide.pdf
Understanding_Digital_Forensics_Presentation.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Big Data Technologies - Introduction.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
“AI and Expert System Decision Support & Business Intelligence Systems”
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
The AUB Centre for AI in Media Proposal.docx
Encapsulation theory and applications.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
Review of recent advances in non-invasive hemoglobin estimation

Gradle and Your Android Wearable Projects

  • 2. One APK To Rule Them All ● One APK, regardless of device type ● Original Android development vision ● ● Still works for conventional apps... within reason Starts to break down as you go beyond traditional device types into things like wearables Copyright © 2014 CommonsWare, LLC
  • 3. Presentation Terminology ● Device ● Runs a mainstream mobile operating system, designed for multiple form factors – – ● Today: Android, Tizen Tomorrow: who knows? Accessory ● ● ● Runs some dedicated OS Most/all app logic resides on tethered phone or tablet Hybrid: dedicated OS, but apps run on wearable Copyright © 2014 CommonsWare, LLC
  • 4. Terminology Examples ● Device ● ● Omate TrueSmart ● I'm Watch ● ● Google Glass Samsung Gear 2 / Gear 2 Neo Accessory ● ● Samsung Gear Fit ● ● SONY SmartWatch/SW2 Fitbit Hybrid ● Pebble Copyright © 2014 CommonsWare, LLC
  • 5. Wearables: Why Multiple APKs? ● CPU architecture ● Distribution channel (e.g., no Play Services) ● Per-device libraries ● Licensing ● Bulk ● API level ● Entry points and security ● Resources Copyright © 2014 CommonsWare, LLC
  • 6. A Specific Wearable Scenario ● Main App ● ● SONY SW2 ● ● Phones, tablets, modern Android wearable devices (Omate TrueSmart) Dedicated libraries I'm Watch ● Workarounds where new API options are missing Copyright © 2014 CommonsWare, LLC
  • 7. Other Possible Scenarios ● Samsung Gear Fit ● ● Dedicated libraries, dedicated distribution channel Google Glass ● ● ● New UI backed by common code Dedicated distribution channel Pebble ● Separate C language project for on-device portion of app ● Android project for the on-phone tethered side Copyright © 2014 CommonsWare, LLC
  • 8. Classic Solution: Library Project ● Common materials in the library ● Java code ● Standard resources ● Per-device apps that leverage the library ● Works, but a bit clunky ● Future: relegated to cases where library needs to be used by totally disparate apps Copyright © 2014 CommonsWare, LLC
  • 9. Gradle Solution: Product Flavors ● One Project, N Flavors ● ● Alternative Java classes (one per flavor) ● ● Additions to manifest Additional or replacement resources Each Flavor Generates Own APK ● ● Unique package name, but independent from your R classes Other techniques available as well Copyright © 2014 CommonsWare, LLC
  • 10. What Is Gradle? ● Role: Build Automation ● ● Implementation: It's Groovy ● ● Think Ant plus Maven plus other goodness DSL implemented in Groovy, blending declarative structures and full-blown scripting Provider: Gradleware ● Open source, Apache licensed Copyright © 2014 CommonsWare, LLC
  • 11. Gotta Getta Gradle ● Direct Download ● The Gradle Wrapper ● gradlew script and related files in a repo ● Designed for boostrapping – – ● Running the script does a Gradle build Running the script installs Gradle itself if development machine does not have it Actual Gradle comes from wherever script says – Net: only use this if you REALLY trust the source Copyright © 2014 CommonsWare, LLC
  • 12. The Basic Gradle Process ● Write build.gradle File ● ● Same role as build.xml for Ant, etc. ● ● Describes sources and results Usually in root of project directory Run gradle / gradlew ● Supply task name as command-line parameter ● Optional: IDE integration Copyright © 2014 CommonsWare, LLC
  • 13. Escape From Eclipse ● Exporting a build.gradle ● Export wizard in Eclipse through current ADT ● Choose project(s) to export ● Get build.gradle files generated for you – ● A bit more complicated than the normal build.gradle starting point due to legacy project structure NOTE: Not Kept in Sync! ● Project changes in Eclipse do not mirror to build.gradle! Copyright © 2014 CommonsWare, LLC
  • 14. build.gradle: High-Level View ● buildscript {} ● Describing dependencies for running the build ● Key: Android plugin ● apply plugin: 'android' ● dependencies {} ● ● Describing compile-time dependencies (JARs, etc.) android {} ● Tailoring what Android builds for you Copyright © 2014 CommonsWare, LLC
  • 15. Tons o' Tasks ● assemble* ● ● ● Compiles APK for you Tied to “build type” (assembleDebug, assembleRelease are default) install* ● Installs APK on device for you, after assembly ● Only installDebug works by default – installRelease requires configuring your signing keys Copyright © 2014 CommonsWare, LLC
  • 16. Project Structures, Old and New ● Original Recipe ● ● ● src/, res/, assets/ in top-level project directory libs/ also in top-level project directory New Project Structure ● src/, res/, assets/ in subdirectory – – ● main/ by default Others by “build type” or “product flavor” libs/ remains in top-level directory – Or gone, replaced by artifacts Copyright © 2014 CommonsWare, LLC
  • 17. Pieces of New Project Structure ● Source Sets ● Build Types ● Product Flavors ● Build Variants Copyright © 2014 CommonsWare, LLC
  • 18. Source Sets ● Gradle Construct for Organizing “Source” ● ● In Android's case, includes resources and assets Vision ● ● Have one main/ source set with most of your code Have alternatives in other source sets, used conditionally – Resources, assets: can replace main/ source set – Java: cannot replace main/, can only add Copyright © 2014 CommonsWare, LLC
  • 19. Build Types ● Android Plugin Construct for Describing Output Variations ● ● Two build types come default: debug and release Build Types Configurable ● ● ● Project properties in build.gradle Source sets Define Others As Needed ● Smoke tests, debuggable-release builds, etc. Copyright © 2014 CommonsWare, LLC
  • 20. Product Flavors and Build Variants ● Product Flavors ● ● ● Android plugin construct for different deployment variations None defined by default, can create your own Build Variants ● ● Cross product of build types and product flavors Drive task names (assembleSonyDebug) and results Copyright © 2014 CommonsWare, LLC
  • 21. Quick Dependencies Overview ● Sub-Projects ● JARs ● ● AARs ● ● compile fileTree(), sub-projects, or replace with artifacts Compiled Android library projects Artifacts ● Maven Central and/or your own repositories ● JARs and AARs supported Copyright © 2014 CommonsWare, LLC
  • 22. Specific Scenario Build Script ● One Project ● Three Product Flavors ● standard ● sony ● imwatch Copyright © 2014 CommonsWare, LLC
  • 23. Flavor-Specific Changes ● SONY ● sonyCompile ● Hand-rolled local artifacts for SONY libraries – ● Long-term: hope they publish to Maven Central or own artifact repository I'm Watch ● Resources Copyright © 2014 CommonsWare, LLC
  • 24. What You Get ● Three APKs ● ● ● Two for Play Store distribution (standard and SONY) One for dedicated distribution (I'm Watch) In general, one APK per build variant ● For release = one APK per product flavor Copyright © 2014 CommonsWare, LLC
  • 25. Gradle Pros... ● One build system to rule them all ● ● ...in the fullness of time Much more powerful than Ant for command-line builds ● More flexible options for code reuse ● Richer build script syntax Copyright © 2014 CommonsWare, LLC
  • 26. ...and Cons ● Android Studio still a work in progress ● No Eclipse support yet ● Gradle for Android still has its own bugs and limitations ● Breaking changes with updates ● AAR packaging far from universal ● ...let alone being artifacts for easy consumption Copyright © 2014 CommonsWare, LLC
  • 27. Where To Learn More ● http://tools.android.com/ ● Home of the Android tools team ● Information on Gradle for Android, Android Studio – ● http://gradle.org ● ● For general Gradle information http://gradleware.com ● ● Note: much is out of date! Firm behind Gradle's development, offering training and consulting http://commonsware.com/Android ● Some book by some balding guy ● Several chapters on Gradle for Android Copyright © 2014 CommonsWare, LLC