【发布时间】:2018-06-23 13:06:41
【问题描述】:
我的资产文件夹中有一个目录,其中包含用于数据库的 json。
assets/database/database_1/locations.json
当使用minifyEnabled true 时,它会删除这些资产,因为它认为它们没有被使用。
我如何告诉 ProGuard 它们已被使用?
【问题讨论】:
标签: android android-gradle-plugin proguard
我的资产文件夹中有一个目录,其中包含用于数据库的 json。
assets/database/database_1/locations.json
当使用minifyEnabled true 时,它会删除这些资产,因为它认为它们没有被使用。
我如何告诉 ProGuard 它们已被使用?
【问题讨论】:
标签: android android-gradle-plugin proguard
原来minifyEnabled true 没有删除任何资产,它只是为了代码优化和混淆剩余的类。
问题是我在没有@SerializableName 的情况下将 Gson 与我的数据库模型一起使用,并且由于混淆,它无法绑定值。
dataclass MyModel( val myName : String )
会变成:(或更模糊的东西)
dataclass XYZ( val 123 : String )
然后 Gson 找不到值“myName”来放置 JSON。
要解决这个问题,您有两个解决方案。
@SerializableName 添加到每个变量。useProguard false 来禁用该优化。【讨论】:
@SerializedName 而不是@SerializableName。但是感谢您为我指明了正确的方向!
做这种优化的不是 ProGuard。见https://developer.android.com/studio/build/shrink-code.html#keep-resources。话虽如此,资产不应该受到影响,只是资源。
【讨论】:
minifyEnabled true 会使应用程序崩溃,因为值为空。如果我添加标志useProguard false,应用程序将按预期运行。
minifyEnabled true 和 useProguard false 使用内部实验缩小,而不是 ProGuard。这会禁用优化和混淆。另请参阅此答案stackoverflow.com/questions/37007485/…您确定资产已消失吗?您是否使用过 APK Analyzer 来检查这一点?此外,这是否发生在发布版本、调试版本或两者上?
minifyEnabled=true 删除我存储在 assets 文件夹中的所有 gpx 文件。 使用 minifyEnabled=false 重建相同的项目会保留所有 gpx 文件 在资产 f
【讨论】: