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
44
AndroidSummit2017_Best practices in building mobile libraries
emmatresanszki
0
41
Other Decks in Technology
See All in Technology
テスト”ケース”駆動開発 で手戻りをなくそう
ryohma0510
0
160
自社サービスのための独自リリース版Redmine「RedMica」の取り組み
vividtone
0
1.3k
2024年版 運用者たちのLLM
nwiizo
3
600
なにもしてないのにNew Relicのデータ転送量が増えていたときに確認したこと
tk3fftk
2
210
言葉は感情の近似値である。その感情と言葉の誤差を最小化しよう ~コミュニケーションにおけるアナログ/デジタル変換の課題に立ち向かう~
nktamago
0
160
リアルお遍路+SORACOM IoT
ozk009
1
130
効果的なオンコール対応と障害対応
ryuichi1208
5
2.8k
ナレッジグラフとLLMの相互利用
koujikozaki
0
390
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
9.5k
Fediverse Discovery Providers overview
andypiper
0
160
エンジニア視点で見る、 組織で運用されるデザインシステムにするには
shunya078
1
300
チームビルディングは"感性"で向き合おう / Team Building with Awareness
kohzas
0
170
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
48
13k
Teambox: Starting and Learning
jrom
131
8.7k
Making Projects Easy
brettharned
113
5.8k
Building Your Own Lightsaber
phodgson
101
6k
Fantastic passwords and where to find them - at NoRuKo
philnash
48
2.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
Code Reviewing Like a Champion
maltzj
517
39k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.6k
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
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