Android 外部jar的Proguard错误-返回错误代码1

Android 外部jar的Proguard错误-返回错误代码1,android,proguard,Android,Proguard,导出我的Android应用程序时,Proguard返回错误代码1。我正在我的应用程序中使用twitter4j外部JAR 我已经在proguard.cfg文件中添加了库jar、rt.jar(为此我下载了最新的jdk1.7,其中包含javax.management.*类)和dontwarn语句 我还包括了injars,libraryjars的声明 已更新 -optimizationpasses 5 -dontusemixedcaseclassnames -dontskipnonpubliclibra

导出我的Android应用程序时,Proguard返回错误代码1。我正在我的应用程序中使用twitter4j外部JAR

我已经在proguard.cfg文件中添加了库jar、rt.jar(为此我下载了最新的jdk1.7,其中包含javax.management.*类)和dontwarn语句

我还包括了injars,libraryjars的声明

已更新

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

#-injars bin/classes
#-injars libs
#-outjars bin/classes-processed.jar

-libraryjars <java.home>/jre/lib/rt.jar
-libraryjars <java.home>/lib/tools.jar
-libraryjars /libs/twitter4j-core-3.0.3.jar
-libraryjars /libs/twitter4j-media-support-3.0.3.jar
-libraryjars /libs/linkedin-j-android.jar
-libraryjars /libs/signpost-commonshttp4-1.2.jar
-libraryjars /libs/signpost-core-1.2.1.1.jar
-libraryjars /libs/signpost-jetty6-1.2.1.1.jar

-dontwarn org.apache.**
-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 class javax.**  { *; }
-keep class org.**  { *; }
-keep class twitter4j.**  { *; }
-keep class java.lang.management.**  { *; }
-keep class com.google.code.**  { *; }
-keep class oauth.signpost.**  { *; }

-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);
}

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

尝试添加发出警告的包,方法如下:

-dontwarn com.google.code.**
-dontwarn oauth.signpost.**
-dontwarn twitter4j.**
-dontwarn javax.management.**
-dontwarn javax.xml.**
-dontwarn org.apache.**
-dontwarn org.slf4j.**
出于某种原因,如果这不起作用,请尝试对类和接口名称执行相同的操作,方法如下:

-dontwarn com.google.code.**
-dontwarn oauth.signpost.**
-dontwarn twitter4j.**
-dontwarn javax.management.**
-dontwarn javax.xml.**
-dontwarn org.apache.**
-dontwarn org.slf4j.**

在集成Proguard时,我发现了一些东西,可能对您有帮助

1> 在使用Google的许可证验证库时,我们希望避免在附加库中混淆其他类。为此,我使用了proguard/config.txt文件:

**-keep class com.android.vending.licensing.ILicensingService**
2> 在使用Google api进行MapActivity时,我收到了警告:

