Android 扩展文件支持

Android 扩展文件支持

每日构建版本 1082 起,我们很高兴地宣布支持 Google Play 扩展文件,这将大大简化您的移动应用程序开发。您为什么要使用扩展文件?事实证明,Google Play 对 APK 文件的大小限制为 50MB。他们设置这个限制是为了当用户必须更新他们的应用程序时,他们不必再次下载所有的资源文件,这可能会花费很长时间。为了解决这个问题,Google 还允许您上传扩展文件。这些文件不应该被更新,因为它们的大小可以达到 2GB。
Downloading an Expansion File

我们已尽力使其易于您使用。Corona SDK 将把除了 Lua 脚本之外的所有内容打包到扩展文件中,正确命名,然后将其放入正确的格式。所有这些都是在本地完成的,因此即使您有 2GB 的资源文件,也不必担心网速慢。您所要做的就是在build.settings 文件中添加一个设置,将您的许可密钥放入 config.lua 文件,然后将您的 APK 和扩展文件上传到 Google Play。以下是一个示例 build.settings 文件

请注意,usesExpansionFile = true 这一行表示,仅当您的构建目标是 Google Play 商店时,才会为您构建扩展文件。您还应该添加这 3 个权限,以便我们可以为您下载扩展文件。您需要添加 3 个权限,以便我们可以自动为您下载扩展文件。android.permission.INTERNET 权限允许我们从 Google 的服务器下载扩展文件。扩展文件必须保存在外部存储上的特定位置,这就是为什么我们需要 android.permission.WRITE_EXTERNAL_STORAGE 权限的原因。这就剩下最后一个权限:com.android.vending.CHECK_LICENSE。为了获取下载扩展文件的 URL,我们必须通过 Google Play 的应用程序许可服务。让我们看一下 config.lua,了解我们如何设置许可。

您所要做的就是将您的密钥放入 config.lua 的适当部分,就完成了。此密钥允许我们与 Google 的服务器进行核对,以查看我们需要下载哪些文件,并查看我们是否需要下载任何新的或丢失的文件。

如果您必须用 Java 原生编写应用程序,那么在您甚至可以启动应用程序之前,您必须考虑很多情况。

  • 如果用户的外部存储空间不足怎么办?我最好检查一下他们是否有足够的空间。
  • 如果用户甚至没有挂载他们的外部存储设备怎么办?看来我得先检查一下。
  • 如果用户没有网络连接怎么办?我最好警告他们。
  • 如果我更新了我的 APK 而没有更新我的扩展文件怎么办?我想我需要更新我的代码以使用正确的扩展文件。
  • 如果用户擦除了他们的外部存储设备怎么办?我必须在一个下载屏幕中再次下载这些文件,该下载屏幕必须在所有方向上都工作并且看起来不错。
  • 如果在下载过程中网络失败怎么办?我必须让用户重试下载。
  • 如果用户在下载正在进行时离开应用程序怎么办?我必须处理用户退出应用程序的情况。
  • 用户如何知道扩展文件何时下载完成?我需要实现通知。
  • 我该如何制作扩展文件?我必须做大量的研究来了解如何打包它们。
  • 我应该将扩展文件下载到哪里?需要更多研究时间。
  • 我该怎么做才能让我的生活更轻松?使用 Corona SDK!

所有这些情况以及更多情况都由 Corona SDK 处理,因此您甚至不必考虑它们。

是时候让您的资源文件疯狂起来了!

