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
Make Your App Instant!
Search
Yuliya Kaleda
November 05, 2017
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Make Your App Instant!
Yuliya Kaleda
November 05, 2017
More Decks by Yuliya Kaleda
See All by Yuliya Kaleda
Add Reality to your App with ARCore and Sceneform
yuliyakaleda
0
220
Add Reality to your App with ARCore
yuliyakaleda
2
360
Other Decks in Technology
See All in Technology
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
140
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
610
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
190
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.7k
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
250
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
120
制約理論(ToC)入門 2026版
recruitengineers
PRO
6
1.9k
Goでデータパイプラインを作ろう
sansantech
PRO
0
330
TypeScript入門 2026
recruitengineers
PRO
2
460
サイバー捜査員研修(前半)
nomizone
1
1.8k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
73
41k
Optimizing for Happiness
mojombo
378
71k
Done Done
chrislema
186
16k
Test your architecture with Archunit
thirion
1
2.3k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
30 Presentation Tips
portentint
PRO
1
360
It's Worth the Effort
3n
188
29k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
400
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
Transcript
Make Your App Instant! @YuliyaKaleda
Mobile Evolution built-in apps mWeb store apps instant apps
What is Instant Apps?
Best of Two Worlds Instant Apps mWeb native material design
navigation installation space friendly
Technical Overview shared codebase size constraints API level 21 multi-module
URL responsive 4 MB
Under the hood https://jet.com AIA url == web url
AndroidManifest.xml <activity android:name="com.jet.cartlib.activities.CartActivity" android:launchMode="singleTop" android:parentActivityName=".activities.RootActivity" android:windowSoftInputMode="adjustResize|adjustPan"> <intent-filter android:order="2"> <action android:name="android.intent.action.VIEW"
/> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:host="www.jet.com" /> <data android:host="jet.com" /> <data android:pathPrefix="/cart" /> </intent-filter> </activity>
Instant Apps Types multi-feature single feature
Single Feature Instant Apps base module app module instant app
module {code}
base/build.gradle apply plugin: 'com.android.feature' apply plugin: 'io.fabric' apply plugin: 'newrelic'
android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode rootProject.versionCode versionName rootProject.versionName vectorDrawables.useSupportLibrary = true baseFeature true … } dependencies { //lib dependencies api 'com.squareup.picasso:picasso:2.5.2' }
app/build.gradle apply plugin: 'com.android.application' apply plugin: 'io.fabric' apply plugin: 'newrelic'
android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode rootProject.versionCode versionName rootProject.versionName vectorDrawables.useSupportLibrary = true … } dependencies { implementation project(':baselib') }
instantApp/build.gradle apply plugin: ‘com.android.instantapp' apply plugin: 'io.fabric' apply plugin: 'newrelic'
android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode rootProject.versionCode versionName rootProject.versionName … } dependencies { implementation project(':baselib') }
Single Feature Instant Apps base module app module instant app
module 4 MB
Multi-Feature Instant Apps app module d { c o }
e feature modules
Multi-Feature Instant Apps PLP product list page PDP product detail
page Cart ODP order detail page
Multi-Feature Instant Apps app module d { c o }
e base module instant app module
base/build.gradle apply plugin: 'com.android.feature' android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion
defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion vectorDrawables.useSupportLibrary = true baseFeature true } dependencies { feature project(':plplib') feature project(':pdplib') feature project(':cartlib') feature project(':orderDetailLib') application project(':app') //lib dependencies api 'com.squareup.picasso:picasso:2.5.2' }
feature/build.gradle apply plugin: 'com.android.feature' android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion
defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode rootProject.versionCode versionName rootProject.versionName } dependencies { implementation project(':baselib') }
app/build.gradle apply plugin: 'com.android.application' android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion
defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode rootProject.versionCode versionName rootProject.versionName } dependencies { implementation project(':baselib') implementation project(':plplib') implementation project(':pdplib') implementation project(':cartlib') implementation project(':orderDetailLib') }
instantApp/build.gradle apply plugin: ‘com.android.instantapp' android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion
defaultConfig { minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion versionCode rootProject.versionCode versionName rootProject.versionName } dependencies { implementation project(':baselib') implementation project(':plplib') implementation project(':pdplib') implementation project(':cartlib') implementation project(':orderDetailLib') }
Size Constraints base module feature module + 4 MB
Slim down your app • Review dependencies • Enable Proguard
• Shrink resources • Use vector drawables • PNG -> WebP X MB 4 MB
pdplib.apk Instant Apps Building orderDetailLib.apk baselib.apk plplib.apk cartlib.apk .zip
Instant Apps API override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_no_network)
val addPaymentButton = findViewById(R.id.add_new_payment) as Button if (InstantApps.isInstantApp(this)) { addPaymentButton.visibility = View.GONE } }
Instant Apps API fun showInstallPrompt(analyticsManager: AnalyticsManager) { InstantApps.showInstallPrompt(this, 777, "instant_app")
analyticsManager.trackAction("download_app") }
Attention!!!
Version code and name Failure [INSTALL_FAILED_INVALID_APK: /data/app/ vmdl894193015.tmp/7_pdplib-app-instantApp.apk version code
0 inconsistent with 494] android { defaultConfig { versionCode rootProject.versionCode versionName rootProject.versionName } }
Proguard java.lang.NoSuchMethodError: No static method setCompatVectorFromResourcesEnabled(Z)V in class Landroid/support/v7/app/AppCompatDelegate; or
its super classes (declaration of 'android.support.v7.app.AppCompatDelegate' appears in / data/app/com.jet.jet.staging-IIohNI4xXzrcQ1tt01ksgA==/ base.apk) -keep class android.support.v7.app.AppCompatDelegate { *; }
Resources Task :cartlib:compileAppInstantAppFeatureJavaWithJavac /Users/yuliya/Desktop/jetApp/batman-android/cartlib/src/ main/java/com/jet/cartlib/mvp/cart/CartListFragment.java: 568: error: cannot find symbol
Toolbar toolbar = findViewById(R.id.toolbar); ^ symbol: variable toolbar location: class id Toolbar toolbar = findViewById(com.jet.baselib.R.id.toolbar);
Reusable Layouts in feature modules <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=“http://schemas.android.com/tools"> <include layout="@layout/view_toolbar"
/> <TextView android:id="@+id/checkout_initial_breadcrumb_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" tools:text="Shipping>Payment>Review" /> </merge>
Secure network https://
Benefits • size reduction • modularization • code clean up
• new features (Smart Lock, Google Payments) • conversion rate +27% • cart size +7%
Q & A @YuliyaKaleda Thank you!!!