找不到所有come.google.android.maps的引用类 类和“注意:配置指的是未知类 “com.google.android.maps”`

当我们使用GoogleAPI时,有一个额外的库用于构建程序。为此,我们需要调整路径

通常,SDK中只有android.jar。但是Google API添加了另一个库maps.jar,隐藏在android sdk windows\add-ons\addon\u Google\u API\u Google\u inc\u 8\libs\maps.jar中。我们需要将其添加到build.xml文件中。在build.xml中找到优化目标,并通过调整路径将以下粗体文本添加到proguard命令中:

<arg value="-libraryjars ${android.jar}"/>
<arg value="-libraryjars ${sdk.dir}/add-ons\addon_google_apis_google_inc_8\libs\maps.jar"/>


3> Ref:

对我有效的一件事是减少“优化过程”尝试2。

尝试将下一行添加到proguard文件中:

  -keep public class com.google.code.linkedinapi.**

  -keepclassmembers public class com.google.code.linkedinapi.client.impl.LinkedInApiXppClient {
     public <init>(java.lang.String, java.lang.String);
   }
-保留公共类com.google.code.linkedinapi**
-keepclassmembers公共类com.google.code.linkedinapi.client.impl.LinkedInApiXppClient{
public(java.lang.String、java.lang.String);
}

并加上

-keep class twitter4j.**
-keepclassmembers class twitter4j.** {
    <init>(...);
    <methods>;
    <fields>;
}
-保持类twitter4j**
-keepclassmembers类twitter4j.**{
(...);
;
;
}
这也是一个好主意

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}
-keepclassmembers class **.R$* {
    public static <fields>;
}
-keep public class*扩展了android.view.view{
public(android.content.Context);
public(android.content.Context、android.util.AttributeSet);
public(android.content.Context,android.util.AttributeSet,int);
公共无效集*(…);
}
-keepclassmembers类**.R$*{
公共静态;
}

我想Android不支持JDK1.7,这可能是你的问题

给定这些
-dontwarn
选项,您无法从您的构建中获得这些警告。您应该仔细检查是否正在编辑正确的配置文件(
proguard project.txt
从Android SDK r20开始)。

非常感谢您所做的一切。经过这么多的努力,我终于发现了我愚蠢的错误。我在project.properties中配置了错误的配置文件

我正在更改proguard.cfg中的代码,但project.properties文件包含错误的配置文件路径,即

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
已修复此更改:

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard.cfg
proguard.cfg工作版本

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

-injars bin/classes
-injars libs
-outjars bin/classes-processed.jar

-libraryjars C:/glassfish3/jdk7/jre/lib/rt.jar 
-libraryjars C:/glassfish3/jdk7/lib/tools.jar

-dontwarn org.apache.**
-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 class javax.**  { *; }
-keep class org.**  { *; }
-keep class twitter4j.**  { *; }
-keep class java.lang.management.**  { *; }
-keep class com.google.code.**  { *; }
-keep class oauth.signpost.**  { *; }

-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);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
-优化过程5
-dontusemixedcaseclassnames
-DontskipnonPublicLibraryClass
-dontskipnonpubliclibraryclassmembers
-不要翻转
-dontshrink
-冗长的
-injars箱/类
-injars libs
-outjars bin/classes-processed.jar
-libraryjars C:/glassfish3/jdk7/jre/lib/rt.jar
-libraryjars C:/glassfish3/jdk7/lib/tools.jar
-dontwarn org.apache**
-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.路标**
-dontwarn twitter4j**
-优化!代码/简化/算术,!字段/*,!类/合并/*
-keep public class*扩展android.app.Activity
-keep public class*扩展android.app.Application
-keep public class*扩展了android.app.Service
-keep public class*扩展了android.content.BroadcastReceiver
-keep public class*扩展了android.content.ContentProvider
-keep public class*扩展了android.app.backup.BackupAgentHelper
-keep public class*扩展了android.preference.preference
-保持公共类com.android.vending.licensing.ILicensingService
-保留公共类com.google.code.linkedinapi**
-保持类javax.*{*;}
-保持类组织。**{*;}
-保持类twitter4j.*{*;}
-保持类java.lang.management.*{*;}
-保持类com.google.code.*{*;}
-保持类oauth.signpost.*{*;}
-keepclassmembers公共类com.google.code.linkedinapi.client.impl.LinkedInApiXppClient{
public(java.lang.String、java.lang.String);
}
-KeepClassSwithMemberNames类*{
本地人;
}
-KeepClassSwithMemberNames类*{
public(android.content.Context、android.util.AttributeSet);
}
-KeepClassSwithMemberNames类*{
public(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembers枚举*{
公共静态**[]值();
公共静态**valueOf(java.lang.String);
}
-keep class*实现android.os.Parcelable{
公开静态最终android.os.Parcelable$Creator*;
}
我收到一个“Proguard返回,错误代码为1。请参阅控制台”错误。在我的例子中,问题出在ADT用来启动proguard的“sdk\tools\proguard\bin\proguard.bat”文件中。它包含行“java-jar”%PROGUARD\u HOME%“\lib\PROGUARD.jar%*”。在我的环境中,简单的命令“java”不起作用。我从不使用它,因为我在不同的环境中指定了特定的JVM


无论如何,将“java”更改为JDK 1.7 bin\java.exe的绝对路径解决了问题。

发布完整的logcat消息感谢您的快速回复。您可以看到完整的logcat和pro