Android setContentView正在使用非SDK接口

Android setContentView正在使用非SDK接口,android,sdk,android-emulator,Android,Sdk,Android Emulator,当我使用API 28在模拟器中运行应用程序时,控制台会向我发出以下警告: W/OARISTACHIMANE:访问隐藏方法 Landroid/视图/视图;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (浅灰色列表,反射)W/oaristachine:访问隐藏方法 Landroid/视图/视图组;->makeOptionalFitsSystemWindows()V(灯光 灰色列表(反射) 我一直在

当我使用API 28在模拟器中运行应用程序时,控制台会向我发出以下警告:

W/OARISTACHIMANE:访问隐藏方法 Landroid/视图/视图;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (浅灰色列表,反射)W/oaristachine:访问隐藏方法 Landroid/视图/视图组;->makeOptionalFitsSystemWindows()V(灯光 灰色列表(反射)


我一直在调试它,发现它来自调用:
setContentView(R.layout.activity\u main)
,那么,是否有其他方法来设置活动的布局,或者该方法是否将被更新,以便在使用android API 28的设备上运行时不会抛出该警告?

这只是一个
警告

你应该看报纸

Android 9(API级别28)对非SDK接口的使用引入了新的限制,无论是直接、通过反射还是通过JNI。每当应用程序引用非SDK接口或试图使用反射或JNI获取其句柄时,就会应用这些限制。有关此决定的更多信息,请参阅

一般来说,应用程序应该只使用SDK中正式记录的类部分。特别是,这意味着您不应该计划在通过反射等语义与类交互时访问SDK中未列出的方法或字段


传递给
setContentView()
的布局id很可能包含来自使用非SDK接口的第三方库的某些视图。这个警告告诉你这正在发生,但你所能做的就是

  • 等待第三方修复其库
  • 从布局中删除这些第三方视图

就目前而言,这只是一个警告;实际上不会有什么坏事发生。但在未来的Android版本中,这可能会成为一个真正的问题。系统只是给您时间来解决问题。

对于问题中的警告,
ComputeFitsSystemWindows
makeOptionalFitsSystemWindows
实际上由支持库或androidx库通过反射使用。您只需在
appcompatedelegateimpl
中搜索这两个方法即可验证它

希望以后能解决这个问题

更新1

最近,当我在Firebase测试实验室测试应用程序时,这两个API和其他一些API都被标记了

出现此警告的一个可能的根本原因是Google拥有的library UI Toolkit。此时无需采取任何行动

出现此警告的一个可能的根本原因是谷歌拥有的图书馆Android WebView。此时无需采取任何行动


对于那些在Android 9(Pie,API 28)上访问隐藏方法XYZ的用户:

安卓9中列出的一些方法在安卓10中被列入白名单。在寻找greylisted方法的任何替代方法之前,请检查

这不适用于OP问题中的方法(
ComputeFitsSystemWindows
makeOptionalFitsSystemWindows
),但可能会在未来的Android版本中发生变化

另请参见以下内容:

Android 9(API级别28)中的灰色列表中的非SDK接口,现在在Android 10(API级别29)中受到限制只要可能,在接口名称后的注释中建议使用替代API。

例如,Android 9 light greylist filter报告的所有常用方法:

Accessing hidden method Landroid/graphics/drawable/Drawable;->getOpticalInsets()Landroid/graphics/Insets; (light greylist, linking)
Accessing hidden field Landroid/graphics/Insets;->left:I (light greylist, linking)
Accessing hidden field Landroid/graphics/Insets;->right:I (light greylist, linking)
Accessing hidden field Landroid/graphics/Insets;->top:I (light greylist, linking)
Accessing hidden field Landroid/graphics/Insets;->bottom:I (light greylist, linking)

现在已在Android 10中被列入白名单,因此可以安全地忽略logcat警告(至少在Android 11再次以灰色列出它们之前:)。

我遇到了这个问题。我刚刚将我的
buildToolsVersion
targetSdkVersion
所有依赖项
升级到了最新版本,现在问题似乎已经解决了。

发布应用程序时,谷歌Play控制台中也会出现此类警告。它们在发射前报告中显示为“稳定性”警告


现在,它们是可以忽略的,因为它们超出了你的控制范围。如果在某个时候谷歌更新了他们的SDK不使用反射,这些警告将消失。

你应该至少显示正在崩溃的类,以便我们可以查看代码。现在是2020年9月,我仍然收到最新的依赖项消息。我的内容视图肯定只包含android提供的视图类。2021年2月,这些警告仍然。。。我也收到了同样的警告。只是对未来的更新发表评论。这里也是,2021年4月2日。我想他们一定是无害的。我现在不会为他们担心。2021年4月2日,Android PHey@i_oi也来到这里,需要帮助解决Renderscript兼容性问题。我想我会继续忽略发布前的报告。