最后
给大家送一个小福利
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。
Google Play 商店会以归档文件(而非拆分 APK)的形式提供配置为 fast-follow 和 on-demand 的资源包。这些资源包随后会在应用的内部存储空间中展开。你可以使用 Play Core API 查询以这种方式提供的资源包的位置。应用无法假设这些文件的存在或其位置,因为它们可能会被用户删除,或由 Play Core SDK 在游戏会话之间移动。尽管这些文件可由应用写入,你也应将其视为只读文件,因为资源包补丁程序依赖于这些文件的完整性。
资源更新
更新应用时,install-time Asset Pack 会作为基础应用更新的一部分进行更新(开发者无需执行任何操作)。
对于 fast-follow 和 on-demand Asset Pack 的应用更新,则遵循以下步骤:
-
1、系统将应用的补丁程序(包括所有资产)下载到设备上的安全位置。
-
2、更新应用二进制文件;这包括所有 install-time Asset Pack。
-
3、之前下载的所有 Asset Pack 变为无效。
-
4、将资产的补丁程序复制并应用到存储在应用内部存储空间中的资产。
在大多数情况下,当用户打开游戏时,整体更新已完成,用户可以立即开始玩更新后的版本。在极少数情况下,当用户打开应用时,应用二进制文件可能已完成更新,但资产的补丁程序应用过程尚未完成,因此用户尚无法访问这些资产。为了应对此类情形,你需要针对这些资产提供相应的“正在更新”界面元素,或构建逻辑来处理尚无法访问的无效资源。由于只有在所有 Asset Pack 类型均已下载后,应用二进制文件才会更新,因此补丁程序的应用操作会在本地以离线方式进行,且应快速完成。
纹理压缩格式定位
纹理压缩是一种有损图像压缩,可让 GPU 使用专用硬件直接从压缩纹理进行渲染,从而减少所需的纹理内存和内存带宽用量。借助纹理压缩格式定位功能,你可以在 Android App Bundle 中添加使用多种纹理压缩格式压缩的纹理,并且依靠 Google Play 自动为每种设备提供采用最佳纹理压缩格式的资源。
应用版本更新
新版本的应用上传到 Google Play 后,如果用户未在设备上更新该应用,他们可以打开之前的应用版本。在这种情况下,如有必要,应用可以通过调用 In-App Updates API 选择强制更新或建议更新。借助此 API,你可以从应用内触发更新,而不是让用户从 Google Play 商店触发更新。
下载大小上限
Asset Pack 因具有较高的大小上限而成为大型游戏的理想之选:
-
1、每个 fast-follow 和 on-demand Asset Pack 的下载大小上限为 512 MB。
-
2、所有 install-time Asset Pack 的总下载大小上限为 1 GB。
-
3、一个 Android App Bundle 中的所有 Asset Pack 的总下载大小上限为 2 GB。
-
4、一个 Android App Bundle 中最多可以使用 50 个资源包。
如果你使用的是纹理压缩格式定位,那么这些下载限制会分别应用于每个独一无二的纹理格式。
针对Java 代码构建
你可以按照以下步骤将 Play Asset Delivery 内置到项目的 Android App Bundle 中。你无需使用 Android Studio 即可执行这些步骤。
- 1、将 Play Core 库导入项目。
// In your app’s build.gradle file:
…
dependencies {
// This dependency is downloaded from the Google’s Maven repository.
// So, make sure you also include that repository in your project’s build.gradle file.
implementation ‘com.google.android.play:core:1.10.0’
// For Kotlin users also add the Kotlin extensions library for Play Core:
implementation ‘com.google.android.play:core-ktx:1.8.1’
…
}
Play Core KTX 库是可选的,为常规 Play Core 库中的异步方法调用提供了 Kotlin 协程版本,并且提供了其他有用的扩展,使得从 Kotlin 使用 API 更为得心应手。
-
2、在项目的 build.gradle 文件中将 Android Gradle 插件的版本更新为4.0.0 或更高版本。
-
3、在项目的顶级目录中,为 Asset Pack 创建一个目录。此目录名称将用作 Asset Pack 名称。Asset Pack 名称必须以字母开头,并且只能包含字母、数字和下划线。
-
4、在 Asset Pack 目录中,创建一个 build.gradle 文件并添加以下代码。请务必指定 Asset Pack 的名称,并且仅指定一种分发类型:
// In the asset pack’s build.gradle file:
apply plugin: ‘com.android.asset-pack’
assetPack {
packName = “asset-pack-name” // Directory name for the asset pack
dynamicDelivery {
deliveryType = “[ install-time | fast-follow | on-demand ]”
}
}
- 5、在项目的应用 build.gradle文件中,添加项目中每个 Asset Pack 的名称,如下所示:
// In the app build.gradle file:
android {
…
assetPacks = [“:asset-pack-name”, “:asset-pack2-name”]
}
- 6、在项目的 settings.gradle 文件中,添加项目中的所有 Asset Pack,如下所示:
// In the settings.gradle file:
include ‘:app’
include ‘:asset-pack-name’
include ‘:asset-pack2-name’
-
7、在 Asset Pack 目录中,创建以下子目录:src/main/assets。
-
8、将资产放置在 src/main/assets 目录中。你也可以在此处创建子目录。应用的目录结构现在应如下所示:
-
1)build.gradle
-
2)settings.gradle
-
3)app/
-
4)asset-pack-name/build.gradle
-
5)asset-pack-name/src/main/assets/your-asset-directories
-
9、使用 Gradle 构建 Android App Bundle。在生成的 app bundle 中,根级目录现在包含以下内容:
-
1)asset-pack-name/manifest/AndroidManifest.xml:配置 Asset Pack 的标识符和分发模式
-
2)asset-pack-name/assets/your-asset-directories:此目录包含作为 Asset Pack 的一部分分发的所有资产
Gradle 会为每个 Asset Pack 生成清单,并为你输出 assets/ 目录。
- 10、(可选)配置 App Bundle 以支持不同的纹理压缩格式。
常见的纹理压缩格式:
-
DDS 或 S3TC:有时称为 DXTC 或 DXTn。OpenGL 支持此格式的三种形式。
-
ETC1:大多数设备都支持此格式。这种格式不支持透明度,但游戏可将第二个纹理文件用于 Alpha 通道组件。
-
ETC2:支持 GLES3 的所有设备均支持此格式。
-
PVRTC:iOS 游戏常用的格式,在某些 Android 设备上也受支持。
-
ASTC:专为取代之前的格式而设计的新格式。比先前的格式更加灵活,因为它支持各种块大小。使用这种格式可以帮助你优化游戏大小。
支持的格式及支持相应格式设备所占的百分比:
Play Core API 集成
请务必先将 Play Core 库添加到你的项目中。
Play Core Java API 提供了用于请求资源包、管理下载内容和获取资源的 AssetPackManager 类。请务必先将 Play Core 库添加到你的项目中。 你可以根据希望获取的资源包的分发类型来实现此 API。这些步骤如以下流程图所示。
注意: 用于获取 install-time Asset Pack 的 API 与用于获取 fast-follow 和 on-demand Asset Pack 的 API 不同。
安装时分发
配置为 install-time 的资源包可以在应用启动后立即使用。使用 Java AssetManager API 获取在此模式下提供的资产:
import android.content.res.AssetManager;
…
Context context = createPackageContext(“com.example.app”, 0);
AssetManager assetManager = context.getAssets();
InputStream is = assetManager.open(“asset-name”);
快速跟进式分发和按需分发
以下几部分介绍了如何在下载 Asset Pack 前获取其相关信息、如何调用 API 以开始下载,以及之后如何获取已下载的 Asset Pack。这几部分适用于 fast-follow 和 on-demand Asset Pack。
查看状态
每个资源包都存储于应用的内部存储空间内单独的文件夹中。使用 getPackLocation() 方法确定 Asset Pack 的根文件夹。此方法会返回以下值:
-
有效的AssetPackLocation对象:资源包根文件夹位于 assetsPath(),现已可立即获取
-
null:未知 Asset Pack 或资产无法使用
**注意:**请勿依赖在两次应用启动之间的间隔时间内缓存的 Asset Pack 位置。应用应在每次启动时始终检查是否存在 Asset Pack。Asset Pack 可能会因应用更新或用户清除应用数据而变为无效。
获取有关资源包的下载信息
在提取资源包之前,应用必须披露下载内容的大小。使用getPackStates() 方法确定下载内容的大小,以及资源包是否已在下载。
Task getPackStates(List packNames)
getPackStates() 是用于返回任务的异步方法。该任务的结果包含一个 AssetPackStates 对象。AssetPackStates 对象的 packStates() 方法会返回一个 Map<String, AssetPackState>。此映射包含所请求的每个 Asset Pack 的状态,按其名称进行键控:
Map<String, AssetPackState> AssetPackStates#packStates()
最终请求如下所示:
final String assetPackName = “myasset”;
assetPackManager
.getPackStates(Collections.singletonList(assetPackName))
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Task task) {
AssetPackStates assetPackStates;
try {
assetPackStates = task.getResult();
AssetPackState assetPackState =
assetPackStates.packStates().get(assetPackName);
} catch (RuntimeExecutionException e) {
Log.d(“MainActivity”, e.getMessage());
return;
})
以下 AssetPackState 方法提供了资源包的大小、截至目前已下载的数据量(如已请求),以及已传输到应用的数据量:
-
totalBytesToDownload()
-
bytesDownloaded()
-
transferProgressPercentage()
复习的面试资料
这些面试全部出自大厂面试真题和面试合集当中,小编已经为大家整理完毕(PDF版)
- 第一部分:Java基础-中级-高级
- 第二部分:开源框架(SSM:Spring+SpringMVC+MyBatis)
- 第三部分:性能调优(JVM+MySQL+Tomcat)
- 第四部分:分布式(限流:ZK+Nginx;缓存:Redis+MongoDB+Memcached;通讯:MQ+kafka)
- 第五部分:微服务(SpringBoot+SpringCloud+Dubbo)
- 第六部分:其他:并发编程+设计模式+数据结构与算法+网络
进阶学习笔记pdf
- Java架构进阶之架构筑基篇(Java基础+并发编程+JVM+MySQL+Tomcat+网络+数据结构与算法)
- Java架构进阶之开源框架篇(设计模式+Spring+SpringMVC+MyBatis)
- Java架构进阶之分布式架构篇 (限流(ZK/Nginx)+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
+缓存(Redis/MongoDB/Memcached)+通讯(MQ/kafka))
[外链图片转存中…(img-dDAsde1J-1715365946485)]
[外链图片转存中…(img-oexeCtrC-1715365946485)]
[外链图片转存中…(img-wmPR3AKa-1715365946485)]
- Java架构进阶之微服务架构篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)
[外链图片转存中…(img-MKjpvzDG-1715365946486)]
[外链图片转存中…(img-xNFykKaD-1715365946486)]