专栏首页Android 开发者[译] 将通用安卓音乐播放器转化为 instant 应用

[译] 将通用安卓音乐播放器转化为 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-rc01

更新清单文件

在我们清单文件的 application 标签内部,我们需要添加代码 <dist:module dist:instant=”true” />。我们可能会看到报错信息表示『命名空间 ‘dist’ 没有被约束』,这里我们需要添加代码 xmlns:dist="http://schemas.android.com/apk/distribution" 到清单代码的根标签内。或者,我们可以按照 Android Studio 的提议为我们自动解决报错问题。

我们也可以添加 intent filters 属性来处理一个 VIEW intent,它与一个绑定我们应用的 URL 有关,尽管这不是唯一的办法来触发 instant 应用启动。对于 UMAP 来说,更新后的清单文件像下面代码这样:

<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 选择框,如下图所示:

现在,剩下要做的就是在 Android Studio 中点击非常令人满意的 Run 按钮,如果前面所有步骤都正确执行,那就等着看 instant 应用被自动部署和启动吧!

这个步骤之后,我们不会看到我们的应用在启动时出现在任何列表中。为了找到它,我们需要进入菜单 Settings > Apps,已部署的 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 浏览器外的所有应用。

有关应用链接的更多信息,查看这个主题的相关文档,包括你的应用处理如何验证链接的归属方的方法。

已知问题

对于运行 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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [译]C++ 和 Android 本地 Activity 初探

    我会带你完成一个简单的 Android 本地 Activity。我将介绍一下基本的设置,并尽力将进一步学习所需的工具提供给你。

    Android 开发者
  • 用 CoordinatorLayout 处理滚动

    Android 开发者
  • [译]Android 数据绑定库 — 从可观察域到 LiveData 仅需两步

    数据绑定最重要的特性之一是可观察性。你可以用它绑定数据和 UI 元素,以便在数据更改时,相关元素在屏幕上更新。

    Android 开发者
  • flutter即时通信(im)插件封装

    封装的一个腾讯云im,以便于flutter开发者可以方便继承im到自己的应用中,传送门在此

    brzhang
  • 是时候开始用C#快速开发移动应用了

      从2015年接触Xamarin到至今已经2个年头,我对Xamarin的技能没有长进多少,但它却已经足够成熟到在跨平台移动开发工具中占有一席之地。在扫了一些资...

    用户1153966
  • Android二维码功能实现,在程序内嵌入ZXing项目

    最近二维码真是越来越火了,随便电视上、网络上、商场里,到处都是二维码。而内嵌二维码扫描功能的软件也越来越多,QQ、微信、UC浏览器等等应用都可以对着二维码扫一扫...

    用户1158055
  • kotlin实现通知栏提醒功能示例代码

    2019年英雄联盟LPL赛区赛季赛打得火热,作为一个RNG粉丝,想通过app实现RNG赛程提醒,于是就有了这次技术实践。我在网上找了很久,几乎没找到使用kotl...

    砸漏
  • Android TabLayout 使用进阶(含源码)

      对于Android开发来说,画页面算是必不可少的,因此你会接触很多不同的UI布局,你需要去绘制出来,在这过程中你已经接触过TabLayout。

    晨曦_LLW
  • Android开发实现模仿微信小窗口功能【Dialog对话框风格窗口】

    本文实例讲述了Android开发实现模仿微信小窗口功能。分享给大家供大家参考,具体如下:

    砸漏
  • ▲ Android 自定义搜索附近的动画

    最近把视图动画翻出来看一下,要知道动画主要分为两个主类,视图动画&属性动画。我这个功能就是用视图动画来实现的。老规矩先看一下效果图

    全栈程序员站长

扫码关注云+社区

领取腾讯云代金券