Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.xmlpull.v1.XmlPullParser出现Android ProGuard错误_Android_Proguard - Fatal编程技术网

org.xmlpull.v1.XmlPullParser出现Android ProGuard错误

org.xmlpull.v1.XmlPullParser出现Android ProGuard错误,android,proguard,Android,Proguard,当我的应用程序使用ProGuard构建时,它会失败,并显示以下消息。 我使用Android SDK生成的默认proguard.cfg和一些-libraryjar。 我能为它做些什么 [2011-03-17 09:27:04 - MyProject] Proguard returned with error code 1. See console [2011-03-17 09:27:04 - MyProject] Note: there were 4247 duplicate class defi

当我的应用程序使用ProGuard构建时,它会失败,并显示以下消息。 我使用Android SDK生成的默认proguard.cfg和一些-libraryjar。 我能为它做些什么

[2011-03-17 09:27:04 - MyProject] Proguard returned with error code 1. See console
[2011-03-17 09:27:04 - MyProject] Note: there were 4247 duplicate class definitions.
[2011-03-17 09:27:04 - MyProject] Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.content.Intent depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.AnimationDrawable depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.BitmapDrawable depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject] Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser
[2011-03-17 09:27:04 - MyProject]       You should check if you need to specify additional program jars.
[2011-03-17 09:27:04 - MyProject] Warning: there were 9 instances of library classes depending on program classes.
[2011-03-17 09:27:04 - MyProject]          You must avoid such dependencies, since the program classes will
[2011-03-17 09:27:04 - MyProject]          be processed, while the library classes will remain unchanged.
[2011-03-17 09:27:04 - MyProject] java.io.IOException: Please correct the above warnings first.
[2011-03-17 09:27:04 - MyProject]   at proguard.Initializer.execute(Initializer.java:321)
[2011-03-17 09:27:04 - MyProject]   at proguard.ProGuard.initialize(ProGuard.java:211)
[2011-03-17 09:27:04 - MyProject]   at proguard.ProGuard.execute(ProGuard.java:86)
[2011-03-17 09:27:04 - MyProject]   at proguard.ProGuard.main(ProGuard.java:492)
显然,org.xmlpull.v1.XmlPullParser不是一个程序类。
我已将ProGuard更新为最新版本(4.6),但有相同的警告。

根据您提供的部分日志,Android运行时类org.xmlpull.v1.XmlPullParser已出现在您的程序代码中。您应该确保它不存在于bin/classes或lib中的某个jar中,因为它已经存在于库jar android.jar中


此外,您还有4247个重复的类定义。这可能是由于您提到的指定了“some-libraryjars”。我猜这些库jar已经自动包含在构建脚本中,因此您不应该再次指定它们。

我还没有通过eclipse for android运行proguard的解决方案,但是如果您从命令行手动运行proguard,您可以在
proguard.cfg
中添加以下内容:

-basedirectory /home/pjv/workspace/collectionista-repo/collectionista-main

-injars /tmp/android_4500371803543847111.jar
-injars libs/joda-time-1.6.jar(!META-INF/MANIFEST.MF)
-injars libs/FlurryAgent.jar(!META-INF/MANIFEST.MF)
-injars libs/veecheck-2.0.jar(!META-INF/MANIFEST.MF)
-injars libs/commons-lang-2.4.jar(!META-INF/MANIFEST.MF,!META-INF/NOTICE.txt,!META-INF/LICENSE.txt)
-injars libs/OIAbout-lib-temporary.jar(!META-INF/MANIFEST.MF)
-injars libs/libGoogleAnalytics.jar(!META-INF/MANIFEST.MF)
-injars libs/xstream-1.3.1.jar(!META-INF/MANIFEST.MF)
-injars libs/ZQL_custom.jar(!META-INF/MANIFEST.MF)
-injars libs/xpp3_min-1.1.4c.jar(!META-INF/MANIFEST.MF)
-injars libs/GoogleAdMobAdsSdk-4.1.0.jar(!META-INF/MANIFEST.MF)
-injars libs/bugsense-trace.jar(!META-INF/MANIFEST.MF)
-outjars /tmp/android_1348923171424559204.jar

