2016-08-26 2 views
2

Я разрабатываю Android-библиотеку, и я хочу скрыть/обфускать реализацию библиотеки исходного кода.Android ProGuard как скрыть/obfuscate исходный код экспортируемой библиотеки

Путь приложение проекта пользователь будет использовать библиотеку,:

startActivity(new Intent(context, LibraryActivityName.class)); 

Так что мне нужно держать только имя точки входа Activity внутри библиотеки проекта, это все.

Когда я использовал настройки Proguard по умолчанию:

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

, а также suggested example for library - Ничего не случилось, и, нажав на название активность внутри приложения пользователя (если он импортирует его) - можно увидеть исходный код.

Спасибо,

ответ

6

Как вы не имеете типичную библиотеку, вы не должны включать в себя типичный пример библиотеки.

Прежде всего, вам необходимо включить выполнение Proguard, измените эту строку:

minifyEnabled true 

Во-вторых, вы не хотите, чтобы все общественные классы, но только активность:

-keep class LibraryActivityName { public protected <methods>; } 

Остальные классы могут быть полностью запутаны, если я правильно понимаю ваш вопрос, поэтому не должно быть необходимости в дальнейшей настройке, если вы не используете какое-либо отражение.

Было бы хорошо, если вы переупаковка затемненный классы во внутренний пакет или что-то с помощью

-repackageclasses my.library.package.internal 

, который также может требуется

-allowaccessmodification 

кстати. ProGuard не будет запутывать сам код, только имена класса/метода.

+0

Спасибо, Так как я могу полностью запутать код, а не только имена? – michael

+1

Мне неизвестно какое-либо бесплатное решение с открытым исходным кодом, которое может сфабриковать код с разумным качеством. Вы можете взглянуть на DexGuard (https://www.guardsquare.com/dexguard), коммерческий вариант ProGuard, который предлагает также обфускацию кода и шифрование класса. –

+0

Спасибо, а это значит, что лучшая практика - это просто заставить действия libs выполнять базовые ui и перемещать алгоритмические части на сервер (сервер)? И тогда вы не заботитесь о том, как вы кодируете ui? – michael

Смежные вопросы