Gradle and Your Android Wearable Projects

1,308 views

Published on

fro

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,308
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Gradle and Your Android Wearable Projects

  1. 1. Gradle and Your Android Wearable Projects Copyright © 2014 CommonsWare, LLC
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. Pieces of New Project Structure ● Source Sets ● Build Types ● Product Flavors ● Build Variants Copyright © 2014 CommonsWare, LLC
  18. 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. 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. 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. 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. 22. Specific Scenario Build Script ● One Project ● Three Product Flavors ● standard ● sony ● imwatch Copyright © 2014 CommonsWare, LLC
  23. 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. 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. 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. 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. 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

×