Android minifyEnabled可删除已用资产
我的资产文件夹中有一个目录,其中包含数据库的json assets/database/database_1/locations.jsonAndroid 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
当使用
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 )