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)