Ответ 1
Многие проекты используют ProGuard для достижения этой защиты.
- Вы можете использовать Gradle для сборки компонентов библиотеки для Android
- Библиотеки, так же как и приложения, могут быть созданы в разработке или выпусках типов сборки.
- Proguard может быть настроен для работы на компоненте (приложении или библиотеке), но только в типе выпуска. См. Здесь: https://sites.google.com/a/android.com/tools/tech-docs/new-build-system/user-guide#TOC-Running-ProGuard
-
Если компонент минимизирован (настоятельно рекомендуется), то вам нужно сообщить Progaurd, что такое "корневые" классы, иначе он будет нивелировать библиотеку дословно. Этого можно добиться, добавив правило в файл конфигурации:
-keep class your.package.name {public *;}
Более обширный пример: http://proguard.sourceforge.net/manual/examples.html#library
Однако существуют некоторые ограничения:
- Основное использование ProGuard - удаление как можно большего количества отладочной информации, номеров строк и имен из байт-кода без изменения того, что фактически делает байт-код. Он заменяет имена членов и аргументов, непубличные классы бессмысленными, например
vehicleLicensePlate
может стать_a
. Поскольку любой поддерживающий код будет относиться, неправильные имена членов и переменных значительно упрощают техническое обслуживание. - ProGuard может (слегка) модифицировать байт-код, оптимизируя как можно больше (вычислительные константы, определяемые как выражения, играющие с инкрустацией и т.д. Оптимизации перечислены здесь: http://proguard.sourceforge.net/FAQ.html#optimization)
- ProGuard не шифрует байт-код - JVM должен видеть фактический байт-код, иначе он не смог запустить программу.
Таким образом, обфускация только усложняет обратную инженерию и понимает библиотеку, она не может сделать эту задачу невозможной.
Один последний указатель: ProGuard выгружает файл, содержащий список изменений, в частности номеров строк. Когда вы получаете трассировки стека от своих клиентов (или с помощью онлайн-инструментов, таких как Crashlytics), вы можете вернуть обфускацию, чтобы вы могли отлаживать. В любом процессе сборки релиза вам нужно найти способ сохранить этот файл.
Этот файл также необходим, если вы делаете инкрементные выпуски своей библиотеки, чтобы обфускация соответствовала ранее выпущенной версии. Если вы этого не сделаете, клиент не сможет вставить замену вашей библиотеки и должен будет выполнить полную перестройку (и ссылку) своего приложения.
Хотя ProGuard - это бесплатный вариант, который просто работает, есть и другие бесплатные и платные обфускаторы. Некоторые предлагают еще несколько функций, но они принципиально одинаковы, и совместимость ProGuard с IDE, инструментами и сервисами превосходна.