Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Advance Android
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Blaž Šolar
February 03, 2015
Programming
0
75
Advance Android
Blaž Šolar
February 03, 2015
Tweet
Share
More Decks by Blaž Šolar
See All by Blaž Šolar
Secrets from Google I/O
blazsolar
0
57
Reactive Extensions for JVM
blazsolar
0
220
Other Decks in Programming
See All in Programming
Docコメントで始める簡単ガードレール
keisukeikeda
1
110
今更考える「単一責任原則」 / Thinking about the Single Responsibility Principle
tooppoo
3
1.6k
SourceGeneratorのマーカー属性問題について
htkym
0
190
株式会社 Sun terras カンパニーデック
sunterras
0
2.1k
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
「抽象に依存せよ」が分からなかった新卒1年目の私が Goのインターフェースと和解するまで
kurogenki
0
110
LangChain4jとは一味違うLangChain4j-CDI
kazumura
1
180
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
460
TipKitTips
ktcryomm
0
160
AHC061解説
shun_pi
0
360
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
140
Codex の「自走力」を高める
yorifuji
0
1.2k
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
220
How to Ace a Technical Interview
jacobian
281
24k
Google's AI Overviews - The New Search
badams
0
930
Claude Code のすすめ
schroneko
67
220k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
120
GraphQLの誤解/rethinking-graphql
sonatard
75
11k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
150
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
Unsuck your backbone
ammeep
672
58k
Transcript
Advance Android @ D•Labs
MVP • Moved from MVC to MVP • Decouples business
logic from UI • Simplifies testing
Dependency Injection • Forces better code structure • Simplifies testing
• Dagger (annotation processing)
Wandera Object Graph
Functional Reactive Programming • RxJava • Asynchronous Dataflow Programming •
Building blocks of functional programming • + more
Wandera Authentication Process
Wandera Authentication Process
Networking • OkHttp HTTP client • HTTP / 2 &
SPDY • Drop in replacement for HttpUrlConnection and Apache HttpClient • Retrofit in combination with RxJava
EventBus • Publish subscribe pattern • Decouples code and preserves
ability to communicate
No Fragments • Nobody understands fragments • Using custom views
instead
Tooling
Gradle • Official Android build system • Task dependency graph
• Easily expandable
Travis CI • Runs on every push and PR •
Only one Android version at the moment • Unit & functional test + static code annualises + stress tests • Reports uploaded on Amazon S3 bucket
Android Check Plugin • Gradle testing plugin for Android •
Static code analasies (PMD, Checkstyle, Findbugs, Lint) • Unit and functional tests • Deploy to Amazon S3, Crashlytics Beta & Google Play store • Notifications on HipChat • Push to Git remote
Memory Monitor • In development • Tracks app memory consumption
while running • HTML & hprof report
Artifactory • Repository manager (maven repos) • Hosts all internal
libraries • Project has no sub-projects • Modular and sharable code
Command Line Tools • Common app actions • Used for
development
Build Types Production Debug Staging Mock
Release Build Type • Minimisation, Obfuscation & Optimisation • Production
API endpoint • Logging levels • Analytics & crash reporting
Debug Build Type • Only for development • Adds additional
functionalities • No obfuscation, minimisation & optimisation • Strict Mode
Mock Build Type • No emulator support from Samsung for
Android 16 and above • Running on non Samsung devices • Mocks internal Samsung APIs • Customised Samsung SDK jar
Samsung APIs public final class DevicePolicyManager { public final
boolean isAdminActive(ComponentName who) { throw new RuntimeException("Stub!"); } }
Samsung APIs public class DevicePolicyManager { public boolean isAdminActive(ComponentName
who) { return false; } }
Dev Flavor • In Progress • For all Build Types
• Only Android Lollipop • Faster build and deploy process
Debug drawer • Thin layer between System and App •
Not included in production builds • Basic build and device information
Networking • Log levels • Changing endpoints • Mock endpoints
• delay • error rate
Status update • Manually trigger status update • Last successful
status update • Error count
Mock location • Mock location provider for whole system •
Only on development devices • KML support still missing
Animations • In progress • Change animation duration on the
fly • Disable animations completely 29
Monkey friendly boolean provideIsMonkey() { return ActivityManager.isUserAMonkey(); } • Adjusted
behaviour for monkeys • Using mock api endpoint • Less UI validations • No debug drawer
In Progress
Dependency Locking • CI handles library updates • No dynamic
library versions • Limited to minor version updates • Limitations with Circle CI
Multi Module Structure Wandera App
Multi Module Structure Wandera App Wandera Debug Wandera Base
Dagger 2 • Developed by Google • Uses annotation processing
• No reflection • Experimental support in Wandera
Looking Into
Jack & Jill • New Android tool chain • No
annotation processing support (yet) • Built in proguard support • Faster builds
Buck • Gradle Alternative • Opensource, developed by Facebook •
Faster than Gradle (for now) • Missing some features
Circle CI • Travis CI alternative • Beta support for
Android and iOS • Supported by Android Check Plugin • Pros and cons compared to Cricle CI
Questions?