我遇到的问题是,混淆之后或者使用第三方加固之后出现的这个错误 illegal type variable reference 7.0-7.1.1全部崩溃,
我使用的是SharedPreferences 保存的 List<String> 列表
public static <T> List<T> getDataList(Context context,String tag) { List<T> datalist=new ArrayList<T>(); String strJson = sp.getString(tag, null); if (null == strJson) { return datalist; } Gson gson = new Gson(); datalist = gson.fromJson(strJson, new TypeToken<List<T>>() { }.getType()); return datalist; }
根据报错日志查到是 fromjson时候出现的错误,出了 Android 7.0的并没有出现这个错误,混淆文件里面也加上了
-keepattributes EnclosingMethod还有关于gson所有的都 keep了,还有这个错误, 查阅了好长时间资料,这句(T)new TypeToken<List<T>>,找不到类型 我就改成了new TypeToken<List<String>>
public static <T> List<T> getDataList(Context context,String tag) { List<T> datalist = new ArrayList<T>(); if (sp == null) sp = context.getSharedPreferences(SP_NAME, 0); String strJson = sp.getString(tag, null); if (null == strJson) { return datalist; } Gson gson = new Gson(); datalist = gson.fromJson(strJson, new TypeToken<List<String>>() { }.getType()); return datalist; } 我看其他人好多种写法 混淆或者第三方加固之后都会报这个错,只要把范型改成List<String>;就可以了 最好是在混淆文件中把 javabean都 keep了 避免不必要的麻烦
-keepattributes EnclosingMethod -keep public class com.包名.bean.**{*;} -keep class * implements com.google.gson.TypeAdapterFactory -keep class * implements com.google.gson.JsonSerializer -keep class * implements com.google.gson.JsonDeserializer 仔细检查代码还是可以找到原因的,哈哈