最近同事升級了新版SDK后扼褪,發(fā)現(xiàn)布局文件無法預(yù)覽了,拋出異常:
java.lang.UnsatisfiedLinkError: video.xxx.Logging.nativeLog(ILjava/lang/String;Ljava/lang/String;)V
at video.xxx.Logging.nativeLog(Native Method)
at video.xxx.Logging.log(Logging.java:134)
at video.xxx.Logging.d(Logging.java:158)
at video.xxx.EglBase14.isEGL14Supported(EglBase14.java:43)
at video.xxx.EglBase.create(EglBase.java:96)
at video.xxx.EglBase.create(EglBase.java:107)
at video.xxx.rtc.impl.EglSharedContextHelper.getEglSharedContext(EglSharedContextHelper.java:11)
at com.xxx.rtc.api.RtcView.init(RtcView.java:65)
at com.xxx.rtc.api.RtcView.onAttachedToWindow(RtcView.java:76)
at android.view.View.dispatchAttachedToWindow(View.java:19575)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3430)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:3437)
at android.view.AttachInfo_Accessor.setAttachInfo(AttachInfo_Accessor.java:42)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:335)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:373)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:141)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:713)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$6(RenderTask.java:844)
at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
但是APP運行正常粱栖,僅僅是無法預(yù)覽布局话浇。
我又重現(xiàn)了下,確實如同事所說闹究,只要布局里包含了這個RtcView
幔崖,就無法預(yù)覽:
Screen Shot 2021-07-08 at 7.47.54 PM.png
看了下報錯堆棧,是RtcView
執(zhí)行onAttachedToWindow
時有個初始化操作涉及到了native
方法渣淤,需要加載so庫赏寇。正常運行APP的話,加載so庫的操作都是一開始就執(zhí)行完了价认,所以不會有類似問題嗅定。AndroidStudio預(yù)覽布局文件,居然也會執(zhí)行到View
的onAttachedToWindow
方法用踩,真是又開眼了渠退。有空一定要了解下AndroidStudio預(yù)覽布局文件的原理。
解決方法就是在RtcView
報錯的地方加try
catch
捕獲異常脐彩。不知道是否還有更優(yōu)雅的方案碎乃。