我有一个使用库项目的项目。库项目有draw9 (9.png)文件,当通过Ant构建apk时,它正在剥离可扩展和可填充区域的draw9信息。其结果是,该应用程序只是延伸图像,而不使用draw9信息。在安卓的build.xml中
<target name="-package-resources" depends="-crunch">这是调用紧缩,它更新预处理后的PNG缓存(有人知道缓存在哪里吗?)
-crunch在aapt中运行一个名为crunch的任务。但我未能找到任何有关论据的资料。它似乎正在从Res文件夹中获取文件,并将其放入out res文件夹(默认情况下为bin/res)。
因此,我甚至清除了任务,使它不会运行紧缩,仍然图像没有被正确地拉伸。然后,我将其替换为将png文件直接复制到out文件夹,并且仍然存在相同的问题。我甚至试着在这些任务之间清理蚂蚁,我也遇到了同样的问题。这让我相信缓存被存放在项目区域之外,但是在哪里?
注意,当我用Eclipse构建它时,一切都很好。
另一个适合我的解决方案是将这些图像从库复制到主项目中,但这不是理想的解决方案。
其他人似乎对这个ant中使用aapt的紧缩/资源打包使用来自其他项目的缓存。有意见
在此他们提到的关于缓存的错误报告中,只使用时间戳检查是否更新缓存。
这似乎是aapt源代码,但在读取缓存时,我很难找到这个缓存的存放位置。
解决了问题
对我来说,造成问题的原因是,我在Ant中使用不同的文件夹(有意)来处理res、src和bin。有一个引用project.library.res.folder.path,它被填充到依赖宏中。它指向项目中的默认res和bin文件夹。所以我所做的就是改变它们来指向我的新文件夹。但在这样做的时候,我改变了他们被列在名单上的年龄。当运行aapt时,它开始将资源文件混合到不同的库项目中。当我修改订单的时候,它的编辑很好。我也是为project.library.bin.r.file.path做的。
发布于 2013-12-19 12:25:15
我昨天也遇到了同样的问题。
我有一个代码库,我用来构建不同口味的应用程序(diff包名称和一些特定的资源)使用蚂蚁。
build.xml运行良好,但在使用app时有9个补丁被破坏(正如您所说,它被视为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>但这也产生了提到的9块手工艺品(也在图书馆如fb)。所以我想我会把这个修改成处理resourceflavour.dir,除非它不是一个给出正确结果的库(没有9条路径)。
<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>这可能会给你提供一个正确的解决方案在你的情况。
发布于 2013-12-06 12:53:00
我认为你必须要利用图书馆项目的资源。
试一试
aapt crunch -v -S res -C bin/res在您的库的项目文件夹中,然后重新生成。对我有帮助。现在的问题是如何实现自动化。
https://stackoverflow.com/questions/20423429
复制相似问题