我已经发布了一个安卓应用程序,用dexguard进行了模糊处理。一切看起来都很好,除了Galaxy Tab 3 10.1,只有Android 4.4,这是唯一一个会向开发者控制台报告错误的设备。
我得到以下异常:
java.lang.RuntimeException: Missing type parameter.
at com.google.gson.reflect.TypeToken.<init>(:62)
at com....util.Helper$2.<init>(:398)
类Helper.java和第398行中的代码
return (Config) getSerializable(context, CONFIG, new TypeToken<Config>(){}.getType());
我的准则是:
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
# Application classes that will be serialized/deserialized over Gson
# path to the config class: com/.../models/config/Config.java;
-keep class com....models.**{ *; }
-keepattributes Signature
不仅如此,我自己也无法重现错误(我也有一个Android 4. 2的Galaxy Tab 3,更新还未提供),它只涉及到上述设备。
3条答案
按热度按时间v8wbuo2f1#
我的解决方案是避免使用TypeToken并将dexguard更新到最新版本。
例如:
而不是
用这个
gz5pxeao2#
如果错误只发生在一个设备上,则很可能是该设备上的bug。如果您向Saikoa的我们报告此类问题,最好提供一个小的示例项目,我们可能会让DexGuard解决它。您可以检查使用最新更新进行构建是否会有不同。
(我是DexGuard的开发者)
kx5bkwkv3#
可以通过使用不同的方法创建TypeToken示例(对于参数化类型
List<User>
)来解决此问题:gson的下一个版本(我假设是2.8)将允许您更容易地键入以下内容:
对于非参数化类,可以使用以下方法: