首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gson和jackson的前卫问题

gson和jackson的前卫问题
EN

Stack Overflow用户
提问于 2015-11-10 16:59:06
回答 3查看 2K关注 0票数 2

我不会在我的项目中使用杰克逊。我只使用了gson库,但当我尝试构建版本apk时,proguard显示了很多警告。

以下是警告:

代码语言:javascript
复制
Warning:org.immutables.gson.adapter.ExpectedSubtypesAdapter$JsonParserReaderSupplier: can't find referenced class com.fasterxml.jackson.databind.util.TokenBuffer
Warning:org.immutables.gson.adapter.FieldNamingTranslator: can't find referenced class sun.reflect.ReflectionFactory
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value$Immutable
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value$Style
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value$Style$ImplementationVisibility
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value$Immutable
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value$Style
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$GsonProviderOptions: can't find referenced class org.immutables.value.Value$Style$ImplementationVisibility
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonFactory
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonGenerator
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonFactory
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonParser$Feature
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonFactory
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonGenerator$Feature
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonFactory
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonGenerator
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonParser$Feature
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonGenerator$Feature
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonFactory
Warning:org.immutables.gson.stream.GsonMessageBodyProvider$JacksonStreamer: can't find referenced class com.fasterxml.jackson.core.JsonGenerator
Warning:org.immutables.gson.stream.JsonGeneratorWriter: can't find referenced class com.fasterxml.jackson.core.JsonGenerator
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.databind.util.TokenBuffer
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.databind.util.TokenBuffer
Warning:org.immutables.gson.stream.JsonParserReader: can't find referenced class com.fasterxml.jackson.core.JsonParser
Warning:org.immutables.gson.stream.JsonParserReader$2: can't find referenced class com.fasterxml.jackson.core.JsonToken
Warning:org.parceler.ParcelAnnotationProcessor: can't find referenced method 'void init(javax.annotation.processing.ProcessingEnvironment)' in program class org.parceler.transfuse.AnnotationProcessorBase
Warning:org.parceler.ParcelAnnotationProcessor: can't find referenced class com.google.auto.service.AutoService
Warning:org.parceler.apache.commons.beanutils.MappedPropertyDescriptor: can't find referenced method 'void setName(java.lang.String)' in program class org.parceler.apache.commons.beanutils.MappedPropertyDescriptor
Warning:org.parceler.apache.commons.logging.impl.AvalonLogger: can't find referenced class org.parceler.apache.avalon.framework.logger.Logger
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Category
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Priority
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Logger
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Category
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Logger
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Priority
Warning:org.parceler.apache.commons.logging.impl.Log4JLogger: can't find referenced class org.parceler.apache.log4j.Logger
Warning:org.parceler.apache.commons.logging.impl.LogKitLogger: can't find referenced class org.parceler.apache.log.Hierarchy
Warning:org.parceler.apache.commons.logging.impl.LogKitLogger: can't find referenced class org.parceler.apache.log.Logger
Warning:org.parceler.codemodel.util.SingleByteEncoder: can't find referenced class sun.nio.cs.Surrogate$Parser
Warning:org.parceler.codemodel.util.SingleByteEncoder: can't find referenced class sun.nio.cs.Surrogate
Warning:org.parceler.codemodel.util.SingleByteEncoder: can't find referenced class sun.nio.cs.Surrogate$Parser
Warning:org.parceler.codemodel.util.SingleByteEncoder: can't find referenced class sun.nio.cs.Surrogate
Warning:org.parceler.codemodel.util.SingleByteEncoder: can't find referenced class sun.nio.cs.Surrogate$Parser
Warning:org.parceler.guava.cache.Striped64: can't find referenced class sun.misc.Unsafe
Warning:org.parceler.guava.cache.Striped64$1: can't find referenced class sun.misc.Unsafe
Warning:org.parceler.guava.cache.Striped64$Cell: can't find referenced class sun.misc.Unsafe
Warning:org.parceler.guava.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator: can't find referenced class sun.misc.Unsafe
Warning:org.parceler.guava.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator$1: can't find referenced class sun.misc.Unsafe
Warning:org.parceler.transfuse.bootstrap.BootstrapProcessor: can't find referenced field 'javax.annotation.processing.ProcessingEnvironment processingEnv' in program class org.parceler.transfuse.bootstrap.BootstrapProcessor
Warning:org.parceler.transfuse.gen.FilerResourceWriter: can't find referenced class javax.tools.JavaFileManager$Location
Warning:org.parceler.transfuse.gen.FilerResourceWriter: can't find referenced class javax.tools.JavaFileManager
Warning:org.parceler.transfuse.gen.FilerResourceWriter: can't find referenced class javax.tools.StandardLocation
Warning:org.parceler.transfuse.gen.FilerResourceWriter: can't find referenced class javax.tools.FileObject
Warning:org.parceler.transfuse.gen.FilerSourceCodeWriter: can't find referenced class javax.tools.JavaFileObject
Warning:org.parceler.transfuse.util.MessagerLogger: can't find referenced class javax.tools.Diagnostic$Kind
Warning:org.parceler.transfuse.util.MessagerLogger: can't find referenced class javax.tools.Diagnostic
Warning:org.parceler.transfuse.util.MessagerLogger: can't find referenced class javax.tools.Diagnostic$Kind
Warning:org.parceler.transfuse.validation.Validator: can't find referenced class javax.tools.Diagnostic$Kind
Warning:org.parceler.transfuse.validation.Validator: can't find referenced class javax.tools.Diagnostic
Warning:org.parceler.transfuse.validation.Validator: can't find referenced class javax.tools.Diagnostic$Kind
Warning:org.parceler.transfuse.validation.Validator$ValidationBuilder: can't find referenced class javax.tools.Diagnostic$Kind
Warning:org.parceler.transfuse.validation.Validator$ValidationBuilder: can't find referenced class javax.tools.Diagnostic
Warning:org.parceler.transfuse.validation.Validator$ValidationBuilder: can't find referenced class javax.tools.Diagnostic$Kind

下面是我完整的proguard文件

代码语言:javascript
复制
# Apache
-keep class org.apache.http.** { *; }
-dontwarn org.apache.http.**
-dontwarn android.net.**

# ButterKnife 7

-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }

-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}

-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}

# Crashlytics 1.+

-keep class com.crashlytics.** { *; }
-keepattributes SourceFile,LineNumberTable

# Deeplink dispatch
-keep class com.airbnb.deeplinkdispatch.** { *; }
-keepclasseswithmembers class * { @com.airbnb.deeplinkdispatch.DeepLink <methods>;}

# Configuration for Fabric Twitter Kit
# See: https://dev.twitter.com/twitter-kit/android/integrate

-dontwarn com.squareup.okhttp.**
-dontwarn com.google.appengine.api.urlfetch.**
-dontwarn rx.**
-dontwarn retrofit.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-keep class retrofit.** { *; }
-keepclasseswithmembers class * {
    @retrofit.http.* *;
}

# Facebook 3.2

-keep class com.facebook.** { *; }
-keepattributes Signature

## Google Play Services 4.3.23 specific rules ##
## https://developer.android.com/google/play-services/setup.html#Proguard ##

-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}

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

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

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

## GSON 2.2.4 specific rules ##

# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

-keepattributes EnclosingMethod

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }

# MoPub Proguard Config
# NOTE: You should also include the Android Proguard config found with the build tools:
# $ANDROID_HOME/tools/proguard/proguard-android.txt

# Keep public classes and methods.
-keepclassmembers class com.mopub.** { public *; }
-keep public class com.mopub.**
-keep public class android.webkit.JavascriptInterface {}

