When I set minifyEnabled & shrinkResources to true,the Retrofit body JSON request sent is blank, and when it is set to false then it works perfectly fine.
I have posted the whole gradle file so that, you can help me telling what I am doing wrong.
My Retrofit request json body goes like this when minifyEnabled & shrinkResources is true :
{} It works fine when minifyEnabled & shrinkResources is false:
{"Data":"demoToken","Key":"demokey","Token":"2a9a8677-ac79-49d6-9947-d797b3e4d8e5"} My gradle looks like this :
   apply {     plugin 'com.android.application'     plugin 'kotlin-android'     plugin 'kotlin-android-extensions'     plugin 'kotlin-kapt'     plugin 'io.fabric'     plugin 'com.google.firebase.firebase-perf' } android {     compileSdkVersion 28     defaultConfig {         applicationId "com.something.theapp"         minSdkVersion 21         targetSdkVersion 28         versionCode 43          versionName "0.6.7"         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"         flavorDimensions "server"         multiDexEnabled true         vectorDrawables.useSupportLibrary = true         javaCompileOptions {             annotationProcessorOptions {                 includeCompileClasspath = true             }         }     }     signingConfigs {         kaira {             storeFile file('key_tts.jks')             storePassword 'android'             keyAlias 'tts_key'             keyPassword 'android'         }     }     buildTypes {         debug {             signingConfig signingConfigs.kaira             minifyEnabled true             shrinkResources true             buildConfigField "boolean", "ALLOW_DATABASE", "false"             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }         release {             signingConfig signingConfigs.kaira             minifyEnabled true             shrinkResources true             buildConfigField "boolean", "ALLOW_DATABASE", "false"             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }     }      productFlavors {         local {             //buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.136:6264/siteapp/api/\"" //            buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.21:5678/api/\""             //   buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.233:5677/api/\""             //  buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.26:5678/api/\""             //buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.25:5678/api/\"" //            buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.37:5678/api/\"" //            buildConfigField "String", "WebServiceUrl", "\"https://api.forsell.in/api/\""             //  buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.23:5678/api/\""             buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.29:5678/api/\""             buildConfigField "String", "WebUrl", "\"https://someurl.in/\""             buildConfigField "String", "ServerName", "\"-Local\""             dimension "server"             copy {                 from "src/local"                 include "google-services.json"                 into "."             }         }         temp {             buildConfigField "String", "WebServiceUrl", "\"http://api.lezza.in/api/\""             buildConfigField "String", "WebUrl", "\"https://someurl.in/\""             buildConfigField "String", "ServerName", "\"-Local\""             dimension "server"             copy {                 from "src/local"                 include "google-services.json"                 into "."             }         }         live {             buildConfigField "String", "WebServiceUrl", "\"https://api.someurl.in/api/\""             buildConfigField "String", "WebUrl", "\"https://someurl.in/\""             buildConfigField "String", "ExtClientNameNew", "\"ExtClientName:TTS\""             dimension "server"             copy {                 from "src/livegcm"                 include "google-services.json"                 into "."             }         }         staging {             //buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.233:85/api/\""//sunil             //     buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.233:5677/api/\""//devang             //   buildConfigField "String", "WebServiceUrl", "\"http://192.168.1.233:85/api/\""             buildConfigField "String", "WebServiceUrl", "\"https://stageapi.someurl.in/api/\""             buildConfigField "String", "WebUrl", "\"https://stageweb.someurl.in/\""             buildConfigField "String", "ServerName", "\"-Staging\""             dimension "server"             copy {                 from "src/local"                 include "google-services.json"                 into "."             }         }     }     compileOptions {         sourceCompatibility JavaVersion.VERSION_1_8         targetCompatibility JavaVersion.VERSION_1_8     }     sourceSets {         main.java.srcDirs += 'src/main/kotlin'     }     dexOptions {         preDexLibraries = false         javaMaxHeapSize "4g" // 2g should be also OK     }     defaultConfig {         vectorDrawables.useSupportLibrary = true     }     lintOptions {         abortOnError false         disable 'MissingTranslation'     } } repositories {     mavenCentral()     maven { url 'https://maven.fabric.io/public' } }  configurations.all {     resolutionStrategy.eachDependency { DependencyResolveDetails details ->         def requested = details.requested         if (requested.group == 'com.android.support') {             if (!requested.name.startsWith("multidex")) {                 details.useVersion '28.0.0'             }         }     } } dependencies {     def lifecycle_version = "2.0.0"     implementation fileTree(include: ['*.jar'], dir: 'libs')     implementation 'androidx.core:core-ktx:1.0.2'     implementation "android.arch.lifecycle:extensions:$lifecycle_version"     annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"     implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'     implementation 'androidx.legacy:legacy-support-v4:1.0.0'     implementation 'androidx.appcompat:appcompat:1.0.2'     implementation 'androidx.vectordrawable:vectordrawable:1.0.0-alpha1'     testImplementation 'junit:junit:4.12'     androidTestImplementation 'androidx.test:runner:1.2.0'     androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.2') {         exclude group: 'com.google.code.findbugs'     }     implementation 'com.squareup.retrofit2:retrofit:2.5.0'     implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'     implementation 'com.squareup.retrofit2:converter-gson:2.5.0'     implementation 'com.squareup.okhttp3:okhttp:3.12.1'     implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'     implementation 'com.google.android.material:material:1.0.0'     implementation 'androidx.recyclerview:recyclerview:1.0.0'     implementation 'com.github.bumptech.glide:glide:4.5.0'     implementation 'com.karumi:dexter:5.0.0'     implementation 'com.google.android.gms:play-services-maps:16.1.0'     implementation 'com.google.android.gms:play-services-location:16.0.0'     implementation 'com.google.android.gms:play-services-auth:16.0.1'     implementation 'org.jetbrains.anko:anko-common:0.9'     implementation 'com.google.android.gms:play-services-ads:17.2.0'     implementation 'androidx.multidex:multidex:2.0.1'     implementation project(path: ':imagepicker')     implementation 'androidx.percentlayout:percentlayout:1.0.0'     implementation 'com.google.firebase:firebase-core:16.0.9'     implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0'     implementation 'com.google.firebase:firebase-messaging:18.0.0'     implementation 'com.google.firebase:firebase-config:17.0.0'     implementation 'com.google.firebase:firebase-perf:17.0.2'     implementation 'com.github.chrisbanes:PhotoView:2.3.0'     implementation 'com.google.android.gms:play-services-places:16.1.0'     implementation 'com.google.android.libraries.places:places:1.1.0'     api 'com.theartofdev.edmodo:android-image-cropper:2.8.+'     implementation 'com.github.faruktoptas:RetrofitRssConverterFactory:0.1.0'     implementation 'com.wang.avi:library:2.1.3'     implementation 'com.facebook.android:facebook-android-sdk:5.4.0'     implementation('com.crashlytics.sdk.android:crashlytics:2.9.8@aar') {         transitive = true     }     implementation 'com.haozhang.libary:android-slanted-textview:1.2'     implementation 'com.facebook.shimmer:shimmer:0.4.0'     implementation 'com.github.freshdesk:freshchat-android:1.5.3'     implementation 'commons-io:commons-io:2.4'     implementation 'com.getkeepsafe.taptargetview:taptargetview:1.12.0'     implementation 'com.razorpay:checkout:1.5.6'     implementation 'com.google.android.gms:play-services-analytics:17.0.0'  } apply plugin: 'com.google.gms.google-services' Below is my Main model class
class ServiceRequest {      var Key: String? = "SiteAdminAppkey"     var Token: String? = ""     //    var Slug: String? = "admin"     var Data: Any? = null } I am able to get this working by adding @SerializeName annotation but I will have to do it in every model class. In one of my other project, Proguard and everything works without serialization.
Retrofit offers the ability to pass objects within the request body. Objects can be specified for use as HTTP request body by using the @Body annotation. The functionality of Retrofit's @Body annotation hasn't changed in version 2.
– android developer. Jun 12, 2015 at 10:47. 1. minifyEnabled enables proguard which removes unused classes/code and shrinkResources removes unused resources (pngs, xmls, mostly introduced by libraries which you don't fully utilize).
Overview. Retrofit is a type-safe REST client for Android, Java and Kotlin developed by Square. The library provides a powerful framework for authenticating and interacting with APIs and sending network requests with OkHttp. See this guide to understand how OkHttp works.
Add below line in your
proguard-rules.proFile
-keepclassmembers,allowobfuscation class * {   @com.google.gson.annotations.SerializedName <fields>; } Also add below line in gradle.properties file.
android.enableR8=false I face same issue and added above line in the file and its working for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With