Android: динамическая загрузка классов в песочницу

Я хочу загрузить динамические классы из ненадежного источника.

Я нашел это руководство для загрузки динамических классов с помощью DexClassLoader. Как я могу запретить загруженным классам взломать мою базу данных или нанести ущерб моему приложению? Является ли это возможным?

1 ответ

Цитируемая статья немного устарела. dx Сценарий в каталоге build-tools SDK - гораздо более простой способ добавить classes.dex файл; просто экспортируйте код в файл.jar, затем запустите dx --dex --output result.jar exported.jar,

Но это не отвечает на ваш вопрос! Это то, на что я сам немного посмотрел. У меня пока нет того, что я считаю окончательным ответом, но я уверен, что не видел никакого способа поместить часть вашего приложения в "песочницу": любой загружаемый плагин будет запускаться с разрешениями вашего приложения. Лучшее решение, которое я придумала до сих пор, - это запуск ваших плагинов в отдельном процессе с ограниченными разрешениями, но, конечно, у этого есть свои проблемы:

  1. Вы не можете добавить View от дочернего процесса к ViewGroup от хост-процесса.
  2. Предоставление сервисов приложений для плагина теперь требует IPC. Binder и AIDL делают это довольно легко - но не делают это дешевле.
  3. Получение любых результатов от плагина также требует IPC. Может быть, вы можете использовать Binder для двусторонней связи - я еще не рассматривал это - но, возможно, вам придется использовать необработанные механизмы Linux IPC.
Другие вопросы по тегам