Google Play 商店之外的 APK 安装限制

5
我希望创建一个大型的应用程序,分发给 Play Store 之外的一组特定用户。我打算通过 ADB 安装此应用程序,但是我找不到关于大小限制的确切信息。
我创建了一个简单的测试 APK,并将 1.8GB 的内容转储到资产文件夹中。ADB 抛出以下错误:
could not allocate buffer for 'sizetest.apk'

我曾在一台有7GB可用空间的设备上尝试过这个操作,因此我想知道这个错误来自哪里。是设备存储/系统存储/设备内存/我的电脑内存/ADB本身引起的,是否有解决方法?

此外,我尝试直接将文件复制到设备上,并通过文件管理器在那里安装。这成功了(虽然花费了很长时间)。那么这是ADB特定的问题吗? - Leonard Feehan
你有检查设备内部存储空间还剩多少吗? - David Medenjak
2个回答

5
这是ADB存在的问题。ADB以前会验证文件是否为APK,并在安装之前将整个文件读入内存。这可能会导致mallac返回NULL,从而关闭您的ADB会话(请参见file_sync_client.c 335-341行)。 此问题已在此处得到解决。

删除在传输APK之前验证APK的支持,因为它在发送之前将整个APK读入内存中!


我创建了一个简单的hello world项目,并创建了一个大文件(1.8 GB),并将该文件添加到资产中。ADB成功将APK安装在我的设备上。
只要设备有足够的自由空间,APK就应该可以安装。如果您仍然收到错误“无法为'APK'分配缓冲区”,则请更新adb。
DEX限制:
我知道的唯一大小限制是dex文件的大小。如果dex文件(APK中的classes.dex)超过5 MB并需要安装在Froyo或Gingerbread上,则安装将失败。最近版本的Android使用8或16 MB的缓冲区。您可以使用multidex解决此问题。然而,您可能不需要担心dex文件的大小(更多信息)。

0

这可能不是一个好的答案或者你想要的东西。但它可能是一个不错的解决方案。你可以将其作为定制安卓ROM的一部分打包,然后将ROM刷入计划安装它的设备上。


最终我会做的就是这样。但在此之前,为了进行内部测试和有限分发,我需要一个可靠的安装方法。 - Leonard Feehan
使用ADK附带的Android虚拟机无法工作?我使用ADK Eclipse插件,只需按下F5或运行按钮即可将应用程序安装在虚拟机上。 - Ben P. Dorsi-Todaro
必须有一种方法可以在虚拟机上刷入自定义ROM。老实说,我更好奇这是什么类型的应用程序。 - Ben P. Dorsi-Todaro
我需要将它交给一个客户,他们将与Android分发捆绑在一起,但在这个早期阶段我没有关于他们的流程的信息。因此,我只想找出如果我交给他们一个1.8GB的APK文件,是否会有拒绝的理由。(另外,我已经在我的问题中添加了更多信息的评论) - Leonard Feehan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接