Подтвердить что ты не робот

Защищенные идентификаторы Android в R.java

Для тех, кто потратил какое-то время в исходном коде Android, это не новость, что идентификаторы, сгенерированные в классе android.R, не содержат 1:1, отражают фактические ресурсы, найденные в каталогах res/ поставляемый JAR. Многие из чертежей/стилей/макетов не являются "общедоступными" и доступны для приложений, ссылаясь на android.R.xxx.

Мой вопрос: кто-нибудь знает механизм, с помощью которого Android может сгенерировать класс R.java, который отличается от фактического графа ресурсов? Во-вторых, это механизм (с использованием правил сборки и т.д.), Который мы, как разработчики, могли бы частично защитить идентификаторы, которые становятся общедоступными в приложениях, используемых в качестве библиотек?

Спасибо заранее!

4b9b3361

Ответ 1

Android-пакеты с использованием aapt и генерирует R файл с помощью этого инструмента во время процесса сборки. На этом этапе файлы XML скомпилированы в двоичные и другие ресурсы, только что упакованные. Вы можете открыть файл .apk в виде zip-архива и получить доступ ко всем файлам ресурсов как есть. Библиотечные проекты просто содержат исходные файлы и ресурсы, которые добавляются в проект во время компиляции, поэтому они как-то будут существовать в файле .apk. Вероятно, макеты не 1:1, потому что XML уже скомпилирован для проекта библиотеки. Вероятно, вы можете использовать aapt для удаления файлов из проекта библиотеки из времени включения, но тогда они не будут доступны в вашем проекте. Также может быть способ обфускации имен ваших ресурсов во время компиляции с помощью aapt и ant, но это не мешает им получить к ним доступ.

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

Что такое эндшпиль здесь? Если это необходимо для защиты ваших ресурсов, это будет сложно. Android крайне небезопасен, если кто-то имеет возможность запускать свой телефон. Если вы хотите защитить свой IP-адрес, который я предполагаю, это эндшпиль здесь, я бы попытался скомпилировать мой проект в apk и посмотреть, могу ли я декомпилировать или извлечь критические ресурсы из apk. Может быть, попробуйте обфускацию, но опять же, я не знаю достаточно о скомпилированных XML файлах, чтобы узнать, достаточно ли они запутаны, чтобы их не легко декомпилировать.

Кто-то может исправить меня, если я ошибаюсь, но это всего лишь мои 2 цента.