[译] 将通用 Android 音乐播放器转化为 instant 应用

从 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-rc01android

更新清单文件

在咱们清单文件的 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>
复制代码

构建和部署一个具有 instant 特性的应用包

咱们能够遵守 Google Play Instant 文档中解释的流程,咱们也能够在 Android Studio 中更改运行配置。为了启用 instant 应用的部署,咱们能够选择应用菜单中 Deploy as instant app 选择框,以下图所示:github

使用 Android Studio 界面来使应用部署为 instant 应用

如今,剩下要作的就是在 Android Studio 中点击很是使人满意的 Run 按钮,若是前面全部步骤都正确执行,那就等着看 instant 应用被自动部署和启动吧!web

这个步骤以后,咱们不会看到咱们的应用在启动时出如今任何列表中。为了找到它,咱们须要进入菜单 Settings > Apps,已部署的 instant 应用被列在这里:shell

Settings 列表下的 Instant 应用 > 应用

启动 instant 应用

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 浏览器外的全部应用。浏览器

当**打开**按钮被按下时会启动 UAMP 应用

有关应用连接的更多信息,查看这个主题的相关文档,包括你的应用处理如何验证连接的归属方的方法。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 连接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索