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

Nur*_*Son 15 android proguard

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

[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)
Run Code Online (Sandbox Code Playgroud)

显然,org.xmlpull.v1.XmlPullParser不是程序类.我已将ProGuard更新到最新版本(4.6),但有相同的警告.

Med*_*aly 24

将此行添加到proguard-project.txt

-dontwarn org.xmlpull.v1.**
Run Code Online (Sandbox Code Playgroud)

这行到project.properties

proguard.config=proguard-project.txt
Run Code Online (Sandbox Code Playgroud)

  • 我找不到 proguard-project.txt 和 project.properties。我有两个 .properties 文件:- 1. local.properties 2. gradle.properties 。proguard-rules.pro 文件在 app 模块中可用 (2认同)
  • 我必须额外添加 `-dontwarn android.content.res.**` 来 proguard 来发布 aab。 (2认同)

Ton*_*Ton 9

我使用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
Run Code Online (Sandbox Code Playgroud)


Eri*_*une 1

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

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

  • 如果您的程序 jar 包含更好的实现,您确实应该尝试使用“-libraryjars android.jar(!org/xmlpull/v1/**)”过滤掉库版本,以便 ProGuard 获得干净的输入。如果不可能,您可以指定类似“-dontwarn org.xmlpull.v1.**”的内容。在这种情况下它应该可以工作,因为 ProGuard 使程序类优先于库类。 (2认同)