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
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
55
Reactive Extensions for JVM
blazsolar
0
210
Other Decks in Programming
See All in Programming
Catch Up: Go Style Guide Update
andpad
0
220
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
180
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.3k
Go言語はstack overflowの夢を見るか?
logica0419
0
120
Software Architecture
hschwentner
6
2.3k
Pythonスレッドとは結局何なのか? CPython実装から見るNoGIL時代の変化
curekoshimizu
5
1.8k
Le côté obscur des IA génératives
pascallemerrer
0
140
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
Foundation Modelsを実装日本語学習アプリを作ってみた!
hypebeans
0
110
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
300
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
190
チームの境界をブチ抜いていけ
tokai235
0
160
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Become a Pro
speakerdeck
PRO
29
5.5k
A Modern Web Designer's Workflow
chriscoyier
697
190k
The Cost Of JavaScript in 2023
addyosmani
54
9k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Rails Girls Zürich Keynote
gr2m
95
14k
Building an army of robots
kneath
306
46k
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?