# Explicitly keep any custom event classes in any package.
-keep class * extends com.mopub.mobileads.CustomEventBanner {}
-keep class * extends com.mopub.mobileads.CustomEventInterstitial {}
-keep class * extends com.mopub.nativeads.CustomEventNative {}
-keep class * extends com.mopub.mobileads.GooglePlayServicesBanner {}
-keep class * extends com.mopub.nativeads.AvocarrotNativeMopub {}

# Support for Android Advertiser ID.
-keep class com.google.android.gms.common.GooglePlayServicesUtil {*;}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {*;}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {*;}

# Simple-fb
-keep class com.sromku.simple.fb.entities.** { *; }

# OkHttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**

## Square Otto specific rules ##
## https://square.github.io/otto/ ##

# Otto
-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}

## Square Picasso specific rules ##
## https://square.github.io/picasso/ ##

-dontwarn com.squareup.okhttp.**

# Retrofit 1.X

-keep class com.squareup.okhttp.** { *; }
-keep class retrofit.** { *; }
-keep interface com.squareup.okhttp.** { *; }

-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
-dontwarn retrofit.**
-dontwarn rx.**

-keepclasseswithmembers class * {
    @retrofit.http.* <methods>;
}

# If in your rest service interface you use methods with Callback argument.
-keepattributes Exceptions

# If your rest service methods throw custom exceptions, because you've defined an ErrorHandler.
-keepattributes Signature

# Also you must note that if you are using GSON for conversion from JSON to POJO representation, you must ignore those POJO classes from being obfuscated.
# Here include the POJO's that have you have created for mapping JSON response to POJO for example.

-keep class com.myproject.model.** { *; }

# Android design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }

-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }

-keep public class * extends android.support.v4.view.ActionProvider {
    public <init>(android.content.Context);
}

# app specific
-keepclassmembers class com.myproject.** {
   public *;
}

# Removing logs
-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

# Keep the support library

-keep class android.support.v4.** { *; }
-keep interface android.support.v4.** { *; }

# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version.  We know about them, and they are safe.
-dontwarn android.support.**
## ---------------- End Project specifics ---------------- ##

请帮帮忙,怎么解决。

EN

回答 3

Stack Overflow用户

发布于 2015-11-10 17:33:10

如果你按照Emanuel Seidinger的建议在添加keepattributes行后仍然出错,请为导致问题的包添加dontwarn指令。

-dontwarn org.codehaus.jackson.**

票数 2
EN

Stack Overflow用户

发布于 2016-02-23 06:44:36

我会从不同的角度来解决这个问题。我在这里看到的是,您提供的警告可能表示只编译的工件意外泄漏到由ProGuard处理的实际编译/运行时类路径。特别是,批注处理器(如ParcelAnnotationProcessor)和可选批注不应包含在常规编译范围内。

通常你能做的就是根据你使用的apt插件将这种依赖的范围设置为providedcompileOnly (假设你使用Gradle来构建android应用)

作为org.immutables库的作者之一,我已经遇到并讨论了ProGuard的一些困难,它可能无法识别特殊的仅编译范围等。在您的特定情况下,您可以使用org.immutables:gson工件,它包含可选的Jackson-Gson集成桥类,这些类被传播来构建。在Android上通常不需要这些类。作为一种解决方案,我建议使用annotations分类器(使用like provided "org.immutables:gson:2.1.11:annotations")将org.immutables:gson工件替换为仅包含注释的版本。这个工件排除了任何不需要的依赖于Jackson的类。请参阅使用不可变批注处理器时的示例Gradle配置:http://immutables.github.io/getstarted.html#android

票数 1
EN

Stack Overflow用户

发布于 2015-11-10 17:09:08

我还在一个Android项目中使用GSON。您可以尝试在android-proguard-example中找到的proguard配置。您必须将示例中的最后一行修改为项目中的模型类,这些模型类将使用GSON进行序列化。由于GSON的原因,我的proguard配置中确实有以下几行:

代码语言:javascript
复制
-keepattributes Signature
-keepattributes *Annotation*
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33626165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档