- 原文地址:Making the UAMP sample an instant app
- 原文做者:Oscar Wahltinez
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:Mirosalva
- 校對者:Qiuk17
從 Android Studio 的 3.3 版本開始,IDE 將會爲 instant 應用提供工具支持。(撰寫至本文時,Android Studio 3.3 的可下載版本是 preview release,撰寫至譯文時,3.3 版本已更新到正式 release 版)。這篇博文中咱們將介紹 咱們即將採起的步驟 來把通用安卓音樂播放器 (UAMP) 轉換成 instant 應用。對於首次據說 instant 應用的人,能夠查看 Android 開發者峯會上的會話,或者以前發佈的與該話題有關的閱讀文檔。前端
爲了在不使用命令行的狀況下構建和部署 instant 應用,咱們須要最低版本爲 Android Studio 3.3。升級 Android Gradle 插件來匹配 Android Studio 的版本也是很是重要的。例如,在撰寫本文時,Android Studio 的版本最新爲 3.3 RC1,所以咱們使用以下 Gradle 插件版本:com.android.tools.build:gradle:3.3.0-rc01
。android
在咱們清單文件的 application 標籤內部,咱們須要添加代碼 <dist:module dist:instant=」true」 />
。咱們可能會看到報錯信息表示『命名空間 ‘dist’ 沒有被約束』,這裏咱們須要添加代碼 xmlns:dist="http://schemas.android.com/apk/distribution"
到清單代碼的根標籤內。或者,咱們能夠按照 Android Studio 的提議爲咱們自動解決報錯問題。ios
咱們也能夠添加 intent filters 屬性來處理一個 VIEW intent,它與一個綁定咱們應用的 URL 有關,儘管這不是惟一的辦法來觸發 instant 應用啓動。對於 UMAP 來講,更新後的清單文件像下面代碼這樣:git
<application ...>
<!-- Enable instant app support -->
<dist:module dist:instant="true" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- App links for http -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="http"
android:host="example.android.com"
android:pathPattern="/uamp" />
</intent-filter>
<!-- App links for https -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.android.com"
android:pathPattern="/uamp" />
</intent-filter>
</activity>
</application>
複製代碼
咱們能夠遵守 Google Play Instant 文檔中解釋的流程,咱們也能夠在 Android Studio 中更改運行配置。爲了啓用 instant 應用的部署,咱們能夠選擇應用菜單中 Deploy as instant app 選擇框,以下圖所示:github
如今,剩下要作的就是在 Android Studio 中點擊很是使人滿意的 Run 按鈕,若是前面全部步驟都正確執行,那就等着看 instant 應用被自動部署和啓動吧!web
這個步驟以後,咱們不會看到咱們的應用在啓動時出如今任何列表中。爲了找到它,咱們須要進入菜單 Settings > Apps,已部署的 instant 應用被列在這裏:shell
Android 系統能夠經過不少種方式來觸發啓動一個 instant 應用。除了與 Play 商店綁定的機制以外,啓動 instant 應用一般是經過將 ACTION_VIEW 發送到 URL 路徑所對應的對象,這個 URL 在咱們的清單文件中以 intent filter 的形式來定義。對於 UAMP 應用,經過運行下面的 ADB 指令來觸發咱們的應用:後端
adb shell am start -a android.intent.action.VIEW "https://example.android.com/uamp"
複製代碼
然而,Android 系統也會建議經過其餘應用觸發 ACTION_VIEW 對應的 URL 路徑來啓動咱們的應用,這基本上適用於除了 web 瀏覽器外的全部應用。瀏覽器
有關應用連接的更多信息,查看這個主題的相關文檔,包括你的應用處理如何驗證連接的歸屬方的方法。bash
對於運行 API 28 版本的設備(模擬器),當咱們清除菜單上 Deploy as Instant app 選擇按鈕並試圖再次部署時,會報以下的錯誤:
Error while executing: am start -n 「com.example.android.uamp.next/com.example.android.uamp.MainActivity」 -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.android.uamp.next/com.example.android.uamp.MainActivity }
Error type 3
Error: Activity class {com.example.android.uamp.next/com.example.android.uamp.MainActivity} does not exist.
Error while Launching activity
複製代碼
解決辦法是移除設備上的 instant 應用,既能夠從設備或模擬器的設置菜單 Settings > Apps 中卸載,也能夠經過 Android Studio 工具的標籤 terminal 中執行指令 ./gradlew uninstallAll
。
若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。