The app I'm currently building for work is mainly focused around displaying articles. Some of them contain Twitter embeds (on the web version) and since the API is shared by both of our apps I also receive the embed as HTML. Whenever I try to display tweets inside a WebView with the source set to the HTML and the Twitter JS script for styling, the page either loads correctly but crashes when I press back (using react-navigation) or it simply crashes on load but ONLY ON ANDROID.
I have tried the following:
Use the community supported WebView package instead of the built-in one. I have opened an issue over there as well.
Remove the JS script from the WebView.
Use the injectedJavaScript
prop instead.
Install TwitterKit to use the native embeds, unfortunately that's not supported by Twitter anymore :(
This is how I render the WebViews:
const JS = '<script type="text/javascript" src="https://platform.twitter.com/widgets.js"></script>';
return (
<View
key={content.embed._id}
style={[{ overflow : "hidden", marginTop : 15, marginStart : 15 }]}>
<WebView
scrollEnabled={false}
style={{ height : 150, width : Dimensions.get('window').width - 30 }}
source={{ html : content.embed.html + JS }} />
</View>
);
This is the stack trace from Android Studio (I don't even get a RedBox, just a plain old hard crash).
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c in tid 13662 (RenderThread), pid 13634 (com.example)
Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.093/5456446:userdebug/dev-keys'
Revision: '0'
ABI: 'x86'
pid: 13634, tid: 13662, name: RenderThread >>> com.example <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x1c
Cause: null pointer dereference
eax e7a959c0 ebx f0a794a0 ecx f0a6994c edx 00000002
edi efcbbd9c esi 00000000
ebp d314a7e8 esp d314a7d0 eip f07edeea
backtrace:
#00 pc 0060ceea /system/lib/libhwui.so (SkSurface::getCanvas()+26)
#01 pc 0009b53d /system/lib/libhwui.so (android::uirenderer::skiapipeline::GLFunctorDrawable::onDraw(SkCanvas*)+3357)
#02 pc 005200f7 /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+279)
#03 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#04 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#05 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#06 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#07 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#08 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#09 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#10 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#11 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#12 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#13 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#14 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#15 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#16 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#17 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#18 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#19 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#20 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#21 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#22 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#23 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#24 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#25 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#26 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#27 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#28 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#29 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#30 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#31 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#32 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#33 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#34 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#35 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#36 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#37 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#38 pc 0052006d /system/lib/libhwui.so (SkDrawable::draw(SkCanvas*, SkMatrix const*)+141)
#39 pc 0051c9a6 /system/lib/libhwui.so (SkCanvas::onDrawDrawable(SkDrawable*, SkMatrix const*)+38)
#40 pc 00178318 /system/lib/libhwui.so (SkCanvas::drawDrawable(SkDrawable*, SkMatrix const*)+344)
#41 pc 005208f5 /system/lib/libhwui.so (SkLiteDL::draw(SkCanvas*) const+229)
#42 pc 004fe090 /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::drawContent(SkCanvas*) const+352)
#43 pc 004fe51f /system/lib/libhwui.so (android::uirenderer::skiapipeline::RenderNodeDrawable::forceDraw(SkCanvas*)+287)
#44 pc 000a655e /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderLayersImpl(android::uirenderer::LayerUpdateQueue const&, bool, bool)+862)
#45 pc 00546e44 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaPipeline::renderFrame(android::uirenderer::LayerUpdateQueue const&, SkRect const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>> const&, bool, bool, android::uirenderer::Rect const&, sk_sp<SkSurface>)+84)
#46 pc 00545e39 /system/lib/libhwui.so (android::uirenderer::skiapipeline::SkiaOpenGLPipeline::draw(android::uirenderer::renderthread::Frame const&, SkRect const&, SkRect const&, android::uirenderer::FrameBuilder::LightGeometry const&, android::uirenderer::LayerUpdateQueue*, android::uirenderer::Rect const&, bool, bool, android::uirenderer::BakedOpRenderer::LightInfo const&, std::__1::vector<android::sp<android::uirenderer::RenderNode>, std::__1::allocator<android::sp<android::uirenderer::RenderNode>>
#47 pc 000b2e76 /system/lib/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+262)
#48 pc 0054bd02 /system/lib/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c303f2d2360db58ed70a2d0ac7ed911b+898)
#49 pc 004fd4c2 /system/lib/libhwui.so (android::uirenderer::WorkQueue::process()+242)
#50 pc 000c454a /system/lib/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+314)
#51 pc 0000e616 /system/lib/libutils.so (android::Thread::_threadLoop(void*)+326)
#52 pc 0000df76 /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+246)
#53 pc 0008f065 /system/lib/libc.so (__pthread_start(void*)+53)
So I've done a little more digging on the community supported WebView github page and turns out there is this androidHardwareAccelerationDisabled
which is a boolean
. I tried setting it to true
and it seems to have fixed the problem!
<Webview
androidHardwareAccelerationDisabled
...
/>