我有一个使用库项目的项目。图书馆计划有draw9(9.png)文件,当通过Ant构建apk时,它正在剥离可缩放和可填充区域的draw9信息。结果是应用程序只是在不使用draw9信息的情况下拉伸图像。 在Android的build.xml
中 <target name="-package-resources" depends="-crunch">
这是调用crunch,它会更新预处理的PNG缓存(任何人都知道这个缓存的位置?)。
-crunch在aapt中运行一个叫做crunch的任务。但我无法找到有关这些论点的任何信息。它似乎从Res文件夹中取出文件并将其放在out res文件夹中(默认为bin / res)。
所以我甚至清除了任务,因此它不会运行紧缩,仍然没有正确拉伸图像。然后我用png文件直接复制到out res文件夹替换它,仍然是同样的问题。我甚至在这些任务之间尝试了干净,我遇到了同样的问题。这让我相信缓存是在项目区域之外,但在哪里?
注意当我使用Eclipse构建它时一切都很好。
另一个适用于我的解决方案是将这些图像从库中复制到主项目中,但它不是理想的解决方案。
其他人似乎对此crunch/resource packaging with aapt in ant build uses cache from other projects
有疑问在此bug report they mention about the cache中仅使用时间戳来检查是否更新缓存。
这似乎是source code for aapt,但我无法通过阅读来查找此缓存的位置。
找出问题
对我来说导致问题的原因是我在Ant中使用不同的文件夹(故意)为我的res,src和bin。有一个引用 project.library.res.folder.path ,它会被依赖宏填充。它指向项目的默认res和bin文件夹。所以我做的是将它们更改为指向我的新文件夹。但在这样做的过程中,我改变了他们被列出的旧版本。它开始将资源文件混合到我正在运行aapt时使用的不同库项目中。当我修改订单时,它编译得很好。我也是为project.library.bin.r.file.path。
做的答案 0 :(得分:1)
我昨天遇到了完全相同的问题。
我有一个代码库,用于使用ant构建不同版本的应用程序(diff package-name和一些特定资源)。
build.xml工作正常,但是9个程序在使用app时被破坏(如你所说,被视为png和拉伸)。
我将问题解决到了ant中的-crunch
任务(正如你所做的那样)。
在我的情况下,我使用两个不同的res
文件夹,因此我从此
<!-- Updates the pre-processed PNG cache -->
<target name="-crunch">
<exec executable="${aapt}" taskName="crunch">
<arg value="crunch" />
<arg value="-v" />
<arg value="-S" />
<arg path="${resource.absolute.dir}" />
<arg value="-C" />
<arg path="${out.res.absolute.dir}" />
</exec>
</target>
到这个
<target name="-crunch">
<exec executable="${aapt}" taskName="crunch">
<arg value="crunch" />
<arg value="-v" />
<arg value="-S" />
<arg path="${resource.flavour.dir}" />
<arg value="-S" />
<arg path="${resource.absolute.dir}" />
<arg value="-C" />
<arg path="${out.res.absolute.dir}" />
</exec>
</target>
但这产生了9patch人工制品(也在像fb这样的库中)..所以我想我会改变它来处理resourceflavour.dir
只有当这不是一个给出正确结果的库(没有9pathc人工制品)
<target name="-crunch">
<do-only-if-not-library elseText="Library project: do not package resources..." >
<exec executable="${aapt}" taskName="crunch">
<arg value="crunch" />
<arg value="-v" />
<arg value="-S" />
<arg path="${resource.flavour.dir}" />
<arg value="-C" />
<arg path="${out.res.absolute.dir}" />
</exec>
</do-only-if-not-library>
<exec executable="${aapt}" taskName="crunch">
<arg value="crunch" />
<arg value="-v" />
<arg value="-S" />
<arg path="${resource.absolute.dir}" />
<arg value="-C" />
<arg path="${out.res.absolute.dir}" />
</exec>
</target>
这可能会为您提供适当解决方案的线索。
答案 1 :(得分:0)
我认为你做必须要紧缩图书馆项目的资源。
尝试
aapt crunch -v -S res -C bin/res
在您图书馆的项目文件夹中,然后重建。这对我有帮助。现在的问题是如何实现自动化。