如何防止 R8 在发布版本中删除公共 Compose Preview 方法?

How to prevent R8 from removing public Compose Preview methods in release builds?

提问人:Marat 提问时间:9/28/2023 更新时间:9/29/2023 访问量:108

问:

我正在使用 Airbnb/Showkase 库将所有预览收集到目录中,并且正在探索将该目录浏览器活动的入口点放在应用程序生产版本的管理设置页面的某个位置的想法。

当我运行调试版本时,Showkase 确实会收集所有 compose 预览方法并显示它们。但是在发布版本中,这些方法被删除,因此在目录中无法显示任何内容。

有没有办法让 R8 在发布版本中保留 Compose Preview 方法?也许是某种保护规则?

安卓 android-jetpack-compose proguard android-r8

评论

0赞 sgjesse 9/29/2023
通常,开发人员希望确保其预览版包含在发布应用中,请参阅 issuetracker.google.com/301414595issuetracker.google.com/262333722。无需测试,您也许可以使用类似以下规则的内容:.不确定这是否会提供您想要的东西,但它会保留用 .-keep class * { @androidx.compose.ui.tooling.preview.Preview <methods>; }@Preview
0赞 sgjesse 9/29/2023
对不起,建议的保留规则会保留太多,请尝试。-keepclasseswithmembers class * { @androidx.compose.ui.tooling.preview.Preview <methods>; }

答:

1赞 Derek K 9/29/2023 #1

Showkase 库的自述文件提到了在使用 Proguard 时添加以下规则:

-keep public class * extends com.airbnb.android.showkase.models.ShowkaseProvider

应该不需要额外保留所有 Preview 批注方法。