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
10-ish Things about Android Library Development
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Zan Markan
May 09, 2017
Programming
140
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
10-ish Things about Android Library Development
Talk given at Droidcon London Bytes meetup
Zan Markan
May 09, 2017
More Decks by Zan Markan
See All by Zan Markan
High-Performing Engineering Teams and the Holy Grail
zmarkan
0
120
A Practical Introduction to CI/CD
zmarkan
0
53
The Need for Speed - Practical Tips for Optimising your CI/CD Pipeline
zmarkan
0
85
Chat app with React, Auth0, and Pusher Chatkit
zmarkan
0
410
State of Kotlin - Droidcon NYC
zmarkan
1
120
State of Kotlin - Droidcon Berlin 2018
zmarkan
1
190
Building DSLs in Kotlin for Fun and Profit
zmarkan
2
600
Push Notifications That Don't Suck
zmarkan
3
460
The State of Kotlin
zmarkan
0
210
Other Decks in Programming
See All in Programming
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.1k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
190
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
4.3k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.8k
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
370
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
360
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
430
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
210
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
140
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
580
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
310
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Between Models and Reality
mayunak
4
370
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
Site-Speed That Sticks
csswizardry
13
1.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
900
Building Adaptive Systems
keathley
44
3.1k
Embracing the Ebb and Flow
colly
88
5.1k
Prompt Engineering for Job Search
mfonobong
0
380
Transcript
@zmarkan Zan Markan @zmarkan LIBRARY DEVELOPMENT 10-ish things about Android
@zmarkan @zmarkan Developer tools company blog.pusher.com Chat API Hiring in
Shoreditch Trusted by 150k+ devs pusher.com | @pusher
@zmarkan Contents of this talk • Libs 101 • API
Design • Development & Testing • Releasing • Docs ...and more!
@zmarkan We libs because... Avoid duplicating logic - Best Practice
Sharing == Caring It’s a great way to enrich your We want to be paid
@zmarkan Libraries are a collection of classes and methods that
encapsulate common, shared functionality.
@zmarkan Libs != Apps Libraries are NOT end products Smaller,
more lightweight than apps Many x Many apps/lib ratio
@zmarkan All about that Lib... What: Libraries, Frameworks, SDKs Type:
General libs, UI Widgets, Serverside, Testing Access: Publicly vs Privately accessible Pricing: FOSS, Free to use vs Commercial API: DSL, Reactive, n other things...
@zmarkan Product is about the User • Developers (like you
and I) • Varied backgrounds, levels of experience • User experience -> Developer experience
@zmarkan the truth about developers Library users are Developers… …
developers are very lazy, so... libraries should enable laziness.
@zmarkan API
@zmarkan The API is to a library what the USER
INTERFACE is to an APP
@zmarkan Things I mean by API Entry points Interaction points
Data model Errors & Exceptions
@zmarkan Entry points (where people first interact with your code)
They allow you to instantiate and configure the library In “Code”: Constructors, Builders, Factories In UI: Widgets
@zmarkan Builder Poor person’s named args … and optional args
Ensures constructor is passed correct values, and validates its state before building the class
@zmarkan Building the - Static inner class - … called
Builder - setters mutate its state, returning this - build() constructs the main object - build() validates the view state AS SEEN IN RETROFIT
@zmarkan Methods & Models When in doubt - go S.O.L.I.D.
Naming, Naming, Naming! Don’t surprise your users! (But you can delight them)
@zmarkan (R)X-Factor Aysnc as a stream of events Allows chaining,
and functional operations Support all the things: RxSwift, RxJava (even PHP!) More: Paco Estevez makes AWESOME Rx libs/articles/talks
@zmarkan RX in brief observable .filter(//condition) .flatMap(//transformation) .subscribe(//handleSuccess, //handleError) Not
shown: one million operators, threading, ...
@zmarkan RX… but It’s still a power user feature Callbacks
are still often preferred provide RX adapter as an optional extra?
@zmarkan for the λ Consider functional interfaces ...they can be
replaced with lambdas easily Used with Retrolambda, Kotlin, Java 8 Power users tend to like them. Be nice to your power users.
@zmarkan @nnotations Add validation features - NotNull, Nullable Value types
- AutoValue, AutoParcel Build Annotations to write code for you Use Square/JavaPoet More: Jason Feinstein’s talk from CodeMotion Tel Aviv 2016
@zmarkan DSL-o-Matic 9000 Make your own little programming language… ...by
inventing a syntax that works for you! Examples: Hamcrest, Rx, Kotlin Anko Techniques: Annotations, Operator overloading, Extension methods, ...
@zmarkan When things go • Let it crash! • Early
• Often Ensure the error messaging is spot on Add links in error messages to explanations
@zmarkan Anatomy of a “nice” Error Type: Illegal Input Message:
Request unsuccessful, reason: malformed auth token Link: https://example.com/errors/123456 Explain things here!
@zmarkan DEV & TEST
@zmarkan Performance or Be wary of: • Library size =>
App size • Memory leaks • Build times • Needless dependencies
@zmarkan ...my lib ain’t one! - Avoid private fields in
parent classes - Prefer anonymous inner classes to lambdas - Avoid needless dependencies (again) - Proguard rules More: Jake Wharton’s talk from 360AnDev I got 65k problems, but...
@zmarkan API should be beautiful. Implementation should f*****g work.
@zmarkan Testing it & Loving it The easy: Unit Tests
The hard: Integration Tests with an app The smart: fooding More in: David Schreiber-Ranner’s talk from Droidcon Vienna 2016
@zmarkan Tracking & Analysis Problem: No Google Analytics for libraries
Track at the service level? Listen and talk to users fooding: Redux unless you’re Fabric
@zmarkan
@zmarkan (Semantic) Versioning 2.0 Major[.]Minor[.]Patch • Major: Breaking changes •
Minor: New features • Patch: Hotfixes Shouldn’t ever happen • semver.org
@zmarkan Releasing (how not to do it) • Manually include
the JAR/AAR in your project (Bad idea in most cases) • Include project as a Git submodule (Even worse idea in all cases)
@zmarkan Releasing (the right way) Maven Central JCenter Jitpack Artifactory
Maven dir on S3 Managed services free for OSS More DIY just add server
@zmarkan DOCS
@zmarkan 50 shades of Docs • Quick Start • Sample
apps • JavaDoc • Wiki pages • Yes, even tests! • Mix & Match!
@zmarkan Quickstart a.k.a. “Let me copypaste something”
@zmarkan Sample code • Should be small, confined apps •
… often alongside libraries in the same repo • Should reflect your libraries’ features • Can go in-depth for more advanced features
@zmarkan JavaDoc • Cheap to make • Automagically generated •
(Just add comments!) • Great in Android Studio • Host it alongside your other docs
@zmarkan Libraries enable app developers to be lazy. Docs enable
library developers to be lazy.
@zmarkan The takeaways Libs 101 API design Development Releasing Support
@zmarkan @zmarkan fin Blog: www.spacecowboyrocketcompany.com Twitter: @zmarkan Github: @zmarkan Email:
zan@[pusher.com | markan.me]