Ant Build AAPT Crunch正在从Library资源图像中删除draw9信息

pt1*_*123 5 ant android aapt android-drawable

我有一个使用库项目的项目.图书馆计划有draw9(9.png)文件,当通过Ant构建apk时,它正在剥离可缩放和可填充区域的draw9信息.结果是应用程序只是在不使用draw9信息的情况下拉伸图像.在Android的build.xml中

 <target name="-package-resources" depends="-crunch">
Run Code Online (Sandbox Code Playgroud)

这是调用crunch,它更新预处理的PNG缓存(任何人都知道这个缓存的位置?).

-crunch在aapt中运行一个叫做crunch的任务.但我无法找到有关这些论点的任何信息.它似乎从Res文件夹中取出文件并将其放在out res文件夹中(默认为bin/res).

所以我甚至清除了任务,因此它不会运行紧缩,仍然没有正确拉伸图像.然后我用png文件直接复制到out res文件夹替换它,仍然是同样的问题.我甚至在这些任务之间尝试了干净,我遇到了同样的问题.这让我相信缓存是在项目区域之外进行的,但在哪里?

注意当我用Eclipse构建它时一切都很好.

另一个适合我的解决方案是将这些图像从库中复制到主项目中,但它不是理想的解决方案.

其他人似乎遇到了这种紧缩/资源打包的问题,其中aapt in ant build使用来自其他项目的缓存

在这个错误报告中,他们只提到了缓存,只使用时间戳来检查是否更新缓存.

这似乎是aapt源代码,但我无法通过阅读来查找此缓存的位置.

找出问题所在

对我来说导致问题的原因是我在Ant中使用不同的文件夹(故意)为我的res,src和bin.有一个引用project.library.res.folder.path,它填充了依赖宏.它指向项目的默认res和bin文件夹.所以我做的是将它们更改为指向我的新文件夹.但在这样做的过程中,我改变了他们被列出的旧版本.它开始将资源文件混合到我正在运行aapt时使用的不同库项目中.当我修改订单时,它编译得很好.我也是为project.library.bin.r.file.path做的.

And*_*cko 1

我昨天也遇到了完全相同的问题。

我有一个代码库,我用它来使用 ant 构建不同风格的应用程序(差异包名称和一些特定资源)。

build.xml 工作正常,但使用应用程序时有 9 个补丁被损坏(正如你所说,被视为 png 并拉伸)。

我将问题确定为-crunchant 内的任务(就像您所做的那样)。

就我而言,我使用两个不同的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>
Run Code Online (Sandbox Code Playgroud)

对此

 <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>
Run Code Online (Sandbox Code Playgroud)

但这产生了提到的 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>
Run Code Online (Sandbox Code Playgroud)

这可能会为您提供针对您的情况提供正确解决方案的线索。