2016-07-21 3 views
2

Это может быть слишком широким, но мне хотелось бы объяснить, как между проектами и их зависимостями передаются конфигурации Proguard и minification, чтобы понять, насколько глубоко эти операции выполняются в дереве зависимостей моего проекта.Gradle - Конфигурации proguard унаследованы?

я на build.gradle из `themodule ':

buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     } 
dependencies { 
    compile project(':someothermodule') 
    compile 'some.maven.central.library' 
} 

По конфигурации представляется очевидным, что классы внутри themodule будут minifyed и запутанным, но то, что происходит с классами someothermodule? Будут ли они также измельчены и запутаны? Даже если someothermodule имеет minifyEnabled true?

Что произойдет, если «someothermodule» - это просто зависимость .jar?

Что происходит с конфигурациями some.maven.central.library?

Являются ли конфигурации Proguard модуля строятся каскадом вплоть до его зависимостей или каждый из них следует своим собственным правилам?

ответ

2

Технически это выглядит следующим образом:

проекты Библиотека сами по себе не работают ProGuard, так что они не используют любой конфигурации.

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

У меня был небольшой случай, когда у меня был библиотека Facebook как Gradle зависимости и так как мы были запутыванием коды с minifyEnabled:true мы должны были держать весь свой код от того затемненного, используя обычный держать commmands таких как:

-keep class com.facebook.** { *; } 

Кроме того, и в отношении .jar запутывания, вы можете проверить this other post

с уважением,

2

Если модуль г et obfuscated (minifyEnabled true), используемая конфигурация автоматически не унаследована модулем потребления (в вашем случае приложение).

Существует механизм в Android Gradle плагин для включения этой:

consumerProguardFiles 'proguard-rules.pro' 

правила, которые содержатся в proguard-rules.pro будут автоматически включены в проект приложения и объединены с другими файлами конфигурации.

Это будет работать только для проектов библиотеки Android (.aar). Если у вас есть зависимость от файла .jar на maven central, например, такие правила для потребителей не будут доступны, и вы должны сами добавить необходимую конфигурацию в свой проект приложения.

Имейте в виду, что конфигурация для обфускации модуля и того, который используется потребляющим приложением/модулем, не обязательно должна быть идентичной.Правилами потребителей в большинстве случаев будет только набор правил -keep.

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