内容简介:从 Android Studio 的 3.3 版本开始,IDE 将会为 instant 应用提供工具支持。(撰写至本文时,Android Studio 3.3 的可下载版本是preview release,撰写至译文时,3.3 版本已更新到正式 release 版)。这篇博文中我们将介绍为了在不使用命令行的情况下构建和部署 instant 应用,我们需要最低版本为 Android Studio 3.3。升级 Android Gradle 插件来匹配 Android Studio 的版本也是在我们清单文件的
- 原文地址: 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
。
更新清单文件
在我们清单文件的 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
。
如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为掘金 上的英文分享文章。内容覆盖 Android 、 iOS 、 前端 、 后端 、 区块链 、 产品 、 设计 、 人工智能 等领域,想要查看更多优质译文请持续关注 掘金翻译计划 、官方微博、 知乎专栏 。
以上所述就是小编给大家介绍的《[译] 将通用安卓音乐播放器转化为 instant 应用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- js的类型转化三两事儿
- archTIS:将数据安全转化为经济增长
- 如何将JavaScript转化成Swift?(一)
- python3 第十章 - 如何进行进制转化
- 用Golang将图片转化成ASCII码
- 记一次bug解决过程(数字转化成中文)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。