8

我遇到了几个带有这些行的proguard示例:

# Keep the BuildConfig
-keep class com.example.BuildConfig { *; }

我已经在有和没有这条线的情况下运行了应用程序(当然,使用我的包)并且没有发现任何差异。我还查看了 generated/.../BuildConfig.java 也没有任何变化。

为什么我需要将我的 BuildConfig 保存在 ProGuard 中?

谢谢!

4

3 回答 3

5

BuildConfig 包含许多在编译时设置的有用值。具体如下:

boolean DEBUG – if the build is debuggable.
int VERSION_CODE
String VERSION_NAME
String APPLICATION_ID
String BUILD_TYPE – name of the build type, e.g. "release"
String FLAVOR – name of the flavor, e.g. "paidapp"

您还可以设置自己的配置值,例如用于测试和生产的不同 url,并从 BuildConfig 文件中检索它们,而不是维护您自己的 Config.java 文件。这可以通过将 buildConfigFields 添加到您的 gradle buildTypes 来完成,如下所示:

buildTypes {
    debug {
        buildConfigField "boolean", "SOME_VAR", "true"
    }
    release {
        buildConfigField "boolean", "SOME_VAR", "false"
    }
}

因此,要回答您的问题,据我所知,您不必保留该文件,但这样做并将其用于您的配置需求是一种很好的做法。

于 2016-04-25T12:24:51.233 回答
3

与任何其他类一样,-keep如果您通过反射间接访问它,则需要该类,因此 ProGuard 不会混淆它或将其优化为未使用。

大多数情况下,访问模式BuildConfig是直接的,没有反射,所以在这些情况下,让 ProGuard 处理你的BuildConfig.

于 2016-04-25T12:48:41.630 回答
0

一些像ACRA这样的崩溃报告库确实BuildConfig通过反射访问,所以如果你使用一个并且想在你的崩溃报告中获得它的信息,你应该-keep这样做。

于 2020-05-19T10:54:20.353 回答