Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 防止Proguard删除片段的空构造函数_Android_Constructor_Fragment_Proguard - Fatal编程技术网

Android 防止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

您知道,Fragment的所有子类都必须包含一个公共空构造函数,但当使用proguard时,这些构造函数将被删除。我已经指定了下面的命令,但仍然可以删除空构造函数。有人能帮我保留片段的空构造函数吗?谢谢你

-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