Invisibale ListПосмотреть элементы [Release APK] - PullRequest
2 голосов
/ 14 мая 2019

У меня есть ListView предметов. В режиме Debug я могу видеть все элементы ListView, но когда я генерирую выпуск APK, все элементы ListView невидимы, но по-прежнему доступны для щелчка, просто текст элемента невидим. когда я отключаю pro guard все работает нормально. Я использовал Gson для преобразования JSON в Java-объект.

PROGUARD :

# 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.** { <fields>; }

# 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

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

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

ОБНОВЛЕНИЕ:

Помощник:

public class PlazaHelper {
    public static List<PlazaModel> retrievePlazaHelper(Context context) {
        Reader reader = new InputStreamReader(context.getResources().openRawResource(R.raw.nightwaveplazalinks));
        return (new Gson()).fromJson(reader, new TypeToken<List<PlazaModel>>() {
        }.getType());
    }
}

Модель

public class PlazaModel {

    private String name;

    @SerializedName("stream")
    private String url;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

Адаптер

public class PlazaListAdapter extends BaseAdapter {

    private Activity activity;
    private List<PlazaModel> PlazaModels;

    public PlazaListAdapter(Activity activity, List<PlazaModel> PlazaModels) {
        this.activity = activity;
        this.PlazaModels = PlazaModels;
    }

    @Override
    public int getCount() {
        return PlazaModels.size();
    }

    @Override
    public Object getItem(int position) {
        return PlazaModels.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = activity.getLayoutInflater();
        ViewHolder holder;
        if (view != null) {
            holder = (ViewHolder) view.getTag();
        } else {
            view = inflater.inflate(R.layout.list_item_style, parent, false);
            holder = new ViewHolder(view);
            view.setTag(holder);

        }
        PlazaModel plazaModel = (PlazaModel) getItem(position);
        if (plazaModel == null) {
            return view;
        }
        holder.text.setTextColor(Color.BLACK);
        holder.text.setText(plazaModel.getName());
        return view;
    }

    static class ViewHolder {
        TextView text;

        ViewHolder(View view) {
            text = view.findViewById(R.id.txt_result);
        }
    }
}

1 Ответ

2 голосов
/ 14 мая 2019

Вы должны keep имена всех открытых классов в указанном пакете и его подпакетах.

-keep class packageName.subPackageName.** { *; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...