Android 防止Proguard删除片段的空构造函数
您知道,Fragment的所有子类都必须包含一个公共空构造函数,但当使用proguard时,这些构造函数将被删除。我已经指定了下面的命令,但仍然可以删除空构造函数。有人能帮我保留片段的空构造函数吗?谢谢你Android 防止Proguard删除片段的空构造函数,android,constructor,fragment,proguard,Android,Constructor,Fragment,Proguard,您知道,Fragment的所有子类都必须包含一个公共空构造函数,但当使用proguard时,这些构造函数将被删除。我已经指定了下面的命令,但仍然可以删除空构造函数。有人能帮我保留片段的空构造函数吗?谢谢你 -keepclassmembers public class * extends android.support.v4.app.Fragment { public <init>(***); #public <init>(); //already tried
-keepclassmembers public class * extends android.support.v4.app.Fragment {
public <init>(***);
#public <init>(); //already tried this
}
-keepclassmembers public class * extends com.xxx.MyFragment {
public <init>(***);
#public <init>(); //already tried this
}
-keepclassmembers公共类*扩展了android.support.v4.app.Fragment{
公众(***);
#public();//已尝试此操作
}
-keepclassmembers公共类*扩展com.xxx.MyFragment{
公众(***);
#public();//已尝试此操作
}
这应该可以:
-keepclassmembers public class * extends android.support.v4.app.Fragment {
public <init>(...);
因为保留类将迫使proguard保留默认构造函数 我不使用第二个选项,因为我不想保留所有片段子类。对于第一个选项,我在反编译时仍然没有看到空的构造函数。哦,谢谢你的回答。你不必担心是否会看到构造函数。如果您只提供一个默认的空构造函数,那么可以删除它:它将由java编译器添加。SDK创建您的片段时应该不会有问题。您在运行时遇到过任何问题吗?第二个设置确实足够了;它将保留所有扩展,并自动保留它们的无参数构造函数(假设它们存在于原始类中)。我认为如果没有提供空构造函数会有问题,因为我以前经历过这种情况,当片段重新创建时,应用程序将崩溃或以旧数据启动(如果onSaveInstanceState未被重写)。有没有办法在不保留整个片段的情况下保留空构造函数?我从Android Studio 3.5.x更新到3.6.1的观察结果是:新的R8开始以完全模式清除构造函数,需要禁用它。
-keep public class * extends android.support.v4.app.Fragment