flash - 移动和 Web 应用程序的共享代码库?

标签 flash mobile adobe shared-libraries code-sharing

我已经开发了一段时间的移动应用程序。它可以在 iOS 和 Android 以及桌面上作为 AIR 应用程序运行。这很棒,我对此感到非常兴奋。但是,上周有人问我为什么我无法导出在 Web 浏览器中运行的应用程序版本。我说我认为我可以,我会调查一下。

但是为什么要在桌面上运行移动代码呢?

几个原因:

  • 更多地重用代码 .这并非在所有情况下都有意义,但在许多情况下确实如此。 (我不会详细说明,因为我认为这是不言而喻的。如果你不同意,我很乐意谈论它,但我不想用它来阻塞这个描述。)
  • 更快/更简单的客户端演示 .无需在移动设备上安装 apk 或 ipa,我只需发送一个 URL。

  • 那么我发现了什么?好吧,从我到目前为止的尝试来看......它......不起作用。或者更确切地说,我一直无法让它发挥作用。

    我首先为所有共享代码创建了一个 Flex 库项目。然后我创建了 2 个引用它的应用程序项目 - 一个用于移动设备,一个用于 Web。移动项目工作正常,但网络项目不行。到目前为止,这是我为使其工作所做的尝试:
  • 我试过 adding the mobilecomponents.swc and the mobile.swc theme to my web project以便 Flash Builder 了解 MobileSkin(和其他仅限移动设备的类)。这使我的应用程序能够编译,但是当我启动它时,它会立即在 UIComponent 内部抛出一个运行时错误:VerifyError: Error #1014: Class flash.text::StageText could not be found .我已经 found very little about this error ,我找到的一个技巧(添加 --swf-version=13 编译器选项)不起作用。
  • 我尝试使用条件编译来控制我的皮肤组件继承自哪个类:MobileSkin 或 SparkSkin。这只是一个快速的实验,看看它是否有效。我知道这很恶心,而不是生产解决方案。不过我的想法是,如果 MobileSkin 真的只是 SparkSkin 的优化版本,那么我的皮肤应该可以继承任何一个。这并没有立即起作用 - 应用程序不会编译 b'c 缺少某些方法(例如 layoutContents),所以我放弃了它,因为它开始时感觉很脏。
  • 我尝试将 MobileSkin 替换为 UIComponent 作为我所有皮肤的父类(super class),认为 MobileSkin 可能只是 UIComponent 的一个轻量级子类。这种方法起初会导致一些编译器错误(例如,没有 layoutContents 方法、没有测量默认宽度/测量默认高度属性、addChild 与 addElement 等)。一旦这些问题得到解决,应用程序会编译但因 UIComponent 的“getState”方法内部的运行时错误而崩溃。 (看起来 MobileSkin 覆盖了这个方法来阻止 UIComponent 的默认行为。)

  • 所以到目前为止,这些方法都没有对我有用……但是你们呢?你有没有遇到过这个问题?您是否能够使其发挥作用,或者您能否发现我在上面提到的尝试方法中所做的任何明显疏忽?如果可以的话,提前致谢。

    更新:问题已解决

    我已经能够在上面提到的第一条路线上取得进展:将 mobilecomponents.swc 和 mobile.swc 主题添加到我的 web 项目中

    事实证明,Flash Builder 在这方面让我错了。使用“合并到代码”设置将移动 SWC 添加到您的库项目会导致编译器警告:
    swc '/Applications/Adobe Flash Builder

    4.6/sdks/4.6.0/frameworks/themes/Mobile/mobile.swc' has style defaults and is in the library-path, which means dependencies will be linked in without the styles. This can cause applications, which use the output swc, to have missing skins. The swc should be put in the external-library-path.



    第一次看到这个,我将我的链接类型更改为“外部”,警告消失了。然后在我的 web 项目中,我还添加了移动 SWC 并将链接类型设置为“合并到代码中”。 Flash Builder 似乎对这种方法很满意,但是在运行我的应用程序时,我遇到了奇怪的运行时错误(如上所述)。

    事实证明,我的第一次尝试是正确的方法。将库项目上的链接类型设置为“合并到代码中”,然后不要从您的 Web 项目重新链接。 Flash Builder 会警告您,但忽略该警告。现在大多数情况下,事情似乎都运行得很好!我有一两个问题需要研究(例如列表组件不滚动),但总体而言,事情看起来很有希望!

    最佳答案

    为带有移动皮肤的网络版找到了一个简洁的解决方案

    对于所有 TextInput 使用 skinClass="spark.skins.mobile.TextInputSkin"
    这避免了 StageText

    截至目前,FlashPlayer 中缺少 StageText
    仅存在于 AIR 中

    关于flash - 移动和 Web 应用程序的共享代码库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10486578/

    相关文章:

    html - 我的网站加载有问题。这是嵌入到 index.html 中的 .SWF 文件

    c# - 如何检测移动类型和移动请求?

    apache-flex - Flex/ActionScript - 围绕其中心旋转 Sprite

    mobile - 使用 screen.width 和 window.devicePixelRatio 来检测移动和/或视网膜显示器是一种糟糕的方法吗?

    javascript - 使鼠标悬停时的 img src 更改适应触摸屏设备

    python - 类型错误 : load_pem_private_key() missing 1 required positional argument: 'backend'

    android - Adobe flex apk 文件在模拟器中不工作只显示黑屏如何解决这个问题?

    javascript - Adobe Analytics 中的重定向 URL

    actionscript-3 - 优化2D Flash游戏的过渡/运动平滑度

    可以通过拆分(分块)上传超大文件的 Javascript/flash 库