Мое приложение для Android интенсивно интенсивно работает с изображениями. Из соображений спецификации нескольких телефонов мое приложение оптимизирует все изображения до меньших размеров и упрощает обработку размеров для требующих их устройств.
В настоящее время они хранятся в папке
/data/data/com.myapp.example/files
Однако я чувствую, что есть два важных соображения:
Прежде всего, после первоначальной "настройки" приложение займет примерно 10 МБ дополнительного пространства. Как я могу сделать это как небольшую проблему, насколько это возможно для пользователя? Я не рассматривал вывод их на SD-карту, потому что они являются лицензированным материалом, и SD полностью небезопасен. (хотя я полностью понимаю, что это каталог данных из корневых устройств). Каким будет решение этой проблемы?
Мое второе соображение заключается в том, что мне нужно знать, достаточно ли свободного места на устройстве пользователя, прежде чем я начну его использовать, есть ли способ узнать, прежде чем начать процесс?
Почему бы не сохранить файлы на SDCard и не зашифровать их с помощью какого-нибудь сильного алгоритма? Как вы говорите, данные так же надежно, как и SDCard...
Чтобы проверить доступное пространство для заданного пути, используйте класс StatFs.
Изменить 11/04/2011:
вы должны сделать несколько тестов, чтобы проверить, будет ли дешифрование данных слишком медленным или нет. У вас может быть хороший сюрприз. Также проверьте TEA и Blowfish алгоритмы, которые кажутся быть одним из самых быстрых "сильных" алгоритмов. Или просто зашифруйте свои данные, используя очень простой алгоритм, который предотвратит прямое копирование изображений (но не будет сопротивляться лучшим хакерам).
И я не думаю, что на телефоне будет какая-либо защищенная область, где временно хранятся дешифрованные файлы, потому что любой пользователь root может получить доступ к любому месту телефона (и укоренение андроида очень просто для всех)
Редактировать 12/04/2011:
Вам нужно всего 10 МБ сразу? Не загружается ли материал в память? Сбой приложения с OutOfMemoryException, если вы загружаете свои данные при запуске приложения (и/или в фоновом режиме) и сохраняете его загруженным в течение срока службы приложения?
Одна из последних возможностей - дешифровать/загрузить материал в памяти с помощью некоторого встроенного интерфейса: память выделяется вне кучи Java, которая не будет использовать квоту памяти приложения, и декодирование будет значительно ускорено, так как собственный код будет работать намного быстрее, чем эквивалентный Java-код.
"Как можно меньше" - ну, если вам требуется 10 МБ данных, тогда вам потребуется 10 МБ данных. Там мало что можно сделать, чтобы уменьшить его, кроме сжатия данных. Конечно, если не все эти данные необходимы, вы можете рассмотреть возможность разделения данных на отдельные модули и либо предлагать их на рынке в виде плагинов, либо позволить пользователю выбрать, какие данные необходимы при запуске, а затем загрузить его ваш собственный сервер.
Сама SD небезопасна, но вы можете шифровать данные. Конечно, нет ничего надежного, но разумный алгоритм шифрования остановит случайное копирование данных.
Что бы вы ни делали, не забудьте включить опцию "установить в SD" в своем приложении.