0

.apkフォーマットはハードリンクを処理しますか?それとも、同じファイルを何度もコピーするだけですか?

簡単なテストをいくつか行いましたが、ハードリンクが処理されていないよう.apkです。つまり、同じファイルに複数のハードリンクがある場合、生成されるサイズが大幅に増加します。代わりに、リソースが同じファイルを指すようにする方法はありますか?


ユースケースは次のとおりです。アプリケーションの一部の場所で使用されているいくつかの画像があり、それらの名前にはそれらに関する情報が含まれています。たとえば、、、、などを使用できますapple.jpg。私のアプリケーションはapple_red.jpg、データに最も一致する画像を使用します。したがって、データが赤い大きなリンゴに関するものである場合は、を使用しますが、アプリケーションは、データが関係していることだけを知っている場合は、を使用します。りんごそれは単に使用します。apple_red_big.jpgapple_big.jpgapple_green.jpgapple_red_big.jpgapple.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.pngres/drawable ディレクトリに保存します。エイリアス リソースは、.apk ファイル内のほんの少しのスペースを占有します。

コードでは、R.drawable.appleとの両方R.drawable.apple_somethingが同じ画像を取得します (ただし、それらは別の Drawable オブジェクトになります)。xml では@drawable/appleandになり@drawable/apple_somethingます。

于 2013-02-11T16:30:16.937 に答える