2015-07-28 2 views
1

Я могу установить приложение в устройство, но приложение не подключается к серверу. Я также не могу отлаживать выпуск apk. Когда я отключу proguard, приложение подключается к серверу, и я также могу отлаживать apk release. Я попытался использовать proguard версии 4.7.4.9 и 5.2.1. Моя версия Android - 19, а моя версия инструментов - 20. Я использую eclipse.Релиз apk не работает после включения proguard, неспособный слишком отлаживать

Я успешно использовал proguard 4.9 в своем предыдущем выпуске к производству. После моего предыдущего выпуска на производство я внес два важных изменения в свой код. Я обновил сервисы google-play и использовал jarjar, чтобы обрезать его, и я обновил инструменты sdk до версии 21, а затем перешел на версию 20 из-за некоторых проблем.

Я хотел бы знать, что все, что я могу попытаться выяснить, что происходит, когда я включаю proguard. То, что казалось уместным, что я выбрал из LogCat ниже:

07-29 14:31:05.835: W/System.err(17696): java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.reflect.Type[] java.lang.reflect.ParameterizedType.getActualTypeArguments()' on a null object reference 
07-29 14:31:05.835: W/System.err(17696): at com.google.api.client.util.Types.java.lang.reflect.ParameterizedType getSuperParameterizedType(java.lang.reflect.Type, java.lang.Class)(Types.java) 
    boolean isAssignableToOrFrom(java.lang.Class,java.lang.Class)(Types.java) 
    java.lang.Object newInstance(java.lang.Class)(Types.java) 
    IllegalArgumentException handleExceptionForNewInstance(java.lang.Exception,java.lang.Class)(Types.java) 
    boolean isArray(java.lang.reflect.Type)(Types.java) 
    java.lang.Class getRawClass(java.lang.reflect.ParameterizedType)(Types.java) 
    reflect.Type getBound(java.lang.reflect.WildcardType)(Types.java) 
    resolveTypeVariable(java.util.List,java.lang.reflect.TypeVariable)(Types.java) 
    Class getRawArrayComponentType(java.util.List,java.lang.reflect.Type)(Types.java) 
    reflect.Type getActualParameterAtPosition(java.lang.reflect.Type,java.lang.Class,int)(Types.java) 
    Iterable iterableOf(java.lang.Object)(Types.java) 
    Object toArray(java.util.Collection,java.lang.Class)(Types.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.util.Types.java.lang.reflect.Type getIterableParameter(java.lang.reflect.Type)(Types.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.http.HttpHeaders.com.google.api.client.http.HttpHeaders clone()(HttpHeaders.java) 
    set(java.lang.String,java.lang.Object)(HttpHeaders.java) 
    setAcceptEncoding(java.lang.String)(HttpHeaders.java) 
    setAuthorization(java.util.List)(HttpHeaders.java) 
    setContentLength(java.lang.Long)(HttpHeaders.java) 
    void addHeader(java.util.logging.Logger,java.lang.StringBuilder,java.lang.StringBuilder,com.google.api.client.http.LowLevelHttpRequest,java.lang.String,java.lang.Object,java.io.Writer)(HttpHeaders.java) 
    java.lang.String toStringValue(java.lang.Object)(HttpHeaders.java) 
    void serializeHeaders(com.google.api.client.http.HttpHeaders,java.lang.StringBuilder,java.lang.StringBuilder,java.util.logging.Logger,com.google.api.client.http.LowLevelHttpRequest)(HttpHeaders.java) 
    serializeHeadersForMultipartRequests(com.google.api.client.http.HttpHeaders,java.lang.StringBuilder,java.util.logging.Logger,java.io.Writer)(HttpHeaders.java) 
    com.google.api.client.http.HttpHeaders,java.lang.StringBuilder,java.lang.StringBuilder,java.util.logging.Logger,com.google.api.client.http.LowLevelHttpRequest,java.io.Writer)(HttpHeaders.java) 
    fromHttpResponse(com.google.api.client.http.LowLevelHttpResponse,java.lang.StringBuilder)(HttpHeaders.java) 
    fromHttpHeaders(com.google.api.client.http.HttpHeaders)(HttpHeaders.java) 
    parseHeader(java.lang.String,java.lang.String,com.google.api.client.http.HttpHeaders$ParseHeaderState)(HttpHeaders.java) 
    java.lang.Object parseValue(java.lang.reflect.Type,java.util.List,java.lang.String)(HttpHeaders.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.http.HttpHeaders.com.google.api.client.http.HttpHeaders clone()(HttpHeaders.java) 
    set(java.lang.String,java.lang.Object)(HttpHeaders.java) 
    setAcceptEncoding(java.lang.String)(HttpHeaders.java) 
    setAuthorization(java.util.List)(HttpHeaders.java) 
    setContentLength(java.lang.Long)(HttpHeaders.java) 
    void addHeader(java.util.logging.Logger,java.lang.StringBuilder,java.lang.StringBuilder,com.google.api.client.http.LowLevelHttpRequest,java.lang.String,java.lang.Object,java.io.Writer)(HttpHeaders.java) 
    java.lang.String toStringValue(java.lang.Object)(HttpHeaders.java) 
    void serializeHeaders(com.google.api.client.http.HttpHeaders,java.lang.StringBuilder,java.lang.StringBuilder,java.util.logging.Logger,com.google.api.client.http.LowLevelHttpRequest)(HttpHeaders.java) 
    serializeHeadersForMultipartRequests(com.google.api.client.http.HttpHeaders,java.lang.StringBuilder,java.util.logging.Logger,java.io.Writer)(HttpHeaders.java) 
    com.google.api.client.http.HttpHeaders,java.lang.StringBuilder,java.lang.StringBuilder,java.util.logging.Logger,com.google.api.client.http.LowLevelHttpRequest,java.io.Writer)(HttpHeaders.java) 
    fromHttpResponse(com.google.api.client.http.LowLevelHttpResponse,java.lang.StringBuilder)(HttpHeaders.java) 
    fromHttpHeaders(com.google.api.client.http.HttpHeaders)(HttpHeaders.java) 
    parseHeader(java.lang.String,java.lang.String,com.google.api.client.http.HttpHeaders$ParseHeaderState)(HttpHeaders.java) 
    java.lang.Object parseValue(java.lang.reflect.Type,java.util.List,java.lang.String)(HttpHeaders.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.http.HttpResponse.void <init>(com.google.api.client.http.HttpRequest,com.google.api.client.http.  LowLevelHttpResponse)(HttpResponse.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.http.HttpRequest.com.google.api.client.http.HttpResponse execute()(HttpRequest.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.com.google.api.client.http.HttpResponse    executeUnparsed(boolean)(AbstractGoogleClientRequest.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.com.google.api.client.http.HttpResponse   executeUnparsed()(AbstractGoogleClientRequest.java) 
07-29 14:31:05.836: W/System.err(17696): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.java.lang.Object execute()( AbstractGoogleClientRequest.java) 
07-29 14:31:05.836: W/System.err(17696):  
+0

После долгих поисков я нашел аналогичный вопрос, и ответ http://stackoverflow.com/a/14612335/954010 помог решить проблему. – maya

ответ

0

Ваша конфигурация Proguard неверна для одной из двух вещей, которые вы только что изменили. Сведения о сервисах Google Play - here. Они заявляют, что вам нужно добавить следующие Proguard конфиги:

-keep класс * распространяется java.util.ListResourceBundle { защищаемого объекта [] [] getContents(); }

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; }

-keepnames @ com.google.android.gms.common.annotation.KeepName класс * -keepclassmembernames класс * { @ com.google.android.gms.common.annotation.KeepName *; }

-keepnames class * осуществляет android.os.Parcelable { public static final ** CREATOR; }

+0

Я добавил это в proguard-project.txt, но это не помогло. – maya

+0

Чтобы дважды проверить, вызван ли этот инсурн, используя jarjar для обрезки googleplayservices, я отключил функцию, которая требовала последних служб googleplays, и использовала старую версию без обрезки, которая не пересекала лимит dex. Я все еще упоминаю о проблемах. – maya

Смежные вопросы