minifyEnabled 删除使用过的资产

Posted

技术标签:

【中文标题】minifyEnabled 删除使用过的资产【英文标题】:minifyEnabled removing used assets 【发布时间】:2018-06-23 13:06:41 【问题描述】:

我的资产文件夹中有一个目录,其中包含用于数据库的 json。

assets/database/database_1/locations.json

当使用minifyEnabled true 时,它会删除这些资产,因为它认为它们没有被使用。

我如何告诉 ProGuard 它们已被使用?

【问题讨论】:

【参考方案1】:

原来minifyEnabled true 没有删除任何资产,它只是为了代码优化和混淆剩余的类。

问题是我在没有@SerializableName 的情况下将 Gson 与我的数据库模型一起使用,并且由于混淆,它无法绑定值。

dataclass MyModel( val myName : String )

会变成:(或更模糊的东西)

dataclass XYZ( val 123 : String )

然后 Gson 找不到值“myName”来放置 JSON。

要解决这个问题,您有两个解决方案。

@SerializableName 添加到每个变量。 或者,如果您不关心混淆,例如使用开源应用程序, 您可以通过添加 useProguard false 来禁用该优化。

【讨论】:

应该是@SerializedName 而不是@SerializableName。但是感谢您为我指明了正确的方向!【参考方案2】:

做这种优化的不是 ProGuard。见https://developer.android.com/studio/build/shrink-code.html#keep-resources。话虽如此,资产不应该受到影响,只是资源。

【讨论】:

我正在测试这个,使用minifyEnabled true 会使应用程序崩溃,因为值为空。如果我添加标志useProguard false,应用程序将按预期运行。 minifyEnabled trueuseProguard false 使用内部实验缩小,而不是 ProGuard。这会禁用优化和混淆。另请参阅此答案***.com/questions/37007485/…您确定资产已消失吗?您是否使用过 APK Analyzer 来检查这一点?此外,这是否发生在发布版本、调试版本或两者上? 我意识到了问题所在。它为空不是因为它不存在,而是因为我使用的是 Gson,它无法通过它的名称找到它。【参考方案3】:

minifyEnabled=true 删除我存储在 assets 文件夹中的所有 gpx 文件。 使用 minifyEnabled=false 重建相同的项目会保留所有 gpx 文件 在资产 f

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。 这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker.

以上是关于minifyEnabled 删除使用过的资产的主要内容,如果未能解决你的问题,请参考以下文章

Android 因 minifyEnabled 和 AWS 调用而崩溃

当我使用 minifyEnabled 应用程序时不断崩溃

当我设置 minifyEnabled = true 时,应用程序无法使用 API

使用 Picasso 和 minifyEnabled 时应用程序崩溃 true

设置 minifyEnabled 为 true 时无法使用 GSON 解析 json 对象

仅针对外部库将“minifyEnabled”设置为“false”