AIR ADT复制包中的图标

时间:2014-04-11 15:29:36

标签: android ios air adt

设置

According to documentation ,应用程序descriptor-app.xml中指定的图标必须与应用程序根目录相关,并且不会自动添加到程序包中。

  

指定的路径相对于应用程序根目录。

     

注意:指定的图标不会自动添加到AIR包中。打包应用程序时,图标文件必须包含在正确的相对位置。

文档本身提供了使用icons文件夹

的示例
<icon> 
   <image16x16>icons/smallIcon.png</image16x16> 
   <image32x32>icons/mediumIcon.png</image32x32> 
   <image48x48>icons/bigIcon.png</image48x48> 
   <image128x128>icons/biggestIcon.png</image128x128>  
</icon>

我会使用以下ADT命令在我的应用程序根目录中包含此文件夹:
adt [STUFF] outputfile.apk descriptor-app.xml main.swf icons

结果

这反过来产生以下包结构 1 (不列出不相关的路径):

 package.apk
  |---> assets (this is the application root on Android package)
  |      |---> icons
  |      |      |---> smallIcon.png
  |      |      |---> mediumIcon.png
  |      |      |---> bigIcon.png
  |      |      |---> biggestIcon.png
  |      |---> main.swf
  |---> res
         |---> drawable-hdpi
         |      |---> icon.png
         |---> drawable-ldpi
         |      |---> icon.png
         |---> drawable-mdpi
         |      |---> icon.png
         |---> drawable-xhdpi
                |---> icon.png

1实际将大小翻译为路径as detailed here

问题

res/drawable*下的文件夹中的图标是assets/icons下的图标的重复。 &#34; drawable&#34;文件夹是Android包特定的结构。据我所知,adt命令将采用descriptor-app.xml中指定的图标并将它们放在包中的正确位置,具体取决于包类型(iOS图标位于包内,然后是Android图标)。

我不明白的是:为什么我必须在我的应用程序根目录中包含icons文件夹?

adt知道图标需要结束的位置,但descriptor-app.xml要求相对于&#34;应用程序root&#34;指定图标路径。

在iOS上,这是有点可解决的 2 ,方法是将图标重命名为最终名称,并将它们放在包中的正确的位置,因为ipa结构将图标放在与应用程序根相同的上下文中。

但在Android上,这甚至不可能,因为apk结构将图标放在应用程序根上下文之外,而adt不会让我添加要在应用程序根目录之外打包的文件。

然而,文档告诉我apk包完全不可能的事情:

  

打包应用程序时,图标文件必须包含在正确的相对位置。

2手动重命名iOS图标并将它们置于正确的应用程序根位置也不理想,因为adt已经知道如何做到这一点,而我作为用户可以犯错误

回到这个问题:为什么我必须在应用程序中包含icons文件夹才能正确使用它?我没有在应用程序中包含descriptor-app.xml(但是adt将其置于正确的程序包位置,每个操作系统本身),但是为什么要强制我包含icons的冗余副本?

我错过了什么吗?有解决方法吗?

2 个答案:

答案 0 :(得分:1)

此问题已在最新的AIR SDK 21.0 Beta 21.0.0.150中修复。

https://bugbase.adobe.com/index.cfm?event=bug&id=4100164

答案 1 :(得分:0)

据我记得app.xml文件中的文档和文字,应用图标不必位于应用根(src)目录中,只是app.xml中的引用必须相对src目录。此外,应用程序根目录/ src目录会自动嵌入到文件中,这就是它们在您编译的应用程序根目录中的原因。

考虑到这一点,我有两种可能的解决方案。

  1. 使用../表示法。将您的图标文件夹从src目录移动到项目目录,这意味着它不会被编译器嵌入。当您使用icons/biggestIcon.png时,它实际上是在告诉src/icons/biggestIcon.png/表示法在一个目录下,./表示法是当前目录,../表示法在一个目录中。因此src/../icons/biggestIcon.png将转到src的父目录(项目目录)。我从来没有对此进行过测试,我不确定它是否会接受这种符号,但理论上它应该可行。
  2. 在Flash Builder中,您可以转到Project > Properties,在Flex Build Packaging下,您要定位的每个平台都应该有一个菜单。转到Package Contents并取消选择至少Android的图标文件夹。这可能是更好的路线,因为它允许您单独处理iOS和Android。我相信AS3项目中的菜单措辞不同,但我相信它仍然存在并且表现相同。
  3. 同样,我还没有测试过这些,所以我不能100%确定它会起作用。但这些是我试图解决双重嵌入问题的两种方法(直到现在我都不知道,所以我相信我会为下一个项目测试这些)。希望至少能指出你正确的方向。