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.pro
File
-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