首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从图书馆资源图像中提取draw9信息

从图书馆资源图像中提取draw9信息
EN

Stack Overflow用户
提问于 2013-12-06 12:03:14
回答 2查看 1.9K关注 0票数 5

我有一个使用库项目的项目。库项目有draw9 (9.png)文件,当通过Ant构建apk时,它正在剥离可扩展和可填充区域的draw9信息。其结果是,该应用程序只是延伸图像,而不使用draw9信息。在安卓的build.xml中

代码语言:javascript
复制
 <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做的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-19 12:25:15

我昨天也遇到了同样的问题。

我有一个代码库,我用来构建不同口味的应用程序(diff包名称和一些特定的资源)使用蚂蚁。

build.xml运行良好,但在使用app时有9个补丁被破坏(正如您所说,它被视为png和拉伸)。

我把问题归咎于ant中的-crunch任务(就像您做的那样)。

在我的例子中,我使用了两个不同的res文件夹,因此我从下面更改了原始的压缩任务

代码语言:javascript
复制
<!-- 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>

到这个

代码语言:javascript
复制
 <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条路径)。

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 2013-12-06 12:53:00

我认为你必须要利用图书馆项目的资源。

试一试

代码语言:javascript
复制
aapt crunch -v -S res -C bin/res

在您的库的项目文件夹中,然后重新生成。对我有帮助。现在的问题是如何实现自动化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20423429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档