Android GoogleAnalyticsV2和Proguard

Android GoogleAnalyticsV2和Proguard,android,google-analytics,proguard,Android,Google Analytics,Proguard,我在我的项目中使用Google Analytics V2库 当我从Eclipse导出签名的应用程序包时,我在控制台中得到以下输出: Proguard returned with error code 1. See console Warning: com.google.analytics.tracking.android.FutureApis: can't find referenced method 'boolean setReadable(boolean,boolean)' in cla

我在我的项目中使用Google Analytics V2库

当我从Eclipse导出签名的应用程序包时,我在控制台中得到以下输出:

Proguard returned with error code 1. See console
  Warning: com.google.analytics.tracking.android.FutureApis: can't find referenced method 'boolean setReadable(boolean,boolean)' in class java.io.File
  Warning: com.google.analytics.tracking.android.FutureApis: can't find referenced method 'boolean setWritable(boolean,boolean)' in class java.io.File
        You should check if you need to specify additional program jars.
  Warning: there were 2 unresolved references to program class members.
           Your input classes appear to be inconsistent.
           You may need to recompile them and try again.
           Alternatively, you may have to specify the option 
           '-dontskipnonpubliclibraryclassmembers'.
  java.io.IOException: Please correct the above warnings first.
    at proguard.Initializer.execute(Initializer.java:321)
    at proguard.ProGuard.initialize(ProGuard.java:211)
    at proguard.ProGuard.execute(ProGuard.java:86)
    at proguard.ProGuard.main(ProGuard.java:492)
这是我的proguard.cfg

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-dontwarn android.support.**
-verbose
-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 com.android.vending.licensing.ILicensingService
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment

-keepclasseswithmembernames class * {
    native <methods>;
}

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

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

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class **.R$* {
  public static <fields>;
}

-keep class com.flurry.** { *; }
-dontwarn com.flurry.**

有什么提示吗?

我也遇到了这个问题。由于GA文档中还没有正式的解决方案,我制定了以下规则:

-keep class com.google.android.gms.analytics.**
-keep class com.google.analytics.tracking.**
-dontwarn com.google.android.gms.analytics.**
-dontwarn com.google.analytics.tracking.**

这也跳过了混淆,但这对于外部库来说应该不是问题。

初始警告表示FutureAPI调用文件#setReadable(布尔,布尔),该文件在您为构建指定的目标平台(显然是android-8或更早版本)上不存在。ProGuard可以忽略它,但如果该代码曾经在那些较旧的平台上执行过,这将是一个问题。Google Analytics的文档说明android-7已经足够了,所以可以忽略它

意外错误表示V4支持类AccessibilityDelegateCompatIcs$1扩展了Android类视图$AccessibilityDelegate,该视图在您为构建指定的目标平台(Android-13或更早版本)上不存在。在这种情况下,ProGuard确实需要该类来正确处理代码。如果类层次结构不完整,输出将是一团混乱


在编译发布版本时,可以通过在project.properties中指定较新的生成目标来解决这两个问题。缺少的类和方法将出现在相应的android.jar中,因此ProGuard将拥有它需要的所有信息。由于这些类只是用于编译/优化/模糊处理的运行时库类,因此它们不会影响输出。

我遇到了同样的问题—我在创建ank以供发布时能够抑制错误—但当应用程序崩溃时,在那些类被诅咒模糊器指向的地方。目前我还没有解决这个问题。有趣的是,当通过Eclipse运行应用程序时,在debage模式下,它工作得非常好。

我注意到您没有指定-librayjars?@SherifelKhatib我尝试过-librayjars./libs/{libu name}我不确定您是否在新版本的android工具中引入了默认的proguard选项。建议:在sdk管理器中更新android工具,并更新adt插件。创建一个新项目,并将所有资源移到新项目中。您将拥有一个文件proguard-project.txt。这个答案并不能解决询问者的问题,因为缺少的符号是在GAv2 jar中引用的,而不是在GAv2 jar中定义的。但是,它是GAv2的正确ProGuard定义,并将防止其他丢失的符号错误。我收回这一点。-dontwarn选项可能会在构建时隐藏丢失的符号错误(例如忘记导出jar,就像我所做的那样),这仍然会在运行时导致错误。
-keep class com.google.android.gms.analytics.**
-keep class com.google.analytics.tracking.**
-dontwarn com.google.android.gms.analytics.**
-dontwarn com.google.analytics.tracking.**