如何使用proguard牙签规则?

时间:2017-11-02 11:58:52

标签: android android-studio android-proguard sbt-proguard toothpick-di

我在我的项目中使用TP 我正在使用TP注入一些对象。但是当我在我的应用程序中应用proguard规则时。它在调试模式下工作正常但是在发布模式下为我通过@Inject注释注入的所有对象提供空对象。

1 个答案:

答案 0 :(得分:2)

我在我们的项目中工作,除了问题#146之外,你需要添加更多东西。 android支持注释库中有一个@Keep注释设置可以用来标记一个不被混淆的类,我必须在一些kotlin数据类上做这个,如Retrofit和kotlin-reflect库无法播放很好的混淆。无论如何,可以找到要点here。此外,您可能希望明确告诉它不要在您告诉牙签生成非反射注册表和工厂实现的包中生成的FactoryRegistry类中混淆任何内容。

    # Note that if we could use kapt to generate registries, possible to get rid of this
-keepattributes Annotation
# Do not obfuscate classes with Injected Constructors
-keepclasseswithmembernames class * {
    @javax.inject.Inject (...);
}
# Do not obfuscate classes with Injected Fields
-keepclasseswithmembernames class * {
    @javax.inject.Inject ;
}
# Do not obfuscate classes with Injected Methods
-keepclasseswithmembernames class * {
    @javax.inject.Inject ;
}
-keep @android.support.annotation.Keep class *
-keep @javax.inject.Singleton class *
-dontwarn javax.inject.**
-dontwarn javax.annotation.**
-keep class **$$Factory { *; }
-keep class **$$MemberInjector { *; }

-adaptclassstrings
-keep class toothpick.** { *; }