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 true
和 useProguard 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 = true 时,应用程序无法使用 API
使用 Picasso 和 minifyEnabled 时应用程序崩溃 true