【问题标题】:How to Reduce AIR app file size?如何减小 AIR 应用程序文件大小?
【发布时间】:2012-03-11 05:45:17
【问题描述】:

我已将 AIR 构建的 .ipa 文件上传到 Apple。来自 Apple:“下面列出的应用程序二进制文件在您提交时为 8 MB,但在 App Store 处理后将为 20 MB”

所以我正在尝试修剪它。我已经摆脱了所有未使用的 .as 类和所有未使用的资产。有没有人有任何巧妙的方法来进一步减小文件大小?我想到的一种方法是:

如果我在 A 类:

[Embed(source="assets/newButtons/purple/purpleHomeSmall.png")]

然后我用相同的代码将它重新嵌入到 B 类中,这是否意味着它以两倍的文件大小嵌入了两次?如果是这样,我将如何将它嵌入到一个类中但可以在其他类中访问它?

编辑:我发现如果你的项目中有你不使用的资产,编译器仍然会添加它们。因此,您必须在发布版本之前摆脱它们。

【问题讨论】:

  • 检查生成的 IPA 文件(它实际上是一个 ZIP 文件 - 因此您可以重命名并解压缩它)。它是否包含您期望的文件,或者它们实际上是否嵌入了两次?
  • 我重命名并解压缩。它创建了一个名为 Payload 的文件夹,其中有 1 个项目,一个 .app 文件,大小为 22 兆。 (我在 Mac 上)。
  • 现在在您的 Mac 上选择该应用时使用显示捆绑内容。
  • 很酷的把戏 - 谢谢!我只看到一次文件,但那些是 .png 源文件。 Unix 可执行文件为 21 兆;我不知道他们是否在那里两次。
  • flex 编译器应该检测到基本上使用相同资源两次,并且在这种情况下用户 swf 大小不应加倍。

标签: ios actionscript-3 mobile air embed


【解决方案1】:

为什么不直接在运行时从 URI 加载它,而不是嵌入源代码? 创建一个抽象位图类,该类从 URI 构建位图并将其放置在舞台上。 这样,您可以确保位图只存储一次并且延迟加载。

更新

您可以为 iOS 设置对话框添加一个空中文件夹。 放置您想要的图像,然后:

var imageLoader:Loader = new Loader();
var theURL:String = "string to your uri can be local or web";
var imageRequest = new URLRequest(theURL);

imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);

imageLoader.load(imageRequest);

function onComplete(evt:Event)
{

addChild(imageLoader.content);

}

【讨论】:

  • 有趣的想法。但我想 .png 文件的大小必须包含在应用程序中,如果它是设备本地的(我不希望应用程序每次加载时都去互联网查找资产)。嗯...您可以发布示例代码吗?同时,我发现了一些我在上面添加为编辑的发现。谢谢!
  • @davidbates,这仅对 flex web 应用程序有效,其中嵌入的资源在编译时包含在 swf 中。当您有一个 air 应用程序时,未包含在 swf 中并标记为要发布的文件的全部内容将包含在生成的 .air / .ipa 文件中
  • 谢谢阿德里安,我就是这么怀疑的。
  • Adrian,虽然它们包含在 .ipa 文件中,但它们只会包含一次。 (这就是最初的问题)然后您可以根据需要引用它们,因为您知道您的 swf 不会嵌入这些的倍数。在这种情况下,它们仍然是半嵌入的,因为它们与 .ipa 一起打包。
  • @davidbates,谢谢。但我已经确定,即使嵌入在不同的类中重复,资产也只会包含一次。
【解决方案2】:

我使用的一个选项是仅使用最必要的资产编译 ipa,然后当用户第一次初始化应用程序时,将其下载并在应用程序存储中存储更多资产(这可以通过单个 zip 文件完成和 FZip 类:http://codeazur.com.br/lab/fzip/)

这样,应用程序只需下载一次资产(在首次运行时),并且将来可以从本地系统立即使用。

【讨论】:

  • 您知道这对您上传应用程序时的初始文件大小有什么影响吗?因为这是苹果和安卓市场正在计算的。您是否还测试过这是否适用于两个平台?谢谢。
  • 暗示必须是初始文件大小更小 - 因为我已将此设置用于该确切目的。另外 - 这绝对适用于 iOS,我认为它不应该在 Android 中也适用。
  • 我认为这是个好主意,但我们需要测试数据。如果你没有,我会尝试做一个测试。如果有,请提供压缩前后资产文件大小的信息,以及生成的 .ipa 的大小。谢谢!
【解决方案3】:

我没有在每个源文件中嵌入图像,而是在默认包中创建一个类,我将所有图像作为静态公共变量放置在其中。像这样的:

package {
  public class Icons{
    [Embed(source="assets/icon1.png")] [Bindable] static public var icon1:Class;
  }
}

每当我需要图标时,我就使用Icons.icon1

【讨论】:

  • 我将其标记为正确,因为它是一个非常棒的想法,并且有助于保持资产的组织性和模块化。
【解决方案4】:

你不能!您的应用程序将超过 20Mb 之类的。因为需要嵌入到您的 IPA 中的 Adob​​e AIR 运行时。

因此,尝试优化您的代码、资产是没有用的......应该为这项工作追逐 adobe!

我的应用程序:prestadget 是 800Ko 作为 APK(没有 AIR 运行时)但 21Mo 作为 IPA ;-( 相同的代码

【讨论】:

  • 这是不正确的。我的应用程序以 19.8 兆的速度运行,刚好在无线网络限制下运行。
  • 它叫做道歉向导。你可以在应用商店看到它的作用——向左或向右倾斜改变意思;摇一摇改写;通过短信或电子邮件发送。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2021-04-30
相关资源
最近更新 更多