(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 且调试为 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
        }

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

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

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

在创建这些-keep 选项时尽量不要使用过多的通配符,这样可以让ProGuard 更好地缩减、优化和混淆代码。您可以使用 ProGuard Playground.

以直观的方式查看您的 -keep 规则的影响