Proguard破坏了我的清洁。 Gson和仿制药

时间:2018-01-11 00:08:02

标签: java android generics gson proguard

我有一个从持久性加载信息的函数,我只是以一种非常简单的方式告诉它的类型。该类称为=IF(COUNTIFS($B$3:$B$13,E3,$C$3:$C$13,"")>0,"",MIN(IF($B$3:$B$13=E3,$C$3:$C$13))) ,因此它是一个真正的生活问题解决者:

SharedPreferencesHelper.kt

加载,例如,我只是 fun <T> loadList(context: Context, fileName: String, key: String, defValue: ArrayList<T>) : ArrayList<T> { val gson = MyGsonDependency.getInstance() val json = getWithFileName(context, fileName).getString(key, gson.toJson(defValue)) return gson.fromJson(json, object : TypeToken<ArrayList<T>>() {}.type) }

ArrayList<String>

我发现的问题是,当我运行Proguard并模糊我的代码时,每当我调用 SharedPreferencesHelper.loadList<String>( context, FILE_NAME, KEY, ArrayList()) 时,我都会遇到异常:

object : TypeToken<ArrayList<T>>() {}.type

我找到was here的唯一解决方案,但它意味着提供Caused by: java.lang.AssertionError: illegal type variable reference at libcore.reflect.TypeVariableImpl.resolve(TypeVariableImpl.java:111) at libcore.reflect.TypeVariableImpl.getGenericDeclaration(TypeVariableImpl.java:125) at libcore.reflect.TypeVariableImpl.hashCode(TypeVariableImpl.java:47) at java.util.Arrays.hashCode(Arrays.java:4074) at com.google.gson.internal.$Gson$Types$ParameterizedTypeImpl.hashCode(Unknown Source:2) at com.google.gson.reflect.TypeToken.<init>(Unknown Source:23) 作为参数。

我认为这是一个潜在的问题,原因有两个:

  • 这不是一个警告,它不是一个坏的做法(是吗?),它是一个非常好的功能,在加载后来序列化的JSONArray时可以节省很多样板代码。当Proguard位于顶端时,同一项目的开发人员可能不会意识到这是一个问题。
  • 测试一段代码是否有效的唯一方法是运行Proguard,换句话说,等待平均3分钟的构建。在单元和UI测试中有大量的测试覆盖率也有很大帮助,但有些团队没有这种可能性。

我的问题是,还有其他方法可以解决这个问题吗?

0 个答案:

没有答案