Android Kit Kat为什么需要使用isValidFragment?

Android Kit Kat为什么需要使用isValidFragment?,android,android-fragments,preferenceactivity,Android,Android Fragments,Preferenceactivity,自从KitKat发布以来,我注意到我的很多应用程序都在更新“修复KitKat中的崩溃”。最近,当我发布自己的应用程序时,我发现可能的原因是使用偏好活动的新“isValidFragment”要求。然而,我还没有找到任何人解释为什么突然需要这个新类来验证片段。有人能给我解释一下为什么需要这样做吗?摘自 一旦目标API级别为19或更高,您将需要在PreferenceActivity中重写isValidFragment(),以验证所提供的片段类名确实是应该显示的内容。即兴,这感觉像是处理安全漏洞的黑客

自从KitKat发布以来,我注意到我的很多应用程序都在更新“修复KitKat中的崩溃”。最近,当我发布自己的应用程序时,我发现可能的原因是使用偏好活动的新“isValidFragment”要求。然而,我还没有找到任何人解释为什么突然需要这个新类来验证片段。有人能给我解释一下为什么需要这样做吗?

摘自

一旦目标API级别为19或更高,您将需要在PreferenceActivity中重写isValidFragment(),以验证所提供的片段类名确实是应该显示的内容。即兴,这感觉像是处理安全漏洞的黑客

文件说


子类应重写此方法,并验证给定片段是否是要附加到此活动的有效类型。对于为早于KITKAT的android:targetSdkVersion构建的应用程序,默认实现返回true。对于更高版本,它将抛出异常

你得到了这个:


子类应重写此方法并验证给定的 fragment是要附加到此活动的有效类型。默认值 为构建的应用程序的实现返回true android:targetSdkVersion比KITKAT旧。对于更高版本,它 将引发异常


因此,只要您的targetSdk低于19,您就不必在意。如果是19,则您的应用程序将因异常而崩溃,除非您实现了
isValidFragment()

子类应覆盖此方法,并验证给定的片段是要附加到此活动的有效类型。对于为早于KITKAT的android:targetSdkVersion构建的应用程序,默认实现返回true。对于更高版本,它将抛出异常

Android框架中的一个新漏洞:碎片注入
我们最近披露了一个新的安卓安全漏洞 团队该漏洞影响了许多应用程序,包括设置(如 每个安卓设备上都有一个),Gmail,Google Now,DropBox 还有Evernote。更准确地说,任何扩展 使用导出的活动的PreferenceActivity类已自动删除 脆弱的Android KitKat中提供了一个补丁。如果你 不知道为什么你的代码现在被破坏了,这是由于Android KitKat 需要应用程序覆盖新方法的修补程序, PreferenceActivity.isValidFragment,已添加到 Android框架

此处:建议将其作为安全修复引入:

PreferenceActivity支持额外加载特定的 首选项将片段添加到活动中。这是大量使用的 设置应用程序,允许应用程序直接进入特定屏幕 (实际上是碎片)不幸的是,这本书没有任何逻辑 PreferenceActivity,以确保 应该是外部可访问的,通过这些额外的加载- 因此,添加了isValidFragment()。因此,一个精心制作的 Intent可以打开任何导出的PreferenceActivity并启动任何 在没有这种防御的情况下,优先权从中分离出来

(由我添加的粗体文本)