Ресурсы Android не найдены на некоторых устройствах - PullRequest
9 голосов
/ 01 октября 2011

У нас есть приложение (с небольшим количеством строк), которое мы переводим на 27+ языков. Мы делаем 2 сборки приложения. Эти 2 сборки отличаются только по названию пакета. Итак, в основном мы сначала делаем сборку нашего приложения с именем пакета, скажем, com.android.sad.app, а затем еще одну с именем пакета com.android.even.sadder.app. У нас была возможность протестировать наше приложение на самых разных устройствах Android, и мы обнаружили, что на некоторых устройствах, таких как Samsung ACE , Samsung Galaxy S или LG Optimus 2x наше приложение не может загрузить / прочитать ресурсы , поэтому даже значок приложения не отображается, и при запуске приложения происходит сбой с android.content.res.Resources.NotFoundException. На других устройствах все работает просто отлично.

Мы обнаружили, что если уменьшить общее количество строк в ресурсах приложения, наше приложение может успешно работать на вышеупомянутых устройствах. Однако мы не думаем, что это реальное решение нашей проблемы, потому что отладочная сборка с полными строками в ресурсах может выполняться на рассматриваемых устройствах.

Итак, мой вопрос: знает ли кто-нибудь, что может вызвать это очень странное поведение?

Ответы [ 2 ]

2 голосов
/ 08 октября 2011

После некоторых проб и ошибок мы обнаружили, что проблема была в самом пакете apk . В процессе сборки мы добавляем несколько файлов в наше приложение apk сразу после завершения сборки, но до подписания и выравнивания файла apk . Первоначально мы извлекали и переупаковывали apk с помощью нашего собственного инструмента (который написан на Java и, таким образом, использовали реализацию Java Zip ).

Мы заметили, что после переупаковки apk с помощью нашего инструмента мы смогли уменьшить размер apk до половинного размера исходного apk созданный сборкой Android . Как мы выяснили, эта переупаковка была причиной нашей проблемы!

Как показали наши эксперименты, если перепакованный apk был меньше ~ 1.6 Мб , все устройства могли читать и работать с недавно перепакованным * APK 1038 *. Однако, если размер apk превысил ~ 1.6 Мб , устройства (и эмулятор), упомянутые в этом посте, не могли правильно читать или работать с приложением apk .

Я искал некоторую спецификацию для формата файла apk (что по сути является jar), но я не нашел ничего, что могло бы объяснить это очень странное поведение. Так может кто-нибудь объяснить, почему происходит это странное поведение и каковы точные причины?

Примечание: отныне мы используем инструмент Android aapt для вставки наших файлов в пакет, вместо инструмента, который мы использовали, и конечного apk может быть прочитано всеми устройствами

0 голосов
/ 04 октября 2011

Я собираюсь предположить много здесь, но я бы положил на это деньги, связанные с количеством строк. Все ваши строки будут занимать память, и, возможно, эти целевые устройства не будут достаточно доступны для вашего приложения. Что касается различий в именах пакетов, то чем короче, тем меньше будет, конечно, байт.

Я предлагаю вам уменьшить количество используемых строк и посмотреть, решит ли это ваши проблемы.

...