Android minifyEnabled可删除已用资产

Android minifyEnabled可删除已用资产,android,android-gradle-plugin,android-proguard,Android,Android Gradle Plugin,Android Proguard,我的资产文件夹中有一个目录,其中包含数据库的json assets/database/database_1/locations.json 当使用minifyEnabled true时,它会删除这些资产,因为它认为这些资产没有被使用 我如何告诉ProGuard他们被使用了 谢谢。做这种优化的不是ProGuard。看见也就是说,资产不应该受到影响,只应该受到资源的影响。事实证明,minifyEnabled true不会删除任何资产,它只用于代码优化并混淆其余的类 问题是,我在没有@Serializa

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

assets/database/database_1/locations.json


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

我如何告诉ProGuard他们被使用了


谢谢。

做这种优化的不是ProGuard。看见也就是说,资产不应该受到影响,只应该受到资源的影响。

事实证明,
minifyEnabled true
不会删除任何资产,它只用于代码优化并混淆其余的类

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

dataclass MyModel( val myName : String )
会变成:(或者更模糊的东西)

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

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

  • 向每个变量添加
    @SerializableName
  • 或者如果你不喜欢混淆,比如开源应用程序, 您可以通过添加
    useProguard false
    来禁用该优化

我正在测试这个,使用
minifyEnabled true
会使应用程序由于值为null而崩溃。如果我添加标志
useProguard false
,应用程序将按预期工作。
minifyEnabled true
useProguard false
使用内部实验缩小,而不是ProGuard。这将禁用优化和模糊处理。另请参见此答案您确定资产已丢失吗?您是否已使用APK Analyzer检查此问题?另外,这是发生在发布版本、调试版本还是两者都有?我意识到了问题所在。它是空的,不是因为它不存在,而是因为我使用的是Gson,它无法通过它的名称找到它。
dataclass XYZ( val 123 : String )