0

格式是否.apk处理硬链接?还是只是一遍又一遍地复制同一个文件?

我进行了一些简单的测试,似乎没有处理硬链接,这意味着.apk当您有多个指向同一个文件的硬链接时,生成的大小会显着增加。有没有办法让资源指向同一个文件?


用例如下:我有几个图像,它们在我的应用程序的某些地方使用,它们的名称包含有关它们的一些信息。例如,我可以有一个apple.jpg, apple_red.jpg, apple_red_big.jpg,apple_big.jpgapple_green.jpg。我的应用程序使用与数据最匹配的图像,因此如果数据是关于一个红色的大苹果,它将使用apple_red_big.jpg,而如果应用程序只知道数据涉及苹果它只会使用apple.jpg.

目前我没有为每个资源提供不同的文件,所以apple_red.jpg只是一个硬链接到apple.jpg. 将来我可能会决定添加更多图像,从而apple_red.jpg可以拥有自己的图像。

此外,由于apple.jpg用作后备选项,它几乎总是一个简单的硬链接到另一个恰好也是apple_something.jpg.

如何避免在最终的 apk 中复制所有这些图像?

4

1 回答 1

2

如果您以不同的文件名提供相同的图像(即使它们只是硬链接),aapt 会将它们打包为单独的资源。与使用文件系统创建硬链接不同,Android 的做法是提供别名资源。该技术在文档中进行了描述。基本上,您只需创建一个引用另一个可绘制对象的位图可绘制对象:

文件 res/drawable/apple.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/apple_something" />

您存储apple_something.png在 res/drawable 目录中的位置。别名资源仅占用 .apk 文件中的一点点额外空间。

在代码中,两者都R.drawable.appleR.drawable.apple_something检索相同的图像(尽管它们将是不同的 Drawable 对象);在 xml 中它将是@drawable/appleand @drawable/apple_something

于 2013-02-11T16:30:16.937 回答