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
Best Practices Mobile SDKs_DroidConGreece16
Search
Emma Tresanszki
July 08, 2016
Technology
1
150
Best Practices Mobile SDKs_DroidConGreece16
Best practices in building mobile SDKs - DroidCon Greece 2016
Emma Tresanszki
July 08, 2016
Tweet
Share
More Decks by Emma Tresanszki
See All by Emma Tresanszki
Improve your code with Lint checks for Kotlin
emmatresanszki
0
49
AndroidSummit2017_Best practices in building mobile libraries
emmatresanszki
0
44
Other Decks in Technology
See All in Technology
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
860
プラットフォーム転換期におけるGitHub Copilot活用〜Coding agentがそれを加速するか〜 / Leveraging GitHub Copilot During Platform Transition Periods
aeonpeople
1
210
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
890
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
AIをプライベートや業務で使ってみよう!効果的な認定資格の活かし方
fukazawashun
0
100
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
190
Codeful Serverless / 一人運用でもやり抜く力
_kensh
7
450
2025年夏 コーディングエージェントを統べる者
nwiizo
0
180
Rustから学ぶ 非同期処理の仕組み
skanehira
1
150
株式会社ログラス - 会社説明資料【エンジニア】/ Loglass Engineer
loglass2019
4
65k
RSCの時代にReactとフレームワークの境界を探る
uhyo
10
3.5k
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
470
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Automating Front-end Workflow
addyosmani
1370
200k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Embracing the Ebb and Flow
colly
87
4.8k
Code Reviewing Like a Champion
maltzj
525
40k
Building Applications with DynamoDB
mza
96
6.6k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
920
Optimising Largest Contentful Paint
csswizardry
37
3.4k
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