proguard Missing type parameter
answer is: use this proguard.cfg
##---------------Begin: proguard configuration common for all Android apps ----------
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-dontnote com.android.vending.licensing.ILicensingService
# Explicitly preserve all serialization members. The Serializable interface
# is only a marker interface, so it wouldn't save them.
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
# Preserve all native method names and the names of their classes.
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
# Preserve static fields of inner classes of R classes that might be accessed
# through introspection.
-keepclassmembers class **.R$* {
public static <fields>;
}
# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep public class * {
public protected *;
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
##---------------End: proguard configuration common for all Android apps ----------
##---------------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
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
##---------------End: proguard configuration for Gson ----------
Big thanks to owner this project --> google-gson
UPD: google/gson
has their example of proguard configuration for android applications.
see on github
They propose to use this template of configuration
##---------------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
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
##---------------End: proguard configuration for Gson ----------
Caused by java.lang.RuntimeException: Missing type parameter
Well, after changing my TypeToken
code, seems it's working.
Non working code:
return GsonBuilder().create().fromJson(
json,
object : TypeToken<List<Question>?>() {}.type
)
Working solution:
return GsonBuilder().create().fromJson(
json,
TypeToken.getParameterized(List::class.java, Question::class.java).type
)
Proguard Missing type parameter on Samsung device
My solution was to avoid the use of the TypeToken and updating dexguard to the latest version.
For example:
Instead of
new Gson().fromJson(json, new TypeToken<Object>(){}.getType());
use this
new Gson().fromJson(json, Object.class);
I updated an App but its failed. Missing type parameter in ProGuard
I solved my problem with this:
proguard:
-renamesourcefileattribute SourceFile
-keepattributes Signature,SourceFile,LineNumberTable
-keep public class * extends android.app.Application
java.lang.RuntimeException: Missing type parameter
The class TypeToken
requires a type parameter.
Looking at your code, it looks like you should replace
Type listType = new TypeToken() {
}.getType();
with
Type listType = new TypeToken<List<Face>>() {
}.getType();
Gson missing type parameter for ArrayList of objects
You have to add more information to your proguard file:
# 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
-keepattributes EnclosingMethod
-keepattributes InnerClasses
-keepattributes Annotation
# For using GSON @Expose annotation
-keepattributes *Annotation*
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }
For more details, check this example of Proguard file, provided in GSON repository.
How do you stop Proguard from removing type parameters?
According to the ProGuard Typical Library usage guide:
The "Signature" attribute is required to be able to access generic types when compiling in JDK 5.0 and higher.
Adding the following line fixed my issues with missing type parameters:
-keepattributes Signature
Related Topics
Changing Text Color of Menu Item in Navigation Drawer
Android Sd Card Write Permission Using Saf (Storage Access Framework)
Android: Launch Activity from Clickable Text
How to Execute Something Just Once Per Application Start
How to Get Current Buildtype in Android Gradle Configuration
How to Get Screen Size of Device
Android - Making Sliding Drawer to Slide from Left-To-Right
Adt Doesn't Create Default Hello World But Command Line Does
Aidl Is Missing Android Studio
Can't Find Toolbar in an Included Layout
Android Studio: Application Installation Failed
Android. Scrolling 2 Listviews Together
Do Geofences Remain Active in Android After a Device Reboot
How to Get Free and Total Size of Each Storagevolume
How to Find Intent Source in Android
Android: Simulate Wifi in the Emulator
Very Large Soap Response - Android- Out of Memory Error
Android 11 Action_Open_Document_Tree: Set Initial Uri to the Documents Folder