Proguard - IllegalStateException: представления ViewHolder не должны быть присоединены при создании - PullRequest
0 голосов
/ 20 октября 2018

После включения minifyEnabled в моем файле Gradle, мое приложение продолжает падать.Я много искал, но я не чувствую себя комфортно с Proguard, и я не уверен, где проблема может быть.Может быть мне нужно добавить еще что-нибудь в proguard-rules pro?

build.gradle

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

proguard-rules.pro

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

##---------------End: proguard configuration for Gson  ----------

-keep class com.sterbsociety.** {*;}
-keep class package.model.* {*;}
-keep class androidx.recyclerview.widget.RecyclerView.** {*;}
-keepattributes *Annotation*,Signature, InnerClasses

Ошибка:

java.lang.IllegalStateException: ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the attachToRoot parameter of LayoutInflater.inflate(..., boolean attachToRoot)
        at androidx.recyclerview.widget.RecyclerView$a.createViewHolder(:6)
        at androidx.recyclerview.widget.RecyclerView$p.a(:60)
        at androidx.recyclerview.widget.RecyclerView$p.a(:26)
        at androidx.recyclerview.widget.RecyclerView$p.c(:2)

Есть идеи?Заранее спасибо.

1 Ответ

0 голосов
/ 20 октября 2018

Ошибка, вероятно, что-то, что не связано с Proguard, но связано с тем, как вы надувать макет для ViewHolder.Постарайтесь убедиться, что вы надуваете макет с помощью параметра false, например:

  @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    Context context = viewGroup.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    // Inflate the custom layout, use false.
    View contactView = inflater.inflate(R.layout.item_of_yours, viewGroup, false);

    ...

    return viewHolder;
  }
...