SQLite Android issue


#1

Hi,
Im trying to include an SQL database in my project,

  • I have downloaded and included sqlite.c and .h into my project in Xcode - This works fine on ios
  • On Android my .mk file looks like this

[CODE]
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

$(call import-add-path,$(LOCAL_PATH)/…/…/…/…/…/cocos2d)
$(call import-add-path,$(LOCAL_PATH)/…/…/…/…/…/cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/…/…/…/…/…/cocos2d/cocos)
$(call import-add-path,$(LOCAL_PATH)/…/…/…/…/…/cocos2d/cocos/audio/include)

LOCAL_MODULE := MyGame_shared

LOCAL_MODULE_FILENAME := libMyGame

LOCAL_SRC_FILES := hellocpp/main.cpp
…/…/…/Classes/AppDelegate.cpp
…/…/…/Classes/HelloWorldScene.cpp
…/…/…/Classes/sqlite3.c \

LOCAL_C_INCLUDES := $(LOCAL_PATH)/…/…/…/Classes

_COCOS_HEADER_ANDROID_BEGIN

_COCOS_HEADER_ANDROID_END

LOCAL_STATIC_LIBRARIES := cocos2dx_static

_COCOS_LIB_ANDROID_BEGIN

_COCOS_LIB_ANDROID_END

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)

_COCOS_LIB_IMPORT_ANDROID_BEGIN

_COCOS_LIB_IMPORT_ANDROID_END

[/CODE]

But when I try to compile my project on android I’m getting tons of errors for example the first few errors

[CODE]
jni/…/…/…/Classes/sqlite3.c:31470:42: error: ‘mmap’ undeclared here (not in a function)
{ “mmap”, (sqlite3_syscall_ptr)mmap, 0 },
^
jni/…/…/…/Classes/sqlite3.c:31477:42: error: ‘munmap’ undeclared here (not in a function)
{ “munmap”, (sqlite3_syscall_ptr)munmap, 0 },
^
jni/…/…/…/Classes/sqlite3.c:31484:42: error: ‘mremap’ undeclared here (not in a function)
{ “mremap”, (sqlite3_syscall_ptr)mremap, 0 },
^

[/CODE]

There are hundreds of these errors after and I’m wondering if anybody knows what I am doing wrong?
Or a suggestion to help?
Thanks


#2

I am not sure if it matters, but you don’t need a \ here since it is the last source file in the list.


#3

Thanks for the reply,
Yes I noticed that but it does not make any difference and every example or anything from sqlite seems to be just include the source so have not a clue whats going on.


#4

actually, I just had a thought. Is your database encrypted?


#5

Sorry yes I want to use encryption so in my application.mk file my flags are

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DSQLITE_HAS_CODEC=1 -std=c++11 -fsigned-char
Do i need something more included for the encryption like ssl?


#6

I think you need to use SQLCipher then


#7

This is what im trying to figure out because I set this pre-processor flag in my Xcode project and it builds fine and I can encrypt/decrypt my DB maybe iOS has something built in for the encryption that android does not?


#8

perhaps, I don’t know for sure.

Try following these:

Also, maybe ensure you are using the latest and greatest SQLite version.


#9

Yes have the most up to date SQL version even if i remove the preprocessing flag to set encryption enabled it does not seem to change the errors when compiling I am using

cocos compile -p android --android-studio


#10

I have the same problem. How can i solve? please help.

Error:

Error:(30845, 42) error: 'mmap' undeclared here (not in a function)

I included sqlite3.c in “Android.mk”, everything seems ok, but it still gives me this error.

And my database is not encrypted. To be honest, i don’t have a database, i’m trying to create one with code. But I can’t even compile my code, it gives me this error.

EDIT: Ok I solved this problem. Look here https://stackoverflow.com/questions/46384658/bash-script-error-ndk-build

But now I have another SQLite problem, maybe i’ll create a new thread.


#11

are you including sqlcipher anyplace?


#12

I started writing a chapter on SQLite, btw, but it isn’t done yet.

It is WIP here: https://github.com/cocos2d/cocos2d-x-docs/blob/master/en/advanced_topics/sqlite.md