Вопрос о том, как работает proguard, когда приложение использует другой lib - PullRequest
0 голосов
/ 21 сентября 2018

Мне не очень понятно, в случае, когда приложение (или библиотека) имеет зависимость от другой библиотеки и как вообще работают правила proguard.

Допустим, наличие библиотеки с двумя библиотечными модулями.

lib_moudle_1 имеет class m1_class_1{}

, а в lib_moudle_1 она имеет

dependencies {
    api project(“:lib_module_2”)
}

, поэтому, если другое хост-приложение, которое зависит от lib_module_1, оно будет также неявно зависеть от lib_module_2.

lib_module_2 имеет class m2_class_a{} и class m2_class_b{}

и вlib_module_2 имеет зависимость

api ”com.github.bumptech.glide:glide:4.0.0”

в lib_module_2 в build.gradle, он имеет

 defaultConfig { 
    consumerProguardFiles 'proguard-rules.pro'
 }

proguard-rules.pro имеет правила, например

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep com.lib_module_2.m2_calss_a{*;}

но у него нет правила для m2_class_b.

вопрос в lib_module_1, если он использует классы глиссады и lib_module_2 'm2_class_a{} и class m2_class_b{} как быэто будет зависеть от обфускации Proguard?

Нужно ли lib_module_1 применять точно такие же правила, как lib_module_2, или ничего не делать?

А что, если приложение хостинга зависит от lib_module_1 (илитолько зависимость от lib_module_2 напрямую),

build.gradle хост-приложения имеет

buildTypes {

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

proguard-android.txt от стандартного Android, а proguard-rules.pro - дополнительные правила.В этом случае он должен скопировать

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep com.lib_module_2.m2_calss_a{*;} 
...