【问题标题】:Signed apk is changing post parameters name已签名的 apk 正在更改帖子参数名称
【发布时间】:2023-03-23 02:48:01
【问题描述】:

我有我的 APP 和 c# web api,应用程序使用 retrofit2 调用它们。我在对 api 进行后调用时遇到问题,调用中的参数名称正在更改为“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);

我还设置了提琴手来拦截我从我的应用程序获得的请求,结果如下:
1.当我点击调试或在android studio上运行时

2.当我生成一个签名的apk并向它发出请求时


我的请求因此而失败。任何帮助将不胜感激。
谢谢。

【问题讨论】:

    标签: c# android retrofit2 signed-apk


    【解决方案1】:

    生成签名的 .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.** { *; }
    

    【讨论】:

    • 选项 2 帮助了我,谢谢@Alex
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2022-11-25
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多