本文位于CodeProject的赞助商的产品展示部分。这些文章旨在为您提供我们认为有用且对开发人员有价值的产品和服务的信息。
对于手机用户来说,获得“存储空间不足”警告可能会非常烦人。手机存储容量仍然是有限的资源。虽然手机存储容量多年来一直在增长,但是所有能够填满我们手机的东西:音乐,应用程序,游戏,照片等等。
传统的Android Package Kit(APK)包含应用程序支持的所有设备的代码和资源(布局文件,图像等)的集合。因此,当您安装APK时,您正在安装您可能永远不会使用的资源。您的屏幕尺寸不会改变您的CPU; 您通常不会说应用程序支持的所有语言。很明显,APK比你要求的更多,占用的空间比实际需要的多。
但是,如果超大的APK是您存在的祸根,那么您现在有了解决方案。在Android应用程序捆绑在今年的谷歌I / O介绍,以帮助开发者在更小尺寸的APK提供卓越的应用程序。下面,我将解释Android App Bundles如何为您提供帮助,并演示如何使用它们。
Android App Bundle只是一种发布格式 - 精确地说是一个带有.aab扩展名的zip存档。它包含应用程序支持的所有设备的代码和资源,例如DEX文件,本机库,清单文件,资产等。一旦上传用于发布,Google Play就会处理APK签名和生成,这个过程称为动态传递。动态传递用于根据用户的设备配置为用户生成优化的APK。这究竟是怎么做到的?
拆分APK(在Lollipop中引入)是从给定的Android应用程序包生成的,并且像单个APK一样。一个典型的应用程序获得基础APK和配置APK。而且,如果应用程序具有动态功能,用户也可以获得动态功能APK及其配置APK。基本APK包含所有设备配置共有的文件,如清单文件。为您生成配置APK,每个配置包括特定设备配置的资源:语言,CPU架构或屏幕密度。因此,用户获得标准基本APK,与所有其他设备一样,以及仅包含用户设备的相关资源的配置APK。
这意味着我的Android One手机(小米米A1)获得基础APK,配置英文版APK,arm64 CPU架构和xhdpi屏幕分辨率。更有趣 - 当设备配置(如语言)发生变化时,Google Play会检测到它并下载该语言的配置APK。为了进一步降低APK大小,计划基于纹理压缩格式,图形API和新平台功能来定位设备。
动态功能APK包含用户首次安装应用时不需要的应用功能的代码和资源。开发人员可以将其功能或功能添加到他们的应用程序中,作为Google Play按需提供的动态功能模块,而不是在安装时,进一步减少应用程序下载大小。开发占用大量空间但在安装时不需要的功能以及很少用于动态功能模块的功能是有意义的。
具有早于Lollipop的Android版本的设备也会看到一些明显的尺寸减小,但其APK中将包含所有语言。
到目前为止,很明显构建一个巨大的APK是无效的,并且是一条过时的路径。Android App Bundle是Android应用程序交付的未来,稍后我们将看到如何构建一个。
Android App Bundle与APK有一些相似之处,但它们是截然不同的,并且用于不同的目的。首先,应用程序包纯粹是为了上传。用户无法直接安装和使用它。应用包是一个ZIP存档文件,从中生成优化的APK并将其提供给设备。Android App Bundle包含用于帮助工具生成APK的元数据文件(最终不会在APK中)。此外,应用程序包具有严格的验证标准。
从APK切换到应用包是一个无缝过程。使用Android Studio 3.2及更高版本,您只需点击几下即可生成已签名的应用程序包,并将其上传到Play商店,以便用户开始享受小型APK的优势。由于您的代码库没有重大变化,因此无需担心。由于Dynamic Delivery,Android App Bundle的早期采用者已经报告了应用程序大小的显着减少。一些开发者甚至将他们的APK大小减半。
Android App Bundles为应用开发者和用户带来了诸多好处。在这里,我们来看看其中的一些好处。
您只能期望更长的列表,因为许多有趣的功能很快就会被开发人员使用,例如即将支持即时应用的应用程序包。
大多数应用项目都不需要花费太多精力来构建支持使用动态传递服务优化的APK的应用包。事实上,只需在Android Studio中点击几下,如果您已根据既定惯例组织应用程序代码和资源,则可以构建已签名的Android应用程序包,以便发布。但首先,我们需要获得Android Studio Canary。另外值得注意的是Android Studio 3.2稳定版最近已经发布。
在Android Studio中打开项目后,转到菜单栏并选择Build> Build Bundle(s)/ APKs> Build Bundle(s)。等待生成应用包。您可以通过在生成应用程序包后从弹出窗口中选择选项来找到.aab文件或分析生成的应用程序包。
此Android App Bundle无法上传到Play控制台,因为它未签名。要生成签名版本,请选择“生成”>“生成签名捆绑包/ APK”>“Android应用程序包”>“选择基本模块”>“输入签名凭据”并选中任何其他选项(就像对APK一样)。
可以通过命令行使用Gradle的捆绑任务生成相同的Android App Bundle。要生成已签名的应用程序包,必须在模块的build.gradle文件中配置签名信息。
# building the app bundle ./gradlew modulename:bundle ./gradlew modulename:bundleVariant
要更好地控制从Android应用程序包生成拆分的方式,您可以从捆绑块中执行此操作。
android { ... bundle { density { enableSplit = <true or false> } language { enableSplit = <true or false> } abi { enableSplit = <true or false> } } }
Bundletool是一个用于处理Android App Bundles的命令行工具。使用bundletool,您可以构建Android应用程序包,提取连接的设备规范,生成APK Set存档(.apks),从APK Set存档中提取/安装APK,以及验证应用程序包。由于Android App Bundle仅是一种发布格式,因此bundletool用于生成用于测试的APK。Google Play和IDE使用相同的工具。
该工具是开源的,可以在GitHub上找到。
bundletool <command> ...
这是bundletool接受的所有命令的列表:build-bundle,build-apks,extract-apks,get-device-spec,install-apks,validate和version。使用bundletool help <command>获取有关命令的详细信息,例如标志和其他选项。
在以下示例中,我们将找到连接设备的规范,构建APK,并为连接的设备安装APK。
# Get Device Spec bundletool get-device-spec --adb='/usr/bin/adb' --output='specs.json' # View Device Specification cat specs.json { "supportedAbis": ["arm64-v8a", "armeabi-v7a", "armeabi"], "supportedLocales": ["en-US"], "screenDensity": 480, "sdkVersion": 27 } # Build APKs bundletool build-apks --bundle='<path-to-.aab>' / --device-spec='<path-to-specs.json>' --output='<path-to-output.apks>' # Install the APK bundletool install-apks --apks='<path-to-ouput.apks>'
动态功能模块使您可以将某些功能移动到单独的模块中。动态传递用于根据需要向用户提供这些功能。动态功能模块需要一些努力和仔细考虑。有关创建和配置动态功能模块的更多详细信息,请查看文档。
拥有已签名的Android App Bundle后,您可以将其上传到Play商店,让Google Play动态地为您的用户提供优化的APK。您还需要通过Google Play 注册应用签名,以便上传应用包。
通过Google Play进行的应用签名提供了一种管理应用签名密钥的安全方式。Google Play管理您的应用签名密钥,您只使用上传密钥,该密钥用于验证您的身份。自己管理应用程序签名密钥非常危险。丢失密钥后,您将无法更新已发布的应用; 同样,你的钥匙很容易被盗。将签名过程委派给Google Play可确保您的密钥更安全,并且您可以请求重置上传密钥。所以,你永远不必被锁在自己的应用程序之外。注册应用签名后,Google Play会自动生成并签署发送给用户设备的APK。
上传后,单击应用程序包并选择Explore App Bundle以查看保存的大小。从这里,您可以搜索和下载特定于设备的APK。对于列出的配置,您可以选择查看设备以查看将获得该特定APK的设备列表。
好消息是Android App Bundle可以通过Publishing API发布。
正如我们所见,Android App Bundle是Android应用交付的未来,渲染单片APK已经过时。应用程序不仅可以从减小尺寸中受益,而且应用程序还可以提供按需功能,为每个用户提供独特的体验。
更有趣的是,开发人员只需要很少的努 一些开发人员已经看到应用程序大小的大幅减少。用户也可以获得极大的好处,因为他们的设备可以为音乐,电影甚至应用等其他内容提供更多的可用空间 使用Android Vitals,开发人员可以进一步提高其应用在用户设备上的性能和稳定性。
热门源码