diff --git a/android/sqlite3_android.cpp b/android/sqlite3_android.cpp
index 5e097b6..5daf15e 100644
--- a/android/sqlite3_android.cpp
+++ b/android/sqlite3_android.cpp
@@ -62,7 +62,7 @@
     UCollationResult result = ucol_strcollIter(coll, &i1, &i2, &status);
 
     if (U_FAILURE(status)) {
-//        LOGE("Collation iterator error: %d\n", status);
+//        ALOGE("Collation iterator error: %d\n", status);
     }
 
     if (result == UCOL_LESS) {
@@ -311,7 +311,7 @@
     int useDataTag = 0;
 
     if (!(argc >= 4 || argc <= 6)) {
-        LOGE("Tokenize requires 4 to 6 arguments");
+        ALOGE("Tokenize requires 4 to 6 arguments");
         sqlite3_result_null(context);
         return;
     }
@@ -328,7 +328,7 @@
     UCollator* collator = (UCollator*)sqlite3_user_data(context);
     char const * tokenTable = (char const *)sqlite3_value_text(argv[0]);
     if (tokenTable == NULL) {
-        LOGE("tokenTable null");
+        ALOGE("tokenTable null");
         sqlite3_result_null(context);
         return;
     }
@@ -345,7 +345,7 @@
         err = sqlite3_prepare_v2(handle, sql, -1, &statement, NULL);
         sqlite3_free(sql);
         if (err) {
-            LOGE("prepare failed");
+            ALOGE("prepare failed");
             sqlite3_result_null(context);
             return;
         }
@@ -362,7 +362,7 @@
     int64_t rowID = sqlite3_value_int64(argv[1]);
     err = sqlite3_bind_int64(statement, 2, rowID);
     if (err != SQLITE_OK) {
-        LOGE("bind failed");
+        ALOGE("bind failed");
         sqlite3_result_null(context);
         return;
     }
@@ -372,7 +372,7 @@
         int dataTagParamIndex = useTokenIndex ? 4 : 3;
         err = sqlite3_bind_value(statement, dataTagParamIndex, argv[5]);
         if (err != SQLITE_OK) {
-            LOGE("bind failed");
+            ALOGE("bind failed");
             sqlite3_result_null(context);
             return;
         }
@@ -390,7 +390,7 @@
     // Get the raw bytes for the delimiter
     const UChar * delim = (const UChar *)sqlite3_value_text16(argv[3]);
     if (delim == NULL) {
-        LOGE("can't get delimiter");
+        ALOGE("can't get delimiter");
         sqlite3_result_null(context);
         return;
     }
@@ -411,7 +411,7 @@
         uint32_t result = ucol_getSortKey(collator, token, -1, (uint8_t*)keybuf, sizeof(keybuf)-1);
         if (result > sizeof(keybuf)) {
             // TODO allocate memory for this super big string
-            LOGE("ucol_getSortKey needs bigger buffer %d", result);
+            ALOGE("ucol_getSortKey needs bigger buffer %d", result);
             break;
         }
         uint32_t keysize = result-1;
@@ -421,7 +421,7 @@
         err = sqlite3_bind_text(statement, 1, base16buf, base16Size, SQLITE_STATIC);
 
         if (err != SQLITE_OK) {
-            LOGE(" sqlite3_bind_text16 error %d", err);
+            ALOGE(" sqlite3_bind_text16 error %d", err);
             free(base16buf);
             break;
         }
@@ -429,7 +429,7 @@
         if (useTokenIndex) {
             err = sqlite3_bind_int(statement, 3, numTokens);
             if (err != SQLITE_OK) {
-                LOGE(" sqlite3_bind_int error %d", err);
+                ALOGE(" sqlite3_bind_int error %d", err);
                 free(base16buf);
                 break;
             }
@@ -439,7 +439,7 @@
         free(base16buf);
 
         if (err != SQLITE_DONE) {
-            LOGE(" sqlite3_step error %d", err);
+            ALOGE(" sqlite3_step error %d", err);
             break;
         }
         numTokens++;
