diff --git a/native/jni/Android.mk b/native/jni/Android.mk
index 01b32a95e3206007267d8fe2e0188f2670db88cf..53846485f8615736191a2d61d22b60b606e045f3 100644
--- a/native/jni/Android.mk
+++ b/native/jni/Android.mk
@@ -88,6 +88,7 @@ LOCAL_MODULE_TAGS := optional
 
 LOCAL_SDK_VERSION := 14
 LOCAL_NDK_STL_VARIANT := c++_static
+LOCAL_CFLAGS := -Wall -Werror
 LOCAL_LDFLAGS += -ldl
 
 include $(BUILD_SHARED_LIBRARY)
@@ -99,3 +100,4 @@ include $(LOCAL_PATH)/HostUnitTests.mk
 
 #################### Unit test on target environment
 include $(LOCAL_PATH)/TargetUnitTests.mk
+//LOCAL_CFLAGS += -Wall -Werror
diff --git a/native/jni/HostUnitTests.mk b/native/jni/HostUnitTests.mk
index 6dd615cf7b8e18f594654b334c670121f199fd49..baf1cace311c361e255b1542710a04f99ad62533 100644
--- a/native/jni/HostUnitTests.mk
+++ b/native/jni/HostUnitTests.mk
@@ -29,7 +29,7 @@ include $(LOCAL_PATH)/NativeFileList.mk
 #################### Host library for unit test
 LATIN_IME_SRC_DIR := src
 LOCAL_ADDRESS_SANITIZER := true
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function -Wall -Werror
 LOCAL_CXX_STL := libc++
 LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
 LOCAL_MODULE := liblatinime_host_static_for_unittests
diff --git a/native/jni/TargetUnitTests.mk b/native/jni/TargetUnitTests.mk
index b05cd140112b433c979cdd1974e527a043ea0697..32aada057a63297bc6d1888ebd7f3a0a754e06c7 100644
--- a/native/jni/TargetUnitTests.mk
+++ b/native/jni/TargetUnitTests.mk
@@ -21,7 +21,7 @@ include $(LOCAL_PATH)/NativeFileList.mk
 
 #################### Target library for unit test
 LATIN_IME_SRC_DIR := src
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function -Wall -Werror
 LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
 LOCAL_MODULE := liblatinime_target_static_for_unittests
 LOCAL_MODULE_TAGS := optional
@@ -33,7 +33,7 @@ include $(BUILD_STATIC_LIBRARY)
 #################### Target native tests
 include $(CLEAR_VARS)
 LATIN_IME_TEST_SRC_DIR := tests
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
+LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function -Wall -Werror
 LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
 LOCAL_MODULE := liblatinime_target_unittests
 LOCAL_MODULE_TAGS := tests
diff --git a/native/jni/tests/dictionary/utils/trie_map_test.cpp b/native/jni/tests/dictionary/utils/trie_map_test.cpp
index 745d3989774d2a18df93e4159e85ff4ddbf22a0f..8f3ec9d2437919d277c24463c4cc9f39a29aeffa 100644
--- a/native/jni/tests/dictionary/utils/trie_map_test.cpp
+++ b/native/jni/tests/dictionary/utils/trie_map_test.cpp
@@ -55,6 +55,7 @@ TEST(TrieMapTest, TestRemove) {
     EXPECT_TRUE(trieMap.remove(10, trieMap.getRootBitmapEntryIndex()));
     EXPECT_FALSE(trieMap.getRoot(10).mIsValid);
     for (const auto &element : trieMap.getEntriesInRootLevel()) {
+        (void)element; // not used
         EXPECT_TRUE(false);
     }
     EXPECT_TRUE(trieMap.putRoot(10, 0x3FFFFF));