已签名的 apk 正在更改 post 参数名称
Signed apk is changing post parameters name
我有我的应用程序和 c# web api,该应用程序使用 retrofit2 调用。我在对 api 进行 post 调用时遇到问题,调用中的参数名称更改为 "a" 和 "b" 而不是实际名称。
Api接口:
@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();
用户注册模型:
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 上单击 debug 或 运行
2. 当我生成一个签名的 apk 并从中发出请求时
因此,我的请求失败了。任何帮助将不胜感激。
谢谢。
生成签名的 .apk 将触发 proguard(如果已启用)。这会混淆 类 等。
有两种方法可以解决此问题:
选项 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.** { *; }
我有我的应用程序和 c# web api,该应用程序使用 retrofit2 调用。我在对 api 进行 post 调用时遇到问题,调用中的参数名称更改为 "a" 和 "b" 而不是实际名称。
Api接口:
@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();
用户注册模型:
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 上单击 debug 或 运行
2. 当我生成一个签名的 apk 并从中发出请求时
因此,我的请求失败了。任何帮助将不胜感激。
谢谢。
生成签名的 .apk 将触发 proguard(如果已启用)。这会混淆 类 等。
有两种方法可以解决此问题:
选项 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.** { *; }