繁体   English   中英

(ClassNotFoundException/Android) Proguard 在发布版本中删除了 rome dex。 它是proguard吗?

[英](ClassNotFoundException/Android) Proguard removing rome dex on release build. Is it proguard?

我有一个使用 Rome for rss 的 Android 项目,在使用调试版本时效果很好(请参阅下面的内容)。 但是当我切换到发布时,它给了我:

java.lang.ClassNotFoundException: Didn't find class "com.rometools.rome.feed.synd.impl.ConverterForAtom10" on path: DexPathList[[zip file "/data/app/~~KaWHVUAFHxJthThQtBTQVg==/com.theredspy15.thanelocker-Yv1ajdDGETGskLhAp9OAmw==/base.apk"],nativeLibraryDirectories=[/data/app/~~KaWHVUAFHxJthThQtBTQVg==/com.theredspy15.thanelocker-Yv1ajdDGETGskLhAp9OAmw==/lib/arm64, /system/lib64, /system/system_ext/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)

随着:

java.lang.ClassNotFoundException: com.rometools.rome.feed.synd.impl.ConverterForAtom10

该错误还提到了这一行:

feed = input.build(new XmlReader(new URL(url)));

我的构建类型:(通常启用 minify 和 debug 为 false)

debug {
            minifyEnabled false
            shrinkResources false
            debuggable true
            signingConfig signingConfigs.debug
        }

release {
            minifyEnabled false
            shrinkResources true
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

我最好的猜测是 proguard 正在删除它不应该删除的东西。 我在 android studio 中使用默认的 proguard 规则文件。 一切都是最新版本,如果它与 proguard 规则有关,我不知道如何让 Rome 在这种情况下在调试和发布构建类型上工作

下面的 -keep 选项应该可以解决问题,它可以防止 ProGuard 删除类并重命名它。 之后您可能会看到不同类和方法的类似问题出现,您还需要为这些问题添加 -keep 选项。

-keep class com.rometools.rome.feed.synd.impl.ConverterForAtom10

在创建这些 -keep 选项时,尽量不要使用太多通配符,这将使 ProGuard 能够更好地缩小、优化和混淆代码。 您可以使用ProGuard Playground以可视方式查看您的 -keep 规则的影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM