Instant App 常见问题官方指南 | Android 开发者 FAQ Vol.6

2024-08-29 14:58

本文主要是介绍Instant App 常见问题官方指南 | Android 开发者 FAQ Vol.6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


我们被大家的热情惊到了 —— 事实上我们发出上一篇 Instant App 的文章没几天就收到了一大堆问题。由于涉及到的类目太多,我们这里简单归纳了一下,方便大家查看。如果还有更多问题也请随时通过留言的方式与我们取得联系。



1. 基础类问题


Q: 哪些设备兼容 Android Instant App?

A: Android Instant App 在运行 Android 6.0(API 级别 23)或更高版本的设备上可用,此外还计划为 Android 5.0(API 级别 21)添加额外的支持。例如,现在您可以在 Google Pixel、Google Nexus、Samsung Galaxy S7 等人气设备上开发 Instant App。


Q: 哪些国家和地区支持 Android Instant App?

A: 您可以在支持页面中找到完整的支持国家和地区列表:

(https://support.google.com/googleplay/android-developer/answer/7381861#production)


Q: 开发者现在需要构建两套不同的 Android 应用吗?

A: 正相反,开发者只需使用一个源代码树维护一个项目即可。通过对项目进行配置,创造出两套架构工件:可安装版本和免安装版本。在可安装应用基础上添加免安装支持需要的工作量大小取决于可安装应用的当前架构。

* 请注意,免安装应用的版本号必须等于或小于上次发布的可安装应用版本。


Q: Instant App 都能使用什么 Android API 和功能?

A: Android Instant App 设计的目的是扩展现存 App 的使用场景,而非取代它们。所以Android Instant App 使用同样的 Android API,同样的项目,同样的源代码。当然,由于Android Instant App 的 “免安装” 特性,可能会无法符合用户针对 “已安装” 应用所抱有的一些期待。例如,免安装应用无法使用后台服务,无法激活后台通知,也无法使用设备唯一标识符。


Q: 用户可以选择永久安装应用吗?

A: 当然!开发者可以允许用户从 Google Play 安装应用。在安装完成后,当用户离开应用时,它仍会留在用户的手机上 —— 就和现在大家正在做的事情一样。 


Q: Android Instant App 的权限需求是怎样的?

A: Android Instant App 使用自 Android 6.0 (API 级别 23)以来采用的运行时权限。


Q: 免安装应用可以获取哪些权限?

A:免安装应用可以使用下列 Android 权限。没有出现在下方列表中的权限将无法在免安装应用中使用。

  • BILLING

  • ACCESS_COARSE_LOCATION

  • ACCESS_FINE_LOCATION

  • ACCESS_NETWORK_STATE

  • CAMERA

  • INSTANT_APP_FOREGROUND_SERVICE 仅限 Android O

  • INTERNET

  • READ_PHONE_NUMBERS 仅限 Android O

  • RECORD_AUDIO

  • VIBRATE


Q:免安装应用对网络访问有哪些限制?

A:来自免安装应用的一切网络流量均必须使用 HTTPS,不支持 HTTP。


Q:开发者要如何发布这些应用?

A:开发者需要经由 Google Play Console 发布免安装应用,这一点与现有的 Android 应用并无两样。想要了解更多信息,请参阅 “发布您的免安装应用” :

(https://support.google.com/googleplay/android-developer/answer/7381861)


Q:免安装应用必须使用 Smart Lock 么?

A:是的,我们规定在免安装中的登录体验必须使用 Smart Lock。想要进一步了解如何在应用中使用 Smart Lock,请参阅 “为您的 Android 密码使用 Smart Lock” :

(https://developers.google.cn/identity/smartlock-passwords/android/)


Q:我能不能在没有可安装版本 Android 应用的情况下实现一个免安装应用?

A:不能。您必须首先在 Google Play 中拥有一个该 App 的可安装版本。


Q:我们能在里面使用 WebP 图片格式吗?

A:当然可以,我们推荐使用 WebP 格式的图片。想要了解更多信息,请参阅 “如何缩减下载图片的大小” :

(https://developer.android.google.cn/topic/performance/network-xfer.html#webp)


Q:免安装应用在 Google 网页搜索中将会如何呈现?

A:免安装应用与可安装应用的搜索显示结果并无不同。在搜索结果中,免安装应用会显示出应用图标,如果该 URL 已与免安装应用相关联,则还会显示 “Instant” 标签,正如搜索结果中的可安装应用会在图标上显示 “Installed” 标签一样。


Q:我能使用 Android Instant App 的形式来承载我的游戏吗?

A:游戏是极为特别的一类应用,它们通常拥有独特的工具库和庞大的资产库,对性能表现的要求也很高。即使如此,我们对探索游戏用户的使用案例也充满兴趣。请前往 StackOverflow 浏览有关 Android Instant App 的帖子,不少人也在讨论这个话题。

2. 项目结构、功能和架构


Q:免安装应用和可安装应用是否拥有不同的 build.gradle 文件?

A:如果您的可安装应用和免安装应用来自同一个 Android Studio 项目,那么答案是肯定的,两种应用需要不同的 build.gradle 文件。您必须使用符合 com.android.application 构建规则的模块来构建您的可安装应用,而当您构建免安装应用时则需要使用符合 com.android.instantapp 构建规则的模块。想要了解更多信息,请参阅 “项目结构” :

(https://developer.android.google.cn/topic/instant-apps/getting-started/structure.html#structure_of_a_basic_instant_app)


Q:我能独立编译可安装与免安装应用吗?

A:正如上面 “项目结构” 中所展示的那样,我们推荐采用的工程结构应该优先将独立的功能封装成模块,这样可安装应用和免安装应用都可以依赖这些库模块。如果您遵循我们推荐的工程结构,您就可以独立编译每个功能而不涉及其他。


Q:我应该如何在免安装应用中的不同页面之间进行导航?

A:您可以通过进入一条目标页面的 URL 来导航过去。由于这个原因,免安装应用中的页面均需满足这个条件:可被 URL 寻址。想要了解更多如何让app页面可被 URL 寻址的内容,请参阅 “如何从 Google Play 请求功能” :

(https://developer.android.google.cn/topic/instant-apps/overview.html#play_store)

和 “实现应用链接” :

(https://developer.android.google.cn/topic/instant-apps/getting-started/index.html#app-links)


Q:我能在我的主应用里处理深度链接(Deep Link),然后再调用其他免安装应用的页面吗?

A:免安装应用需要在功能上实现模块化,通过主应用集中处理与此相矛盾。使用 App Link 即可进行您需要的链接跳转功能,同时保持免安装应用的模块化特性。


Q:我能在一个功能内包含多个页面吗?

A:您可以在一个功能内包含多个页面。但您需要留意的是,免安装应用下载有 4MB 的大小限制。同时,每个功能都需要用一个页面作为入口。


Q:我能在不同功能之间共享资源吗?

A:可以,基本功能(Base Feature)内的资源可以被所有功能分享。包含在附加功能之内的资源则只能被这个功能所使用。想要了解更多关于如何搭建您的项目资源,以及如何在不同功能之间共享资源,请参阅上面提到的 “项目结构”。

额外再说一点,您必须把位于附加功能和基本功能之间的资源 ID 区分开来。例如,如果您的基本功能提供了一个名为 R.id.feature_layout 的资源 ID,但您的附加功能却定义了另一个同 ID 资源,那么免安装应用就会使用来自基本功能的资源,而不会使用来自附加功能的资源。

此外,所有随着功能模块的产生而被引用的资源都必须在基本功能模块内出现。


Q:如果应用内有两个功能,它们是否会共享存储?

A:会,多个功能会在同一进程中运行,并共享应用上下文,只要它们属于同一个免安装应用。但是,免安装应用相较于可安装 APK 而言拥有一些限制。想要了解更多信息,请参阅 “了解受限和不受支持的功能” :

(https://developer.android.google.cn/topic/instant-apps/prepare.html#restricted)


Q:我能在同一页面内的 view-pager 中拥有多个分段(Fragment)吗?

A:可以,您能在单一页面中拥有多个分段,并在功能内定义与页面相关的分段。但请记住分段不能与深链接相关,并且不能独立于页面启动。


Q:免安装应用应该拥有独立的应用图标吗?

A:不,免安装应用和可安装应用应该使用同一个图标。可安装应用和免安装应用应该为用户提供一致的体验,因此它们应该使用同样的视觉元素(如图标)。

想要了解更多关于如何关联免安装应用和可安装应用的信息,请参阅 “同一个应用,安装前与安装后”:

(https://developer.android.google.cn/topic/instant-apps/ux-best-practices.html#instant-v-installed)


Q:我如何才能分辨出我的应用正在以可安装模式还是免安装模式运行?

A:您可以使用静态的 InstantApps.isInstantApp ( ) 方法。如果接受测试的进程属于一个免安装应用,这个方法的返回值将为 True 。


Q:我要如何鼓励用户从免安装应用中安装我的应用?

A:您可以使用静态的 InstantApps.showInstallPrompt ( ) 方法。这种方法会鼓励用户安装常规 APK 版本的应用。


Q:为各种功能使用的不同的 APK 会不会在 Google Play 里显示为不同的产品?

A:不会,免安装应用与可安装应用共享相同的包装名和产品列表。


Q:我在免安装应用内为功能命名时,会不会受到限制?

A:功能模块遵循 Java 命名规则。例如,您不能在功能名称中使用连字符。想要了解更多关于 Java 命名规则的内容,请参阅对应的 Java 文献:

(https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html)



3. Google 分析、Google Play 与部署


Q:我能让我的免安装应用只在限定的几个国家内发布吗?

A:免安装应用的使用范围限定于相应的可安装应用所在的国家和地区。在这些国家和地区的范围内,开发者可以选择在特定地区内发布自己的免安装应用。


Q:如果我想要通过 Google Play 在发布前测试我的免安装应用,我还需要首先发布可安装应用的 APK 吗?

A:想要通过 Google Play 在开发阶段测试您的免安装应用的部署情况,您就必须在 Google Play Console 中拥有 “草稿” 形式的可安装版本应用。

想要了解更多关于对您的免安装应用的进行部署,以及对其部署情况进行测试的信息,请参阅上面提到的 “发布您的免安装应用”。



4. 应用大小


Q:4MB 的总下载限制是什么意思?

A:免安装应用的大小(基本功能加上任何附带的附加功能)应该越小越好。您的应用越小,用户下载使用起来就越容易。但是,当您的免安装应用已经运行在用户的设备上时,您就可以使用用户的设备来下载并储存额外的数据。如果是用这种方式在用户的设备上使用数据,则不存在 4MB 的硬限制。

想要计算应用大小的话,只需解压免安装应用的 APK 并检查 APK 文件。您可以使用 APK 文件的磁盘容量,或是打开 APK Analyzer 并观察 Raw File Size 值。

对于那些拥有多个功能的免安装应用,您必须把基本功能 APK 的大小与单一功能 APK 合并计算。基本功能与单一功能 APK 文件大小之和必须小于 4MB


Q:用户每次下载同一个免安装应用时都需要下载基本功能 APK 和附加功能 APK 吗?

A:当用户首次下载免安装应用时,他们会下载基本功能和附加功能两个 APK。当用户请求其他功能的 APK 时,用户只会收到与所请求功能的 APK。在这种情况下,基本功能 APK 不需要被重复下载。

* 注意:系统会在垃圾整理期间根据需要清理免安装应用的缓存。如果手机重启,缓存会清空。如果免安装应用的缓存被清空,用户就必须重新下载基本功能的 APK。


Q:何时会触发 4MB 验证?

A:当您在制作阶段将免安装应用上传到 Google Play Console 时就会触发验证。



5. 应用链接、深链接与 URL 处理


Q:用户从一些应用点击链接时,链接并没有打开我的免安装应用,而是在应用内浏览器中打开了。有没有办法能保证用户被带到免安装应用里面去?

A:App Link 只是普通的 URL,所以应用可以强迫它们在应用内浏览器中打开。请考虑使用 Firebase Dynamic Links 来包装您的 URL,确保用户在点击您的链接时总能被带到您的免安装应用里去。


Q:我的主应用 manifest 里包括其他 URL 和其他 URL 域名,但我并不拥有这些域名。这样会产生什么后果?

A:很遗憾,如果一个 URL 的域名所有权未经确认,则会导致免安装应用发布失败。



6. 在设备上运行免安装应用


Q:用户能否放弃使用 Android Instant App?

A:能。用户在首次启动免安装应用时可以选择放弃。用户还可以选择打开 Settings 并点击 Google > Instant Apps 进行设置。


Q:两个免安装应用可以同时运行吗?

A:可以。免安装应用可以同时运行,用户可以在多个应用之间切换。只有位于前台的免安装应用会在通知栏内显示图标。


Q:用户能否在 “最近使用” 栏和设备主屏上结束和重启免安装应用的进程?

A:免安装应用可以从 “最近使用” 栏重启,用户还可以点击之前运行过的启动 URL 来重启应用。

当用户停止与免安装应用互动时,免安装应用的进程即被终止。但是,应用的内部存储,如 SQLite DB 还有共享偏好会保留下来。如果设备存储空间告急,免安装应用可能会被删除,它的内部存储也会一同被删除。虽然这种情况不太可能出现,但当它出现的时候还想恢复用户的使用状态和偏好信息的话,开发者需要从服务端解决。


Q:免安装应用能不能启动用户设备上安装的其他应用?

A:免安装应用可以通过发出隐式意图 (implicit intent) 来启动一个可安装应用,但无法使用显式意图 (explicit intent) 来启动大多数可安装应用。但可安装应用可选择对那些发出显式意图的免安装应用开放。


Q:如果用户安装了较旧版本的应用,并点击了与较新版本免安装应用相关联的 URL,会打开哪个应用?

A:可安装应用永远优先于免安装应用打开。


Q:用户如何接收我的免安装应用的最新版本? Google 会不会在用户的设备上自动对它进行更新?

A:最新版本的免安装应用将提供给新用户使用,现有用户的免安装应用缓存过期时,也会获取最新版本的应用。



以上就是这一次的 FAQ 内容。想要打造良好的免安装体验,请点击 “阅读原文” 进一步查阅我们的最佳案例。如果您手里已经有安装版本的应用,何不试试再进一步,让您的应用无需安装即可使用呢?

这篇关于Instant App 常见问题官方指南 | Android 开发者 FAQ Vol.6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1118184

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目