Android: динамическая загрузка классов в песочницу
Я хочу загрузить динамические классы из ненадежного источника.
Я нашел это руководство для загрузки динамических классов с помощью DexClassLoader. Как я могу запретить загруженным классам взломать мою базу данных или нанести ущерб моему приложению? Является ли это возможным?
1 ответ
Цитируемая статья немного устарела. dx
Сценарий в каталоге build-tools SDK - гораздо более простой способ добавить classes.dex
файл; просто экспортируйте код в файл.jar, затем запустите dx --dex --output result.jar exported.jar
,
Но это не отвечает на ваш вопрос! Это то, на что я сам немного посмотрел. У меня пока нет того, что я считаю окончательным ответом, но я уверен, что не видел никакого способа поместить часть вашего приложения в "песочницу": любой загружаемый плагин будет запускаться с разрешениями вашего приложения. Лучшее решение, которое я придумала до сих пор, - это запуск ваших плагинов в отдельном процессе с ограниченными разрешениями, но, конечно, у этого есть свои проблемы:
- Вы не можете добавить
View
от дочернего процесса кViewGroup
от хост-процесса. - Предоставление сервисов приложений для плагина теперь требует IPC. Binder и AIDL делают это довольно легко - но не делают это дешевле.
- Получение любых результатов от плагина также требует IPC. Может быть, вы можете использовать Binder для двусторонней связи - я еще не рассматривал это - но, возможно, вам придется использовать необработанные механизмы Linux IPC.