使用 proguard 后,Android apk 未连接到 Azure 服务器

Posted

技术标签:

【中文标题】使用 proguard 后,Android apk 未连接到 Azure 服务器【英文标题】:Android apk not connecting to Azure server after using proguard 【发布时间】:2015-04-10 14:43:48 【问题描述】:

我一直在寻找解决这个问题的方法,我尝试了许多 proguard 配置但没有成功。 该应用程序运行完美,直到我使用 proguard 制作发布版本。 我收到错误消息: “java.lang.IllegalArgumentException: 表示移动服务表的类必须定义一个 id 属性”在分配类时

我相信这是由我试图访问的表的类引起的,它的变量“id”名称已更改。

我有以下几点:

public class User 
   public String id;
   public String nickname;
   public String phone;

并通过以下方式建立连接:

mClient.getTable(User.class).where().field("nickname")
    .eq(nick).execute(new TableQueryCallback<User>() ....

proguard 配置文件是:

-keep class com.microsoft.azure.storage.table.**  *; 
-dontwarn com.fasterxml.jackson.core**

-keep class com.microsoft.windowsazure.mobileservices.**  *; 
-dontwarn android.os.**
-dontwarn com.microsoft.windowsazure.mobileservices.RequestAsyncTask

##---------------from here is the part that i have modified a lot of times -

-keepattributes Signature
-keepattributes *Annotation*
-keep public class com.company.app.User.**  *; 
-keepclassmembers public class com.company.app.User.**  *; 

我已经尝试了几个小时的许多修改,但没有成功。 我关注了this 和this 等等。

你能帮帮我吗? 谢谢

编辑:已解决。只需删除 proguard 文件中 User 之后的 .** 即可。就这样吧:

-keep public class com.company.app.User  *; 
-keepclassmembers public class com.company.app.User  *; 

【问题讨论】:

您是否尝试过将附加的 SerializedName 行添加到您的 proguard 配置中,如链接帖子 cmets 中所述? -keep @interface com.google.gson.annotations.SerializedName 你的意思是把类成员@com.google.gson.annotations.SerializedName("id") 然后加上-keepattributes Annotation -keep @interface com .google.gson.annotations.SerializedName ?是的,我试过了 我正在检查 proguard 文件,在 mapping.txt 中我可以看到 com.company.app.User -> com.company.app.User: java.lang.String 昵称 -> 一个 java。 lang.String phone -> b 所以那些被混淆并且在usage.txt中:public java.lang.String id 所以id没有保留......我猜是有问题 我解决了这个问题。只需在 proguard 文件中删除 User 之后的 .** 并修复即可。我不敢相信我花了这么多时间在这件事上...... 我建议将其添加为答案并接受它,以便下次有人遇到它时,您将为他们提供解决方案:) 【参考方案1】:

解决了。只需删除 proguard 文件中 User 之后的 .** 即可。就这样吧:

-keep public class com.company.app.User  *; 
-keepclassmembers public class com.company.app.User  *; 

【讨论】:

以上是关于使用 proguard 后,Android apk 未连接到 Azure 服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Android Studio 签署 APK 时出现 Proguard 错误

Android Proguard混淆打包经验总结

如何使用 Eclipse + Proguard“运行”导出的 Android 应用程序?

使用 LibGDX 和 ProGuard 导出 Android APK 时出错

Android proguarded apk 仍然可读

无法在 Android Studio 中生成签名的 APK,因为缺少 proguard-rules.txt