标签
,
Perry Clarke
[email protected]
23 条评论
  • Graham Ranson
    发布于 10:34,4 月 17 日

    我很高兴地说,截至昨晚 GMT,我们在 Play 商店中推出了 HD 版本的 Forever Lost,其中包含扩展文件,而且它完美无缺!

  • Stephen Lewis
    发布于 13:16,4 月 17 日

    酷。这才是真正的 Corona 化!

    如果在 iOS、Kindle Fire 和 Nook 上做类似的事情,有哪些可用的选项(如果有的话)?这是 Corona Cloud 可以或将要支持的吗?

    • Walter
      发布于 13:56,4 月 17 日

      是的,Corona 化,宝贝!

      所以这实际上是 Google Play 特有的限制。您不必担心其他商店的这个问题。

      • Andreas
        发布于 06:04,4 月 18 日

        你好,Walter,

        这是个好消息,我已经有一个非常好的应用程序可以立即在 Google Play 上使用它了(我甚至几周前就开始编写自己的内容下载系统,但现在它已经过时了)。

        除此之外,大约两个月前,NOOK 商店和三星应用程序的 50 MB 限制仍然存在,我猜现在仍然存在。在 Android 方面,只有亚马逊 Android 商店没有限制。

        另一件事:您如何支持国际本地化?我如何为所有这些通知放入德语/日语/俄语等文本?或者您是否已经实现了所有语言的文本?

        谢谢&最佳,
        Andreas

      • TieLore
        发布于 12:26,4 月 18 日

        实际上,上次我上传到 NOOK 时,他们的限制是 100MB。我的游戏超出了这个限制,所以看来我们也需要 NOOK 的这个选项。

  • Emanouel P
    发布于 09:56,4 月 18 日

    真是个好消息。

    扩展文件是 zip 格式吗?扩展文件中的文件是否会放置在程序中的同一位置?

    提前感谢

    • dchan
      发布于 10:28,4 月 18 日

      扩展文件采用不透明二进制 Blob (obb) 格式。它由模拟器创建并放置在与您的 apk 文件相同的目录中。在设备本身上,它放置在外部存储/Android/obb/package.name 目录中。您需要将您的 apk 上传到 Google,否则它不会自动下载。

      • Emanouel P
        发布于 21:53,4 月 18 日

        谢谢你的信息。我如何创建那种类型的文件并选择放入其中的内容?

        • Joshua Quick
          发布于 20:25,4 月 19 日

          正如这篇博客文章中所记录的那样,Corona Simulator 会自动为您创建扩展文件。它只需要您对“build.settings”和“config.lua”文件进行更改。

          Corona Simulator 将您的项目的所有文件都放入扩展文件中,“除了”您的 Lua 脚本。APK 仅包含您的脚本和我们编译的本地代码/插件/库。

          您无法选择将哪些内容放入扩展文件中。这样做是为了简化 Corona 开发者的操作。

  • Marc C
    发布于 10:34, 4月18日

    有人能告诉我,在使用 network.download API 时,Corona 是否会处理设备内存不足的情况吗?

    • Joshua Quick
      发布于 20:19, 4月19日

      是的,如果外部存储空间不足,Corona 的下载界面会自动通知用户。也就是说,通常情况下,当最终用户购买您的应用时,Google Play 会自动为您下载扩展文件,在这种情况下,Google Play 会为我们进行此项检查。

      此外,Corona 始终会在启动时检查外部存储是否已挂载(但仅当启用扩展文件支持时),如果未挂载则会警告用户。即使下载扩展文件后,也会进行此项检查,因为 Corona 始终会执行文件存在性检查。只有当外部存储挂载后,您的 main.lua 文件才会执行。

  • Jamie
    发布于 10:54, 4月18日

    很棒的信息!“这些文件不应该被更新” 对开发者来说到底意味着什么?意图很明确,但实际情况却不那么清晰。如果我们搞砸了放入扩展文件中的某些东西,我们是否永远无法修复,或者修复会冒着惹恼客户的风险?当我们明确希望或不希望更新扩展文件时,我们如何更新应用?提前感谢!

  • dittophantassy
    发布于 13:42, 4月18日

    有没有办法将资源(图像、声音等)同时放在资源文件和 apk 中?
    假设我想更新一个图像,而且不想让用户再次下载扩展文件,我可以让代码将图像指向 apk 内部的位置吗?
    我可以使扩展文件下载成为可选的吗?例如,如果用户没有网络连接或磁盘空间,可以向用户显示演示或帮助屏幕吗?
    谢谢。

    • Joshua Quick
      发布于 20:14, 4月19日

      如果您需要更新资源文件,最好的解决方案是创建一个“补丁”扩展文件。您需要做的就是上传一个新版本的 APK(带有新的版本代码)并上传一个“补丁”扩展文件,但告诉 Android 开发者控制台使用旧的“主”扩展文件。这是处理此问题的最佳方式。不幸的是,Corona 模拟器不支持创建“补丁”扩展文件,但如果您有冒险精神,可以自己轻松完成。以下说明指示如何在 Mac 上执行此操作。

      1) 创建一个新目录来包含补丁的文件。
      2) 将您的更新图像和资源复制到此补丁目录。
      3) 打开终端窗口并使用“cd”(即:更改目录)命令进入该目录。
      4) 运行以下命令行对其进行压缩。
      >> zip -r -0 ../patch.zip *
      5) 将 zip 文件重命名为以下名称…
      >> patch…obb

      希望这对您有所帮助。

  • Andreas
    发布于 00:28, 4月22日

    嗨,Joshua,

    您如何支持国际化本地化?我如何为所有这些通知添加德语/日语/俄语等文本?还是您已经实现了所有语言的文本?

    谢谢&最佳,
    Andreas

    • Andreas
      发布于 00:31, 4月23日

      嗨,

      dchan 回答了这个问题

      很遗憾,目前扩展文件下载屏幕没有本地化。不过,下载屏幕并不经常显示,因为通常 Google 会自动为您下载扩展文件。下载屏幕仅在发生问题时才会显示,例如用户擦除了他们的 SD 卡。

      最好的,
      Andreas

  • Glory
    发布于 06:21, 4月24日

    感谢您终于写了关于 >Android 扩展文件支持 | Corona Labs < 的文章!我很喜欢!

  • Matt
    发布于 16:03, 5月31日

    好的.. 我按照这个操作,并尝试使用最新的 1134 构建版本构建 Google Play,但它仍然构建出一个大型 .apk 文件。这是正确的吗?

    • Matt
      发布于 17:24, 5月31日

      没关系…我的问题是 config.lua 中的拼写错误

  • mike kelly
    发布于 13:05, 3月19日

    有人能告诉我为什么会生成错误吗
    settings =
    {
    orientation =
    {
    default = “portrait”,
    supported =
    {
    “portrait”, “portraitUpsideDown”,
    },
    },
    android =
    {
    versionCode = “50”,
    usesExpansionFile = true,
    largeHeap = true,
    usesPermissions =
    {
    “android.permission.WRITE_EXTERNAL_STORAGE”,
    “android.permission.VIBRATE”,
    “android.permission.CLEAR_APP_USER_DATA”,
    “android.permission.CAMERA”,
    “android.permission.GET_TASKS”,
    “android.permission.INTERNAL_SYSTEM_WINDOW”,
    “android.permission.MODIFY_AUDIO_SETTINGS”,
    “android.permission.INSTALL_PACKAGES”,
    “android.permission.READ_EXTERNAL_STORAGE”,
    “android.permission.READ_FRAME_BUFFER”,
    “android.permission.RECORD_AUDIO”,
    “android.permission.SET_PROCESS_LIMIT”,
    “android.permission.INTERNET”,
    “com.android.vending.CHECK_LICENSE”,
    },
    usesFeatures =
    { name = “android.hardware.camera”, required = true },
    {name=”android.hardware.screen.portrait”, required = true},
    { name = “android.hardware.microphone”, required = true },
    { name = “android.hardware.location”, required = false },
    { name = “android.hardware.location.gps”, required = false },
    supportsScreens =
    {
    smallScreens = true,
    normalScreens = true,
    largeScreens = true,
    xlargelScreens = true,
    },

    },
    }

  • J. A. Whye
    发布于 19:20, 12月27日

    您说,“您要做的就是将您的密钥放入适当的部分……”

    什么密钥?我在哪里找到/生成它?

    Jay

  • Robert Phillips
    发布于 08:23, 1月20日

    如果用户的设备没有外部存储卡会发生什么?

    干杯,

    Rob

  • Nanda
    发布于 23:51, 8月05日

    我们有一个资源需要放入主 apk 文件中,而不是放入扩展文件(obb)中。那么是否可以选择哪些文件放入 apk 中,哪些文件放入扩展文件中?因为现在,所有资源都放入 obb 文件中,这不是我们想要的。