Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Best Practices Mobile SDKs_DroidConGreece16
Search
Emma Tresanszki
July 08, 2016
Technology
160
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Best Practices Mobile SDKs_DroidConGreece16
Best practices in building mobile SDKs - DroidCon Greece 2016
Emma Tresanszki
July 08, 2016
More Decks by Emma Tresanszki
See All by Emma Tresanszki
Improve your code with Lint checks for Kotlin
emmatresanszki
0
58
AndroidSummit2017_Best practices in building mobile libraries
emmatresanszki
0
50
Other Decks in Technology
See All in Technology
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
130
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
4
1.5k
安心して変更できるWebフロントエンドの作り方
pirosikick
4
1.8k
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
680
なぜJMBC(Japan MCP Business Community)? MCPってどう活用できるの?
cdataj
0
100
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
150
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
GoCon2026 - Open Source, Open World
sanposhiho
4
3.4k
module Synths; end
asonas
1
130
Tab5をRubyで動くパソコンにする
kishima
2
360
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
280
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Ethics towards AI in product and experience design
skipperchong
2
370
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
270
Discover your Explorer Soul
emna__ayadi
2
1.3k
Transcript
Best Practices in Building Mobile SDKs Emma Tresanszki Android Developer
[email protected]
GitHub: @emmaChristine
About me
Agenda - SDK or Library? - Managing Dependencies - Creating
Libraries - Publishing Libraries
SDK or Library?
SDK or library ? A library -> chunk of code
An SDK -> is still a library (often with extra tool applications, data files and sample code)
Why do we need one? Make an existing service or
API easily usable Offer a mobile specific service
Examples
Examples 2FA phone number verification
Why not ?
None
None
None
Managing dependencies
Which dependency ? Developers can’t be trusted to update their
dependencies? compile 'com.android.support:appcompat-v7:23.0.+' But what has changed? In Gradle, dynamic versions use the + sign:
Dynamic dependencies are evil Dynamic versions add nondeterminism to your
build. - Behaviour changes - “But it works on my machine” - Difficult to revert Fix it
Versioning - Version numbers are used to encode compatibility for
the API. - Local store the current version/configurable file - Semantic versioning {major}.{minor}.{bugfix}. - Use stable version instead of beta.
Using <SNAPSHOT> in development - Prevent caching while developing -
or lower cache setting
None
What is .aar ? - /AndroidManifest.xml (mandatory) - /classes.jar (mandatory)
- /res/ (mandatory) - /R.txt (mandatory) - /assets/ (optional) - /libs/*.jar (optional) - /proguard.txt (optional) - /lint.jar (optional) - I/O 2013
Validation - Fail fast when rejecting invalid params. Actually not
all the time! - Do not discard future capabilities. - Should be flexible:let the API handle rejections instead.
Should your SDK include UI ? - Fabric Digits’ button
& Themes
Library size - Library size: 3rd party dependencies or not
at all - e.g. libphonenumber in a 2fa phone verification lib ( ~500KB)
Packaging: Permissions - Runtime permissions - Marker selectors - Don’t
let libraries silently add permissions to your app project/module/build/intermediates/manifests/full/[flavor]/build-type/AndroidManifest.xml.
Keep a changeLOG - Is there a standard changeLOG format?
- Why should I care? - Why can’t people just use a git log diff? - Minimize the effort by using an “UNRELEASED” section - How bad can it be? - No deprecation - Dates in region-specific formats
Keep a changeLOG What makes a good changeLOG? - Readable
- Dates YYYY-MM- DD - Group changes ADDED CHANGED DEPRECATED REMOVED FIXED SECURITY
DOCUMENTATION - Copy-paste a working demo. - How much time
you should hook the dev? - Good API reference - Advanced usage - Changelogs <version number>
Publish .aar
Publish to central repo - requirements - GAV coordinates -
Sign files with GPG/PGP
Publish to central repo - requirements - Project, description and
URL - License, Developer and SCM information
~/.gradle/gradle.properties
~/.gradle/gradle.build
~/.gradle/gradle.properties
$gradle uploadArchives
Stage & release
Done!
Thanks! Emma Tresanszki Android Developer
[email protected]
GitHub: @emmaChristine
References - Automated Gradle project deployment to Sonatype OSS repository
- Maven Repository Usage Guide - http://www.leveluplunch.com/java/examples/parse-phone-number-from-string/ - http://www.theappguruz.com/blog/integrate-paypal-in-android//dropbox - http://blog.danlew.net/2015/09/09/dont-use-dynamic-versions-for-your-dependencies/ - https://github.com/olivierlacan/keep-a-changelog - http://skife.org/src/design/libraries/2011/12/14/library_versioning.html