带proguard的领域发布生成失败-找不到io.Realm.RealmHelper

带proguard的领域发布生成失败-找不到io.Realm.RealmHelper,realm,Realm,我们正准备发布第一个带有realm的应用程序,并且,哦,终于尝试了发布版本。在启用proguard之前,一切正常,然后应用程序在启动时崩溃,原因是: java.lang.RuntimeException:无法启动活动组件信息{com.example/com.example.activities.IntroActivity}:io.realm.Exception.RealmException:找不到io.realm.RealmHelper$ManifestModuleMediator ... 原

我们正准备发布第一个带有realm的应用程序,并且,哦,终于尝试了发布版本。在启用proguard之前,一切正常,然后应用程序在启动时崩溃,原因是:


java.lang.RuntimeException:无法启动活动组件信息{com.example/com.example.activities.IntroActivity}:io.realm.Exception.RealmException:找不到io.realm.RealmHelper$ManifestModuleMediator
...
原因:io.realm.exceptions.RealMeException:找不到io.realm.RealmHelper$ManifestModuleMediator
在io.realm.y.a(未知来源)
在io.realm.y.a(未知来源)
在io.realm.y(未知源)
在io.realm.y(未知源)
在io.realm.z.a(未知源)
位于com.example.realm.RealmHelper.a(未知源)
位于com.example.activities.IntroActivity.onCreate(未知源)

我们正在使用领域推荐的proguard设置,即:


-保留类io.realm.annotations.RealmModule
-保留@io.realm.annotations.RealmModule类*
-keep类io.realm.internal.keep
-keep@io.realm.internal.keep class*{*;}
-DontwarnJavax**
-dontwarn io.realm**

有什么建议吗?不幸的是我们没有任何proguard巫师

FWIW,我尝试将这一行添加到proguard配置中:


-保持类io.realm.*{*;}

将跟踪更改为:


java.lang.RuntimeException:无法启动活动组件信息{com.example/com.example.activities.IntroActivity}:io.realm.Exception.RealmException:找不到io.realm.RealmHelper$ManifestModuleMediator
...
原因:io.realm.exceptions.RealMeException:找不到io.realm.RealmHelper$ManifestModuleMediator
位于io.realm.RealmConfiguration.getModuleMediator(未知源)
位于io.realm.RealmConfiguration.createSchemaMediator(未知源)
在io.realm.RealmConfiguration。(未知源)
在io.realm.RealmConfiguration。(未知源)
位于io.realm.RealmConfiguration$Builder.build(未知源)
位于com.example.realm.RealmHelper.a(未知源)
位于com.example.activities.IntroActivity.onCreate(未知源)
位于android.app.Activity.performCreate(Activity.java:6251)


不确定这是否有帮助…

我们可以通过将两个@RealmModule类拆分为单独的文件来解决这个问题。也就是说,我们从出发:

RealmHelper.java

realm/modules/ManifestModule.java

和realm/modules/puzzleStateModel.java

RealmHelper.java


我不知道有什么魔法没有发生在一个文件上,两个文件都能正常工作,为什么Proguard用一种方式或另一种方式推动它,但它似乎又能工作了

您使用的是哪个版本的Realm?而且听起来可能注释处理器没有运行。如果查看Gradle输出,是否会看到类似以下内容的行:
注意:处理XXX
。如果这些不存在,则表示注释处理器未运行。Realm 0.88.2。事实上,注释处理器并不总是在运行,但我不确定这是否只是优化,因为我并不总是先执行“清理”或其他操作。仅供参考,我们按照我下面给出的答案进行了操作。然而,这也许是巧合?请随意编辑、替换、添加其他内容,我会将其标记为正确。我怀疑这里有一个更大的问题,我只是不知道:)谢谢你的快速反应!王国岩石!!
@RealmModule(classes = {Publisher.class, Puzzle.class, Volume.class, VolumeSet.class})
public static class ManifestModule {
}

@RealmModule(classes = {PuzzleMove.class, PuzzleState.class, VolumeState.class})
public static class PuzzleStateModule {
}
@RealmModule(classes = {Publisher.class, Puzzle.class, Volume.class, VolumeSet.class})
public class ManifestModule {
}
@RealmModule(classes = {PuzzleMove.class, PuzzleState.class, VolumeState.class})
public class PuzzleStateModule {
}
import com.example.realm.modules.ManifestModule;
import com.example.realm.modules.PuzzleStateModule