【问题标题】:Release apk not working after enabling proguard, not able to debug too [duplicate]启用proguard后发布apk不起作用,也无法调试[重复]
【发布时间】:2015-07-28 13:44:47
【问题描述】:

我可以在设备中安装应用程序,但应用程序未连接到服务器。我也无法调试发布 apk。当我禁用 proguard 时,应用程序会连接到服务器,我也可以调试发布 apk。我尝试使用 proguard 版本 4.7,4.9 和 5.2.1 。我的 Android 版本是 19,我的工具版本是 20。我正在使用 eclipse。

我在之前的生产版本中成功使用了 proguard 4.9。在我之前的生产版本发布之后,我对我的代码进行了两次重大更改。我升级了 google-play-services 并使用 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):    

【问题讨论】:

标签: android eclipse proguard release


【解决方案1】:

对于您刚刚更改的两件事之一,您的 Proguard 配置不正确。 Google Play 服务详情为here。他们声明您需要添加以下 ProGuard 配置:

-keep 类 * 扩展 java.util.ListResourceBundle { 受保护的对象[][] getContents(); }

-保持公共类 com.google.android.gms.common.internal.safeparcel.SafeParcelable { 公共静态最终*** NULL; }

-keepnames @com.google.android.gms.common.annotation.KeepName 类 * -keepclassmembernames 类 * { @com.google.android.gms.common.annotation.KeepName *; }

-keepnames 类 * 实现 android.os.Parcelable { 公共静态最终**创建者; }

【讨论】:

  • 我已将此添加到 proguard-project.txt 但没有帮助。
  • 为了仔细检查这是否是由于使用 jarjar 修剪 googleplayservices 造成的,我禁用了需要最新 googleplayservices 的功能,并使用了未超过 dex 限制的不修剪的旧版本。我仍然得到提到的问题。
猜你喜欢
  • 2016-10-19
  • 2018-01-20
  • 1970-01-01
  • 2021-05-27
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
相关资源
最近更新 更多