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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Remote Control your App
Search
Stan Kocken
April 23, 2018
Technology
510
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Remote Control your App
AndroidMakers 2018 talk
Stan Kocken
April 23, 2018
More Decks by Stan Kocken
See All by Stan Kocken
MVP on Android: why do you need it?
stankocken
1
200
Unit Test your code, even your UI
stankocken
1
320
EfficientAdapter
stankocken
1
120
Other Decks in Technology
See All in Technology
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
640
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
170
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
180
Nav2、Nav3 ... はたまた自作?〜 作って理解する Nav3 の設計意図 〜 / Nav2, Nav3 ... or Build Your Own? — Understanding Nav3's design intent by building it from scratch
yanzm
0
260
When Does a Local Qwen Start to Break
morshoto
0
190
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
170
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
120
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
320
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
150
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
270
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.6k
Podは生きているのにGoだけが落ちる:GOGCとGOMEMLIMITで追うInvisible OOM Killの謎
tkc66buzz
1
210
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
7k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
How to Talk to Developers About Accessibility
jct
2
540
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
970
How GitHub (no longer) Works
holman
316
150k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
680
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Transcript
Remote Control your App AndroidMakers 2018 - Stan Kocken
Why? 2
Release Cycle 3
Different company, different style: max time between updates 4 Source:
appannie.com - updates on the store between 1st April 2017 and 1st April 2018 - 75% - 95% confidence interval 5-6 days 9-16 days 7-17 days 15-21 days 63-66 days 11-15 days
Frequent updates is the way to go? 5
Daily updates […] Everybody can see it's because of too
little testing - real review of a user 6
7 Less frequent update: the main reasons Event-based application No
dev working actively on it Expensive release
Our release cycle: Release Train 8 5.12.0 5.13.X 5.13.0 5.14.X
Week 1 Week 2 Week 3 Week 4 beta 5% 20% 100% beta 5% 20% 100% alpha alpha
App Release Feature Release 9 ≠ Our Release Train Engineers
Product/Marketing
How do you do that? 10
Remote Control your App AndroidMakers 2018 - Stan Kocken
But… I need to change this text… I want to
test this… - product owner 12
Remote Control your App AndroidMakers 2018 - Stan Kocken
WebView 14
A View that displays web pages - https://developer.android.com/reference/android/webkit/WebView.html 15
16 How? 99% Hybrid Low-touch Facebook lite 1.6MB Installs: 500,000,000+
4.3/5 ~ Mobile website vs vs Native and Web None or just few pages Eurostar v1 (2011) • Help pages • Credit card payments • …
17 Advantages Full control without app update Cross-platform “I know
HTML, I can make an app” Cheaper: Lower price
18 Disadvantages Full control without app update Cross-platform “I know
HTML, I can make an app” Cheaper: Lower price BAD quality So nobody feel at home
If even Facebook cannot make it great, how can
you? 19
20 WebView: Take-away - no budget - limited part -
“lite” application - everything else BAD GOOD
Remote Screen Configuration 21
Configuration 22 UI
23 "render": { "card_premium": { "title": { "resource": "configurable_premium_title" },
"color": "#25B41E", "descriptionItems": [ { "title": { "resource": "configurable_premium_item_title_backup" }, "description": { "resource": "configurable_premium_item_description_backup" }, "icon": { "defaultResource": "configurable_premium_features_backup" } }, { "title": { "resource": "configurable_premium_item_title_sync" }, "description": { "resource": "configurable_premium_item_description_sync" }, "icon": { "defaultResource": "configurable_premium_features_sync" } }, …
24 WebView Remote Screen Configuration 100% remotely controlled Cross-platform definition
Native UI look&feel Cost $ $$$ remotely controlled
Remote Copy 25
I need to change this text. When can we have
this live? - product owner 26
But… the text is within Strings.xml… Strings.xml within the app…
So we need an update. - dev 27
28 getString(R.string.hello_world) <string name="hello_world">Hello World</string> "Hello World" + = Strings.xml
What about a JSON file? - dev 29
jsonObject.optString("hello_world") 30 "Hello World" + = {"hello_world": "Hello World"} Simple
JSON
Where should I put the French version? - product owner
31
32 Localised JSON { "en": { "hello_world": "Hello World" },
"fr": { "hello_world": "Bonjour le monde" } } jsonObject.getJSONObject(“fr").optString("hello_world") “Bonjour le monde” + =
A user is Spanish should see the English version -
QA 33
34 Auto-select language res - values - default_strings.xml - values-fr
- default_strings.xml <resources> <string name="locale">en</string> </resources> <resources> <string name="locale">fr</string> </resources> jsonObject.getJSONObject(getString(R.string.locale)) .optString("hello_world")
Hmmm, and from my XML layout? - dev 35
36 XML Layout: the keys <TextView … android:text="hello_world" />
37 Custom Layout Inflator class MyLayoutInflater(context: Context, private val translator:
Translator) : LayoutInflater(context) { override fun onCreateView(parent: View?, name: String?, attrs: AttributeSet?): View { val view = super.onCreateView(parent, name, attrs) (view as? TextView)?.let { replaceTextKeyByValue(it) } return view } private fun replaceTextKeyByValue(textView: TextView) { textView.text = translator.replaceByValueIfNecessary(textView.text) textView.hint = translator.replaceByValueIfNecessary(textView.hint) }
38 Custom Layout Inflator class MyLayoutInflater(context: Context, private val translator:
Translator) : LayoutInflater(context) { override fun onCreateView(parent: View?, name: String?, attrs: AttributeSet?): View { val view = super.onCreateView(parent, name, attrs) (view as? TextView)?.let { replaceTextKeyByValue(it) } return view } private fun replaceTextKeyByValue(textView: TextView) { textView.text = translator.replaceByValueIfNecessary(textView.text) textView.hint = translator.replaceByValueIfNecessary(textView.hint) }
What about plurals? And a different text per app version?
And “Welcome %s to our app” 39
• Standard i18n functions (plurals, context, interpolation, format) • JSON
format • Created for Javascript • Android reader: https://github.com/i18next/i18next-android Written by myself 5 years ago 40 .com
A/B Testing 41
Compare two (or more) experiences to choose the best 42
Example 43
44 https://medium.com/wolfgangbremer/amazon-is-the-king-of-a-b-testing-f46008e3b528
45 Maxime Lorant - https://commons.wikimedia.org/wiki/File:A-B_testing_simple_example.png
Local or Server 46 A or B? Random().nextInt() % 2
=> Save locally => Send to Analytics Cross-platform A or B
47 KEEP CALM AND WAIT FOR IT…
48 Wait From minutes, TO MONTHS!
How long should I wait? 49
One at the time 50
Feature Flip 51
Remotely decide when a feature is enable 52
App Release Feature Release 53 ≠ Store update Feature Flip
A/B test Feature Flip 54 ≠ Find best experiences Progressive
Rollout Synchronise cross-platform Beta test
A/B Test, Feature Flip: tools 55 Braze (formerly Appboy), hack
of newsfeed Firebase Remote Config Home-made solution
Dashlane usage 56
Dashlane Recipe • Release: every two weeks • WebView: very
limited part • Remote Screen Configuration: for the premium page • Remote Copy: we don’t • A/B Test: home-made solution • Feature Flip: home-made solution, highly used 57
App Release Feature Release 58 ≠ Engineers Product/Marketing
Thank you @stan_kocken 59