Как (или нет) .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
,