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
57
Reactive Extensions for JVM
blazsolar
0
220
Other Decks in Programming
See All in Programming
AI巻き込み型コードレビューのススメ
nealle
0
110
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
170
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
20
6.7k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.8k
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.4k
CSC307 Lecture 01
javiergs
PRO
0
690
Architectural Extensions
denyspoltorak
0
270
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
970
今から始めるClaude Code超入門
448jp
7
8.4k
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
240
2026年 エンジニアリング自己学習法
yumechi
0
130
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
110
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Building Applications with DynamoDB
mza
96
6.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
250
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Optimizing for Happiness
mojombo
379
71k
Side Projects
sachag
455
43k
Are puppies a ranking factor?
jonoalderson
1
2.7k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
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?