2016-12-12 4 views
0

Хорошо, таким образом у меня есть этот случай использования:Android Proguard время компиляции постоянной

override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 

     if (loginManager.isLoggedIn()) { 
      if(BuildConfig.IS_FLAVOR_A){ 
       ActivityA.startActivity(this) 
      } else if(BuildConfig.IS_FLAVOR_B){ 
       ActivityB.startActivity(this) 
      } 
     } else { 
      ActivityC.startActivity(this) 
     } 
     this.finish() 
    } 

BuildConfig.IS_FLAVOR_A

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

buildTypes { 
     release { 
      minifyEnabled true 
      shrinkResources = true 
      signingConfig signingConfigs.APK_Release_Temp 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), '.../proguard-rules.pro' 
     } 

    } 

Что не хватает? Могу ли я это сделать? Ароматизаторы время компиляции константы позволяют ProGuard удалить неиспользуемые коды, в случае, ActivityB.startActivity(this)

EDIT: Proguard Правила

-dontobfuscate 
#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable 

# AdvancesWebView 
-keep class * extends android.webkit.WebChromeClient { *; } 

# RxJava 
-dontwarn sun.misc.** 

-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* { 
    long producerIndex; 
    long consumerIndex; 
} 

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef { 
    rx.internal.util.atomic.LinkedQueueNode producerNode; 
} 

-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef { 
    rx.internal.util.atomic.LinkedQueueNode consumerNode; 
} 

# Retrofit2 
-dontwarn retrofit2.** 
-keep class retrofit2.** { *; } 
-keepattributes Signature 
-keepattributes Exceptions 

-keepclasseswithmembers class * { 
    @retrofit2.http.* <methods>; 
} 

#OKHttp 
-dontwarn okio.** 

# RxBle 
-dontwarn com.polidea.** 

# Support v4 
-dontwarn android.support.v4.** 

#Anko 
-dontwarn org.jetbrains.anko.internals.AnkoInternals 

#Support v7 
-keep public class android.support.v7.widget.** { *; } 
-keep public class android.support.v7.internal.widget.** { *; } 
-keep public class android.support.v7.internal.view.menu.** { *; } 

-keep public class * extends android.support.v4.view.ActionProvider { 
    public <init>(android.content.Context); 
} 

# CardView 
-keep class android.support.v7.widget.RoundRectDrawable { *; } 

#Support Design 
-dontwarn android.support.design.** 
-keep class android.support.design.** { *; } 
-keep interface android.support.design.** { *; } 
-keep public class android.support.design.R$* { *; } 

#Glide 
-keep public class * implements com.bumptech.glide.module.GlideModule 
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** { 
    **[] $VALUES; 
    public *; 
} 

#Moshi 
-keepclassmembers class ** { 
    @com.squareup.moshi.FromJson *; 
    @com.squareup.moshi.ToJson *; 
} 

ответ

1

Вам необходимо включить оптимизацию. Для этого воспользуйтесь этой конфигурацией:

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'.../proguard-rules.pro' 
+0

уже сделал, тот же результат –

+0

i проверить внутри файл apk dev, классы все еще там. –

+0

А я забыл, что любая активность хранится по умолчанию в правилах по умолчанию. Вам нужно будет скопировать необходимые правила из proguard-android-optimize.txt и удалить класс -keep * extends Activity. Кроме того, в манифесте нельзя ссылаться на Деяние, поскольку в противном случае оно также будет сохранено. –