-libraryjars /opt/android-sdk/android-sdk-linux_x86-1.6_r1/platforms/android-12/android.jar(!org/xmlpull/v1/XmlPullParser.class,!org/xmlpull/v1/XmlPullParserException.class)
注意如何从android API jar中过滤
XmlPullParser.class


现在不要担心与
XmlPullParser
相关的警告。首先修复错误和其他警告,如果必须,在
proguard.cfg

中使用
-ignorewarnings
,我认为您的jar包包括
XmlPullParser
类,android.jar也包括这一类。
因此,您可以删除jar包中的
org.xmlpull.*
类,然后重新构建。

将此行添加到proguard-project.txt

-dontwarn org.xmlpull.v1.**
这一行指向project.properties

proguard.config=proguard-project.txt

我使用proguard文件中的以下设置解决了此问题:

-dontwarn org.kobjects.**
-dontwarn org.ksoap2.**
-dontwarn org.kxml2.**
-dontwarn org.xmlpull.v1.**

-keep class org.kobjects.** { *; }
-keep class org.ksoap2.** { *; }
-keep class org.kxml2.** { *; }
-keep class org.xmlpull.** { *; }

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontoptimize
-dontpreverify

对我来说,我可以通过删除以前修改过的build.gradle来解决这个问题

我删除了:

     minifyEnabled true

     shrinkResources true
并恢复到原来的设置

minifyEnabled false

文件夹上已存在依赖项

排除它,如下所示:

dependencies {
  configurations {
      all*.exclude group: 'xmlpull', module: 'xmlpull'

  }
}

有时,当您将一个测试库作为常规模块依赖项包含时,会发生这种情况。例如,不要做:

implementation 'com.android.support.test:runner:1.0.2' //wrong!!
做:


Eric,他(或者在任何情况下,我)在他的libs中的jar中拥有XmlPullParser类的原因是,它将覆盖Android内置的XmlPullParser类,该类在某些用途上是不足的。由于我们在Android上构建proguard.cfg的方式,不可能过滤掉内置的proguard.cfg,我们也不想过滤掉更好的proguard.cfg。如果可能的话,推出我们自己的Android罐子似乎也不明智。我们应该如何处理这个问题??感谢如果您的程序jar包含更好的实现,您真的应该尝试使用“-libraryjars android.jar(!org/xmlpull/v1/**)”筛选出库版本,这样ProGuard就可以获得干净的输入。如果不可能,可以指定“-dontwarn org.xmlpull.v1.*.”之类的内容。在这种情况下它应该可以工作,因为ProGuard赋予程序类优先于库类的地位。你知道这是什么意思吗?以及可能如何做到这一点。“jar包”是什么意思?如何删除它?实现('com.thoughtworks.xstream:xstream:1.4.10-java7'){exclude(组:“xmlpull”)}不工作实现('com.squareup.Refught2:converter simplexml:2.6.0”){exclude模块:“simple xml”}请避免从您的同一答案共享链接复制粘贴@Ton,因为我必须添加以下两行,以使其正常工作-dontwarn org.codehaus.**和-keep class org.codehaus.*{*}@Ton我应该在哪里添加?proguard-project.txt文件您保留了很多不需要的内容。你也没有明确表示你真的需要保留任何东西。OP没有NoSuchMethod或ClassNotFound异常。我无法找到proguard-project.txt和project.properties。我有两个.properties文件:-1。本地物业。格拉德尔酒店。proguard-rules.pro文件在app module中有很多答案。在我的例子中,我必须使用您的答案和-keep class org.xmlpull.v1.*{*}应用程序在添加这一行时仍然会崩溃。您解决proguard问题的解决方案是关闭proguard吗?
androidTestImplementation 'com.android.support.test:runner:1.0.2' //right (: