Подпись apk меняет название параметров сообщения
У меня есть приложение и C# web api, которые приложение вызывает с помощью retrofit2. Я сталкиваюсь с проблемой при выполнении пост-звонка в API, имена параметров в вызове меняются на "a" и "b" вместо реальных имен.
ApiInterface:
@POST("users/add")
Call<String> createUser(@Body UserSignUpModel user);
Настройка дооснащения:
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(Configuration.API_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(get_HTTPClient())
.build();
UserSignupModel:
public class UserSignUpModel
{
public String UserName;
public long PhoneNumber;
}
Оформление запроса:
userSignUpModel.UserName = userName.getText().toString();
userSignUpModel.PhoneNumber = Long.parseLong(number.getText().toString());
Client.createUser(userSignUpModel, callback);
Я также настроил fiddler для перехвата запроса, который я получаю от моего приложения, и ниже приведены результаты:
1. Когда я нажимаю отладку или запускаю на Android Studio
2. Когда я создаю подписанный apk и делаю запрос от него
Мои запросы не выполняются из-за этого. Любая помощь будет оценена.
Спасибо.
1 ответ
Генерация подписанного.apk вызовет Proguard (если он включен). Который будет запутывать классы и тому подобное.
Есть 2 способа, как вы можете исправить это дело:
Вариант 1. Использование @SerializedName
Измените свой UserSignUpModel.java, явно указав имя переменных:
import com.google.gson.annotations.SerializedName;
public class UserSignUpModel
{
@SerializedName("UserName")
public String UserName;
@SerializedName("PhoneNumber")
public long PhoneNumber;
}
Вариант 2: изменение proguard-rules.pro
файл
Добавьте следующее правило к вашему proguard-rules.pro
файл, предполагая UserSignUpModel.java
находится внутри модельного пакета:
-keep class com.<packageName>.model.** { *; }