Intereting Posts
Android CAB уничтожает после просмотра списка уведомленийdatasetchanged Как заменить значок гамбургера, который используется для ActionBarToggle на панели инструментов Android, с пользовательской возможностью рисования? Настроить флажок Soundpool воспроизводит только первые 5 секунд файла. Зачем? Как скомпилировать C-программу для Genymotion (Android x86) Не удалось установить драйвер USB для Android на Windows 7 Как настроить сертификат отладки для Android ApkBuilder Наложить два изображения в android, чтобы установить изображение Запустите IntentService из Activity и обновите Activity, когда IntentService закончен DrawerLayout Double Drawer (левый и правый ящики одновременно) OnPageSelected не работает для первой страницы Пауза и возобновление синхронизации репо Android Android – панель инструментов и строка состояния в качестве общих объектов с изменениями содержимого Зачем использовать onDestroy (), если он не гарантированно называется? Как я могу изменить по умолчанию черный тусклый фон «цвет» (не размер тусклого) диалогового окна?

Скрыть классы библиотеки – Android

У меня есть 3 проекта, которые используются в качестве библиотек в 4-м (основной проект).

Эти три проекта выполняются друг с другом следующим образом (build.gradle):

Проект библиотеки:

  • Проект А

    compile project(":projectA") compile project(":projectB") 
  • Проект B

     compile project(':projectC') 

Основной проект:

 compile(name: 'projectA', ext: 'aar') compile(name: 'projectB', ext: 'aar') compile(name: 'projectC', ext: 'aar') 

Я хотел бы сделать что-то в «Библиотечном проекте», так что изнутри основного проекта, если я нажму на любой класс из проекта библиотеки, я должен либо не увидеть код, либо его нужно зашифровать.

Так, например, если в ProjectA есть InterfaceA , и основное действие Main Project реализует этот интерфейс, если я «Ctrl-Click» в интерфейсе, результат должен быть похож на то, что я указал выше.

Я понимаю, что Proguard делает что-то подобное, но это только если вы создаете выпуск .apk, мне нужен тот же результат для скомпилированных библиотек.

Solutions Collecting From Web of "Скрыть классы библиотеки – Android"

Многие проекты используют 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, инструментами и услугами превосходна.

Вы можете установить все методы, по которым вы не хотите быть общедоступными по умолчанию, поэтому их нельзя использовать за пределами исходного проекта. А также вы должны отделить библиотеки от проекта приложения, скомпилировать их и использовать в качестве внешних зависимостей. Если вы не хотите, чтобы исходный код библиотеки был опубликован, просто не добавляйте его в параметры компиляции. Если кто-то другой, кроме вас, должен использовать вашу библиотеку, опубликуйте ее с помощью bintray или просто добавьте скомпилированные файлы aar / jar в проект приложения.

Вот руководство для всего процесса: https://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en

Кроме того, вы можете создавать проекты библиотек с помощью maven (я нахожу это намного проще, чем использование gradle), посмотрите здесь пример: https://github.com/simpligility/android-maven-plugin/tree/master/src / тест / проекты / libraryprojects

И конкретный проект: https://github.com/fcopardo/BaseViews-Android

2 ступени:

  1. Добавьте свои библиотеки в локальный репозиторий maven

  2. Используйте зависимости maven вместо зависимостей проекта.

Вы не можете сделать это. Скомпилированная библиотека имеет файлы .class (байт-код), которые можно декомпилировать и просмотреть с помощью различных компиляторов, таких как JD-GUI и т. Д. Android Studio имеет встроенный декомпилятор, который упрощает кому-то просто ctrl -click и просмотреть файл .class. Лучший вариант, который у вас есть, – обфускать ваш код. Вот некоторые обфускаторы, которые вы можете использовать. Но всегда имейте в виду, что никогда невозможно перепроектировать что-то. Все взломанно.