Подпись 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.** { *; }
Другие вопросы по тегам