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
74
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
54
Reactive Extensions for JVM
blazsolar
0
200
Other Decks in Programming
See All in Programming
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
1.2k
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
7
1.8k
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.2k
Better Code Design in PHP
afilina
PRO
0
130
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
980
Jakarta EE meets AI
ivargrimstad
0
870
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
750
Jakarta EE meets AI
ivargrimstad
0
420
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.9k
Less waste, more joy, and a lot more green: How Quarkus makes Java better
hollycummins
0
140
C++でシェーダを書く
fadis
6
4.2k
最新TCAキャッチアップ
0si43
0
220
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
The Pragmatic Product Professional
lauravandoore
31
6.3k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Optimizing for Happiness
mojombo
376
70k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Music & Morning Musume
bryan
46
6.2k
Designing for humans not robots
tammielis
250
25k
Happy Clients
brianwarren
98
6.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
850
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Code Reviewing Like a Champion
maltzj
520
39k
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?