使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是不是仍然适用?
Posted
技术标签:
【中文标题】使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是不是仍然适用?【英文标题】:Is "@Keep support annotation" rule in proguard-android-optimize.txt still applicable when using AndroidX?使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是否仍然适用? 【发布时间】:2020-03-01 09:59:31 【问题描述】:通常将proguard-android-optimize.txt
应用为proguard 文件。
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-project.txt'
但是,当我浏览proguard-android-optimize.txt
的内容时
...
-keepclassmembers class **.R$*
public static <fields>;
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
# Understand the @Keep support annotation.
-keep class android.support.annotation.Keep
-keep @android.support.annotation.Keep class * *;
-keepclasseswithmembers class *
@android.support.annotation.Keep <methods>;
-keepclasseswithmembers class *
@android.support.annotation.Keep <fields>;
-keepclasseswithmembers class *
@android.support.annotation.Keep <init>(...);
我想知道,如果我们使用 AndroidX 而不是支持库,这样的规则是否仍然适用?我们是否应该在我们的项目proguard-project.txt
中明确添加以下规则?
# Understand the @Keep support annotation.
-keep class androidx.annotation.Keep
-keep @androidx.annotation.Keep class * *;
-keepclasseswithmembers class *
@androidx.annotation.Keep <methods>;
-keepclasseswithmembers class *
@androidx.annotation.Keep <fields>;
-keepclasseswithmembers class *
@androidx.annotation.Keep <init>(...);
【问题讨论】:
【参考方案1】:我刚刚检查了它并用androidx.annotation.Keep
注释类保留了它们。无需额外配置。
【讨论】:
【参考方案2】:如果你不使用proguard-android-optimize.txt或proguard-android.txt,你应该添加
-keep class androidx.annotation.Keep *;
或者,您的@Keep
将转向@a
如果您使用 proguard-android-optimize.txt 或 proguard-android.txt,它仍然可以工作。
希望它对你有用。
【讨论】:
以上是关于使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是不是仍然适用?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Material Components 和 androidX 编译 Android 应用程序时出错
使用 AndroidX 时,proguard-android-optimize.txt 中的“@Keep 支持注释”规则是不是仍然适用?
androidx.paging.DataSource.Factory 时 Room 不检索数据(使用 LiveData + Kotlin Coroutines)
在迁移到 viewpager2 androidx 时发现此错误“无法解析方法 'super(androidx.fragment.app.FragmentManager)'”
带有 --androidx 的新 Flutter 项目出现 AndroidX 不兼容错误
AndroidX迁移-androidx.legacy:legacy-support-v4或androidx.appcompat:appcompat