diff --git a/src/android/app/src/main/jni/android_common/android_common.cpp b/src/android/app/src/main/jni/android_common/android_common.cpp
index b00d9a171..0fa028944 100644
--- a/src/android/app/src/main/jni/android_common/android_common.cpp
+++ b/src/android/app/src/main/jni/android_common/android_common.cpp
@@ -18,3 +18,7 @@ std::string GetJString(JNIEnv *env, jstring jstr) {
     env->ReleaseStringUTFChars(jstr, s);
     return result;
 }
+
+jstring ToJString(JNIEnv* env, const std::string& str) {
+    return env->NewStringUTF(str.c_str());
+}
diff --git a/src/android/app/src/main/jni/android_common/android_common.h b/src/android/app/src/main/jni/android_common/android_common.h
index 50b4c8d22..ff55bee75 100644
--- a/src/android/app/src/main/jni/android_common/android_common.h
+++ b/src/android/app/src/main/jni/android_common/android_common.h
@@ -9,3 +9,4 @@
 #include <jni.h>
 
 std::string GetJString(JNIEnv* env, jstring jstr);
+jstring ToJString(JNIEnv* env, const std::string& str);
diff --git a/src/android/app/src/main/jni/applets/mii_selector.cpp b/src/android/app/src/main/jni/applets/mii_selector.cpp
index 0e8e79238..2009a84ec 100644
--- a/src/android/app/src/main/jni/applets/mii_selector.cpp
+++ b/src/android/app/src/main/jni/applets/mii_selector.cpp
@@ -3,6 +3,7 @@
 // Refer to the license.txt file included.
 
 #include "common/string_util.h"
+#include "jni/android_common/android_common.h"
 #include "jni/applets/mii_selector.h"
 #include "jni/id_cache.h"
 
@@ -26,7 +27,7 @@ void AndroidMiiSelector::Setup(const Frontend::MiiSelectorConfig& config) {
                          static_cast<jboolean>(config.enable_cancel_button));
     env->SetObjectField(java_config,
                         env->GetFieldID(s_mii_selector_config_class, "title", "Ljava/lang/String;"),
-                        env->NewStringUTF(config.title.c_str()));
+                        ToJString(env, config.title));
     env->SetLongField(
         java_config,
         env->GetFieldID(s_mii_selector_config_class, "initially_selected_mii_index", "J"),
@@ -39,7 +40,7 @@ void AndroidMiiSelector::Setup(const Frontend::MiiSelectorConfig& config) {
         env->NewObjectArray(static_cast<jsize>(miis.size()), string_class, nullptr);
     for (std::size_t i = 0; i < miis.size(); ++i) {
         const auto name = Common::UTF16BufferToUTF8(miis[i].mii_name);
-        env->SetObjectArrayElement(array, static_cast<jsize>(i), env->NewStringUTF(name.c_str()));
+        env->SetObjectArrayElement(array, static_cast<jsize>(i), ToJString(env, name));
     }
     env->SetObjectField(
         java_config,
diff --git a/src/android/app/src/main/jni/applets/swkbd.cpp b/src/android/app/src/main/jni/applets/swkbd.cpp
index f5babae9d..e373c9e27 100644
--- a/src/android/app/src/main/jni/applets/swkbd.cpp
+++ b/src/android/app/src/main/jni/applets/swkbd.cpp
@@ -31,15 +31,15 @@ static jobject ToJavaKeyboardConfig(const Frontend::KeyboardConfig& config) {
                          static_cast<jboolean>(config.multiline_mode));
     env->SetObjectField(object,
                         env->GetFieldID(s_keyboard_config_class, "hint_text", "Ljava/lang/String;"),
-                        env->NewStringUTF(config.hint_text.c_str()));
+                        ToJString(env, config.hint_text));
 
     const jclass string_class = reinterpret_cast<jclass>(env->FindClass("java/lang/String"));
     const jobjectArray array =
         env->NewObjectArray(static_cast<jsize>(config.button_text.size()), string_class,
-                            env->NewStringUTF(config.button_text[0].c_str()));
+                            ToJString(env, config.button_text[0]));
     for (std::size_t i = 1; i < config.button_text.size(); ++i) {
         env->SetObjectArrayElement(array, static_cast<jsize>(i),
-                                   env->NewStringUTF(config.button_text[i].c_str()));
+                                   ToJString(env, config.button_text[i]));
     }
     env->SetObjectField(
         object, env->GetFieldID(s_keyboard_config_class, "button_text", "[Ljava/lang/String;"),
@@ -70,8 +70,7 @@ void AndroidKeyboard::Execute(const Frontend::KeyboardConfig& config) {
 
 void AndroidKeyboard::ShowError(const std::string& error) {
     JNIEnv* env = IDCache::GetEnvForThread();
-    env->CallStaticVoidMethod(s_software_keyboard_class, s_swkbd_show_error,
-                              env->NewStringUTF(error.c_str()));
+    env->CallStaticVoidMethod(s_software_keyboard_class, s_swkbd_show_error, ToJString(env, error));
 }
 
 void InitJNI(JNIEnv* env) {
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp
index ecae76fe2..e876ecb3e 100644
--- a/src/android/app/src/main/jni/native.cpp
+++ b/src/android/app/src/main/jni/native.cpp
@@ -64,8 +64,8 @@ static bool DisplayAlertMessage(const char* caption, const char* text, bool yes_
 
     // Execute the Java method.
     jboolean result = env->CallStaticBooleanMethod(
-        IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertMsg(), env->NewStringUTF(caption),
-        env->NewStringUTF(text), yes_no ? JNI_TRUE : JNI_FALSE);
+        IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertMsg(), ToJString(env, caption),
+        ToJString(env, text), yes_no ? JNI_TRUE : JNI_FALSE);
 
     return result != JNI_FALSE;
 }
@@ -74,8 +74,8 @@ static std::string DisplayAlertPrompt(const char* caption, const char* text, int
     JNIEnv* env = IDCache::GetEnvForThread();
 
     jstring value = reinterpret_cast<jstring>(env->CallStaticObjectMethod(
-        IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertPrompt(),
-        env->NewStringUTF(caption), env->NewStringUTF(text), buttonConfig));
+        IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertPrompt(), ToJString(env, caption),
+        ToJString(env, text), buttonConfig));
 
     return GetJString(env, value);
 }