EEltaCrew
Home › Blog

Tapping the logo in the map's corner crashed the app: Naver Map SDK and the AppCompat theme

Published 2026-10-19Measured 2026-10-18About 4 min readelta · EltaCrew

Four "You need to use a Theme.AppCompat theme" crashes showed up in Crashlytics for our lottery store map app. They came not from users but from the Play pre-launch report's test robot tapping the NAVER logo in the bottom-left corner of the map. The cause, a fix that wraps only the map instead of changing the whole app theme, and a second problem that appeared in dark mode.

The first crash

On the evening of October 17, a crash we had never seen showed up in Crashlytics for our lottery store map app.

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme
(or descendant) with this activity.
    at com.naver.maps.map.widget.LogoView$3.onClick

When we counted again on October 19, there were 4 events from 2 affected users in the last 14 days: 3 on version 1.0.78 and 1 on 1.0.79, all on a OnePlus 8 Pro running Android 11. We often see that device used by the test robot in Play's pre-launch report, which taps through the app automatically. None of the events came from a real user's device.

We did not skip it just because a robot found it. The stack was inside the map SDK, not our code, and all the robot did was tap something visible on screen, so a user tapping the same spot would crash the same way.

Tapping the logo opens an SDK dialog

The Naver Map SDK draws a NAVER logo in the bottom-left corner of the map. Tapping it makes the SDK open a dialog with SDK information, a map legend, legal notices and open source licenses. That dialog comes from androidx.appcompat, so the screen showing it needs an AppCompat theme.

Our app draws every screen with Jetpack Compose, and the Compose theme decides the colors. So we kept the activity theme light, only setting the window background.

<style name="Theme.Lotto" parent="android:Theme.Material.Light.NoActionBar">
    <item name="android:windowBackground">@color/window_bg</item>
    ...
</style>

android:Theme.Material is not an AppCompat theme. Showing the map, scrolling and tapping markers all worked; only when the logo was tapped did the dialog check the theme and throw. We had never tapped the logo during development, so we did not know.

The fix: wrap only the map in AppCompat

We could have changed the parent of the whole app theme to AppCompat, but then every screen unrelated to the map would need checking again. The problem was in one view, the map, so we wrapped only the Context passed in when the map view is created.

<!-- for the map view only -->
<style name="Theme.LottoMap" parent="Theme.AppCompat.Light.NoActionBar" />
val mapView = remember {
    MapView(ContextThemeWrapper(ctx, R.style.Theme_LottoMap)).also { it.onCreate(null) }
}

When MapView is created with a Context wrapped in ContextThemeWrapper, dialogs opened from inside the map use that theme, while the rest of the app keeps its original theme. We defined the style in the app's own themes.xml instead of pointing at library resources directly.

The second problem: unreadable text in dark mode

Since the app supports dark mode, we first wrapped the map with Theme.AppCompat.DayNight.NoActionBar. The crash was gone, but when we set a Galaxy Note10+ to dark mode and tapped the logo, the dialog background turned dark while the text color the SDK uses stayed dark, so the menu text was almost invisible.

So we fixed the map theme to Light. The dialog now opens light even in dark mode. It does not match the rest of the app, but we decided that was better than text nobody can read.

We installed a debug build on a Galaxy Note10+, tapped the logo, opened the dialog, then opened the legend, legal notices and open source licenses one by one, and saw no crash. We submitted this fix to Play as version 1.0.80 on October 18.

Other apps using the same SDK

Three more of our apps use Naver Map, so we checked their themes.

All three are AppCompat descendants, so they are not set up to hit this crash (we judged this from the themes; we did not tap the logo in those three apps). They are also all DayNight, and we have not yet checked whether the same dialog's text becomes unreadable in dark mode there.

Takeaways

The app in this post is the lottery results and store map app on Google Play (Korean only).

AndroidNaver Map SDKJetpack ComposeCrashlyticsCrashes

Related

Requesting ads before the SDK finishes initializing: why the same crash came back three times after we added a guardAfter we first fixed the "MobileAds.initialize must be called" crash in our live apps, the same crash came back three more times in different shapes. We had a guard that waited for initialization to finish, but a flag set at the start, a flag set on consent alone, and new ad slots that skipped the guard all left gaps. The cause of each case and the results of checking all 23 apps.A crash from one line of image downsampling: inSampleSize starts at 0To save memory, we changed the document thumbnails in our QR scanner app to load downsampled. In the next version, the app closed every time the document list opened. The cause was that BitmapFactory.Options.inSampleSize defaults to 0. The code we changed, the crash data, the fix, and how we checked for the same mistake elsewhere.The crashes Crashlytics didn't show: it only sees the builds you added it toThree days after adding Firebase Crashlytics to 21 apps, we found a user-facing crash in Play Console first. Crashlytics only reports from builds that include the SDK, and crashes from older versions still on users' phones pile up only in Play vitals. Results from checking all 21 apps, and the order we check in now.