Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启用Android proguard的apk未连接到azure服务器_Java_Android_Azure_Proguard - Fatal编程技术网

Java 启用Android proguard的apk未连接到azure服务器

Java 启用Android proguard的apk未连接到azure服务器,java,android,azure,proguard,Java,Android,Azure,Proguard,从上周开始,我一直在寻找解决方案。我有一个与windows azure server连接的应用程序。我需要将我的apk提供给客户端,以便在部署之前尝试加密我的apk。现在我正在使用proguard,我可以在没有任何警告的情况下创建apk。但安装后,设备未连接到服务器。没有proguard,它正在连接。这是我的 在我的MainActivity上,Toast显示异常java.lang.IllegalArgumentException:表示mobile serviceTable的类在分配类时必须定义一

从上周开始,我一直在寻找解决方案。我有一个与windows azure server连接的应用程序。我需要将我的apk提供给客户端,以便在部署之前尝试加密我的apk。现在我正在使用proguard,我可以在没有任何警告的情况下创建apk。但安装后,设备未连接到服务器。没有proguard,它正在连接。这是我的

在我的MainActivity上,Toast显示异常java.lang.IllegalArgumentException:表示mobile serviceTable的类在分配类时必须定义一个id属性

         mClient = new MobileServiceClient(
                "https://uchek.azure-mobile.net/",
                "LslqFcIcUrlbLnYdDxTHUVrZBeQwPX81",
            con);

    try{
    mToDoTable = mClient.getTable(Product.class); //Assigning table
    }catch(Exception e){Toast.makeText(getApplicationContext(),    e+"",Toast.LENGTH_LONG).show();}
Product.java

 public class ProductInfo {


@com.google.gson.annotations.SerializedName("id")
private int mId;

@com.google.gson.annotations.SerializedName("imei")
private String mIMEI;
public ProductInfo(int id, String imei)
    { 
    this.setId(id);
    this.setIMEI(imei);
    }
    public final void setIMEI(String imei) {
    mIMEI = imei;
}
public int getId() {
    return mId;
}
public String getIMEI() {
    return mIMEI;
}

public final void setId(int id) {
    mId = id;
}
    }
proguard-project.txt

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-dontshrink
-dontoptimize
-verbose

-injars bin/classes
-injars libs
-outjars bin/classes-processed.jar
-libraryjars libs/achartengine-1.1.0.jar 
-libraryjars libs/droidText.0.5.jar
-libraryjars libs/gson-2.2.2.jar
-libraryjars libs/httpclient-4.2.3.jar
-libraryjars libs/joda-time-2.2.jar
-libraryjars libs/mobileservices-0.2.1.jar
-libraryjars libs/mobileservices-0.2.1-javadoc.jar
-libraryjars libs/mobileservices-0.2.1-sources.jar
-dontwarn org.apache.**
-dontwarn org.joda.**
-dontwarn org.slf4j.**
-dontwarn org.json.*
-dontwarn org.mortbay.**
-dontwarn org.apache.log4j.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.apache.commons.logging.**
-dontwarn org.apache.commons.codec.binary.**
-dontwarn javax.xml.**
-dontwarn javax.management.**
-dontwarn java.lang.management.**
-dontwarn android.support.**
-dontwarn com.google.code.**
-dontwarn oauth.signpost.**
-dontwarn twitter4j.**

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

    -keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.code.linkedinapi.**
-keep public class * implements java.io.Serializable
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.ListFragment

-keep class javax.**  { *; }
-keep class org.**  { *; }
-keep class twitter4j.**  { *; }
-keep class java.lang.management.**  { *; }
-keep class com.google.code.**  { *; }
-keep class oauth.signpost.**  { *; }
-keep class com.microsoft.windowsazure.mobileservices.**  { *; }

-keepclassmembers public class                 com.google.code.linkedinapi.client.impl.LinkedInApiXppClient {
 public <init>(java.lang.String, java.lang.String);
}

-keepclasseswithmembernames class * {
native <methods>;
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keepclassmembers class * extends com.actionbarsherlock.ActionBarSherlock {
<init>(android.app.Activity, int);
}
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
 public *;
}
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

我自己也遇到过同样的问题,在仔细阅读代码之后,我找到了解决方案:只要将“mId”重命名为“id”,您就一切都好了。MobileServiceClient.getTable调用validateClass方法,该方法查找名为“id”的字段,或者如果该字段用@SerializedName注释标记,则调用注释的值。因为它没有通过注释值找到它,所以只需在代码中重命名它,它就会通过字段名来获取它。它说它必须只有一个id字段,但问题是,它找不到任何id字段,因此出现了错误。

注释是通过反射访问的。ProGuard对此一无所知,因此您需要明确保留它们:

-keepattributes *Annotation*
-keep @interface com.google.gson.annotations.SerializedName

请注意,如果您使用的是标准Ant/Eclipse/Gradle构建脚本,那么它们已经自动指定了所有必要的-injar、-outjars和-libraryjars选项,以及其他非特定于项目的选项。

我尝试了这个方法,但没有成功:/,还有其他建议吗?