Release模式启用Sdk Assemblies Only,开启Pro Guard/Multi Dex时Java.exe报错代码1的原因
我来帮你梳理下这个Release模式下的编译错误可能的几个原因,都是基于Android/Xamarin编译场景的常见问题总结的:
ProGuard 规则冲突或缺失
当启用Sdk Assemblies Only模式时,应用仅引用SDK程序集,但ProGuard的默认规则可能未覆盖你实际用到的SDK内部类/方法,或者自定义的proguard.cfg规则存在错误(比如误混淆了SDK中必要的类)。尤其在开启MultiDex后,ProGuard处理dex拆分时,规则问题容易导致类查找失败或混淆错误,最终触发Java编译进程异常退出。
排查建议:检查proguard.cfg文件,添加AndroidX、Support库等必要SDK类的保留规则;先尝试使用默认ProGuard规则,排除自定义规则的问题。MultiDex 配置适配问题
Sdk Assemblies Only模式下应用依赖结构更精简,但MultiDex的配置可能未适配这种模式。比如multiDexKeepFile或multiDexKeepProguard中指定的类在该模式下不存在,或者主dex未正确包含启动必需的类(如Application类、入口类)。当ProGuard与MultiDex同时启用时,若主dex类被错误混淆或未被纳入,就会引发编译错误。
排查建议:检查MultiDex相关配置文件,确保主dex包含所有启动类;尝试手动指定主dex类列表,验证是否解决问题。SDK/构建工具版本不兼容
Sdk Assemblies Only模式对SDK和构建工具的版本兼容性要求更高,同时启用ProGuard和MultiDex时,若Android SDK Build Tools版本过旧,或目标SDK与编译SDK版本不匹配,可能导致工具链出错,进而出现Java.exe退出码1的问题。
排查建议:将Android SDK Build Tools更新至最新稳定版,确保目标SDK与编译SDK版本一致;同时检查Xamarin.Android版本是否为最新,修复工具链可能存在的bug。构建缓存残留问题
切换编译模式(如从Full切换到Sdk Assemblies Only)后,旧的构建缓存残留可能引发冲突。开启ProGuard和MultiDex时会生成更多中间文件,残留缓存可能导致Java编译时出现资源或类找不到的情况。
排查建议:清理项目的bin、obj文件夹,或在IDE中执行Clean Solution操作,之后重新构建项目。
内容的提问来源于stack exchange,提问作者chosenOne Thabs

