Как (или нет) .apk обрабатывать жесткие ссылки

Ли .apk обрабатывать жесткие ссылки? Или он просто копирует один и тот же файл снова и снова?

У меня есть простой тест, и кажется, что жесткие ссылки не обрабатываются, а это означает, что размер сгенерированного .apk значительно увеличивается, когда у вас есть несколько жестких ссылок на один файл. Есть ли способ заставить ресурсы указывать на один и тот же файл?


Вариант использования следующий: у меня есть несколько изображений, которые используются в некоторых местах моего приложения, и их имена содержат некоторую информацию о них. Например, я мог бы иметь apple.jpg, apple_red.jpg, apple_red_big.jpg, apple_big.jpg, apple_green.jpg и т. д. Мое приложение использует изображение, которое больше всего соответствует данным, и, таким образом, если данные о красном, большом яблоке, оно будет использовать apple_red_big.jpgв то время как если приложение знает только то, что данные касаются яблок, оно просто использует apple.jpg,

На данный момент я не предоставляю разные файлы для каждого ресурса, поэтому apple_red.jpg просто жесткая ссылка на apple.jpg, В будущем я мог бы решить добавить больше изображений и таким образом apple_red.jpg может иметь свое собственное изображение.

Кроме того, так как apple.jpg используется в качестве запасного варианта, это почти всегда будет простая жесткая ссылка на другое изображение, которое также apple_something.jpg,

Как я могу избежать дублирования всех этих изображений в последнем apk?

1 ответ

Решение

Если вы предоставляете одно и то же изображение под разными именами файлов (даже если это просто жесткие ссылки), 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.apple а также R.drawable.apple_something затем получит одно и то же изображение (хотя это будут разные рисованные объекты); в XML это было бы @drawable/apple а также @drawable/apple_something,

Другие вопросы по тегам