渲染问题:在渲染过程中引发异常:com.android.ide.common.rendering.api.LayoutlibCallback

154

在使用Android Studio(版本1.5.1)创建项目时,我遇到了问题。

以下是我的操作步骤:

  • 打开Android Studio。
  • 创建一个没有任何活动的新项目。
  • 创建一个空白活动。

在预览模式中可能会出现问题:

我收到以下消息:

Rendering Problems Exception raised during rendering: com.android.ide.common.rendering.api.LayoutlibCallback.getXmlFileParser(Ljava/lang/String;)Lorg/xmlpull/v1/XmlPullParser;

堆栈跟踪中:

java.lang.NoSuchMethodError: com.android.ide.common.rendering.api.LayoutlibCallback.getXmlFileParser(Ljava/lang/String;)Lorg/xmlpull/v1/XmlPullParser;
    at com.android.layoutlib.bridge.impl.ResourceHelper.getInternalComplexColor(ResourceHelper.java:146)
    at com.android.layoutlib.bridge.impl.ResourceHelper.getColorStateList(ResourceHelper.java:231)
    at android.content.res.BridgeTypedArray.getColorStateList(BridgeTypedArray.java:308)
    at android.widget.TextView.<init>(TextView.java:776)
    at android.widget.TextView.<init>(TextView.java:705)
    at android.widget.TextView.<init>(TextView.java:701)
    at com.android.layoutlib.bridge.MockView.<init>(MockView.java:50)
    at com.android.layoutlib.bridge.MockView.<init>(MockView.java:45)
    at com.android.layoutlib.bridge.MockView.<init>(MockView.java:41)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:163)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
    at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:858)
    at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:70)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:834)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at com.android.layoutlib.bridge.bars.CustomBar.<init>(CustomBar.java:95)
    at com.android.layoutlib.bridge.bars.StatusBar.<init>(StatusBar.java:67)
    at com.android.layoutlib.bridge.impl.Layout.createStatusBar(Layout.java:222)
    at com.android.layoutlib.bridge.impl.Layout.<init>(Layout.java:144)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:213)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:426)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:510)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:498)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:498)
    at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72)
    at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:610)
    at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:607)
    at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:362)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:607)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:629)
    at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
    at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:351)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

可能存在什么问题?

5个回答

414

我在几分钟前进行了一些更新后遇到了相同的问题,我解决渲染问题所做的是将Android Studio用于渲染布局的安卓版本改回“API 23: Android 6.0”。

Android studio


5
可以,同时最好取消勾选“自动选择最佳”,因为它只会选择最新的版本。您应该手动选择您希望进行预览的 SDK 版本。 - Abhishek
我已经完成了这个,但现在出现了以下错误。无法解析资源 @android:color/background_material_light - Martin Hoban
只是提醒:这是一个经常出现的问题。 - marciowb
但是,为什么在API级别设置为24时会出现这个问题?而在23中为什么没有呢? - Jay Donga

19
java.lang.NoSuchMethodError: com.android.ide.common.rendering.api.LayoutlibCallback.getXmlFileParser(Ljava/lang/String;)Lorg/xmlpull/v1/XmlPullParser;是指当应用程序尝试调用类(静态或实例)的指定方法,而该类不再具有该方法的定义时抛出。通常,编译器会捕获此错误;如果类的定义发生了不兼容的更改,则此错误只能在运行时发生。您的应用程序必须针对Android 6.0(API级别23)进行目标设置,以启用此行为;您无需添加任何其他代码。只需在预览部分中选择“API 23:Android 6.0”。enter image description here

3

当我在Ubuntu 14.04上安装Android Studio 2.1时,遇到了同样的问题。即使是显示用于渲染布局的Android版本的Android机器人图标也只显示API Level 24版本,没有其他版本。

我必须通过导航到以下路径来启用API 23进行下载:

工具 -> SDK管理器 -> Android SDK -> SDK平台 -> 名称。

选择Android 6.0(Marshmallow)选项,现在将会被下载。 现在,您将能够看到API Level 23并通过选择它来解决此问题。


1
我在Windows 10中使用Android Studio 1.5.1时遇到了类似的问题。无论选择哪个版本的Android,预览都无法工作。堆栈跟踪以以下内容开头:
"java.lang.NoSuchMethodError: com.android.ide.common.rendering.api.LayoutlibCallback.getXmlFileParser(Ljava/lang/String;)Lorg/xmlpull/v1/XmlPullParser;"
当我从RelativeLayout中删除属性“tools:showIn = @layout/activity_main”时,该问题解决了,适用于除“N”版本之外的所有Android版本。我启用了Android 2.2、2.3.3、5.0.1和6.0。
我无法解释为什么此操作可以解决问题,也无法解释为什么它对N版本有效。

0

这不是及时的答案,但对于任何正在寻找其他人遇到同样问题的人来说,更新Android Studio即可解决问题。虽然上面的所有建议都有效,但您需要获取更新(版本2.1.2)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接