使用libsqlite库进行Android NDK开发
来源:互联网 发布:淘宝衣服直播主播招聘 编辑:程序博客网 时间:2024/06/14 02:10
刚刚开通了博客,没事捣鼓捣鼓,把之前的笔记搬上来,呀哈哈!
最近在参与一个Android NDK开发的项目,需要在Native层获取数据并保存,在Java层得到数据、处理。常用的有两种方式,一采用xml,二是采用数据库。Android的数据库采用轻量型的Sqlite。好吧,这里说下在NDk下使用第三方库的方法。
一,首先从Android系统获取动态库
1)手机连接电脑,360手机助手或者豌豆荚
2)进入sdk\platform-tools运行adb.exe ,运行adb shell 后,使用ls和cd查看android系统目录
3)找到目录为:system/lib/libsqlite.so,查看完毕,退出:exit
4)将文件复制出来: adb pull/system/lib/libsqlite.so E:/
5)保存在E盘
二、在eclipse中使用libsqlite.so
需要文件:sqlite3.h和libsqlite.so (sqlite3.h 网上可以找到)
方法一:
1.把libsqlite.so文件放到 $NDK\platforms\android-19\arch-arm\usr\lib目录下。($NDK指你NDK的存放路径)
把sqlite3.h放在 $NDK\platforms\android-19\arch-arm\usr\include目录下
2.在eclipse中设置NDk include的路径
右击项目——>properties——>C/C++ General——>Paths and Symbols——Includes
确认是否有NDK的include路径,如果没有,则Add,讲NDK的include添加进去(即sqlite3.h存放的路径)
3)在Android.mk文件中添加sqlite库
LOCAL_LDLIBS := -lsqlite
#这是从NDK本地目录lib中找库,如果放入工程中,则采用方法二
4)在jni目录中的C文件中包含头文件
#include <sqlite3.h>
//这是从NDK本地目录include中找头文件
5)贴上一丢丢相关代码
//db我设置的全局
int openDatabase(const char* const dbname){sqlite3_initialize();char * pErrMsg = 0;int ret = 0;//打开数据库,如果数据库不存在,会建立一个数据库ret = sqlite3_open(dbname, &db); if ( ret != SQLITE_OK ) { LOGD("open error! : %s", sqlite3_errmsg(db)); return 1; } LOGD("open db OK!\n"); return 0;}/*创建数据库表,nit_table,eit_table,sdt_t*/int execSql(const char * sql ){char * pErrMsg = 0;int ret=0;ret=sqlite3_exec( db, sql, 0, 0, &pErrMsg );if ( ret != SQLITE_OK ) {//fprintf(stderr, "SQL error: %s\n", pErrMsg);LOGD("SQL error: %s\n", pErrMsg);sqlite3_free(pErrMsg);return 1; }return 0;}void closeDatabase(){sqlite3_close(db);db = 0;}
//调用部分
//打开
const char* dbname = "/sdcard/DVB/database/epg.db";
openDatabase(dbname);
//建表
const char * sSQL1 = "create table nit(userid INTEGER PRIMARY KEY AUTOINCREMENT,network_id int UNIQUE ON CONFLICT REPLACE,version_num int,network_name char(20));";
execSql(sSQL1 );
//关闭
closeDatabase();
PS:Sql语句,可能会用到变量,需要用sprintf连接,如:
char sql[100]; sprintf(sql, "insert into nit(network_id,version_num,network_name) values(%d,%d,'%s')",p_nit->i_network_id ,p_nit->i_version,network_name); LOGD("sql='%s'",sql); execSql(sql);
6)最后给sdcard设置写权限
AndroidManifest.xml中加入代码:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
方法二:
1)把sqlite3.h 和libsqlite.so放入工程文件的jni目录中
2)在Android.mk中添加脚本
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_ARM_MODE := armLOCAL_MODULE := sqlLOCAL_SRC_FILES := epg/libsqlite.so LOCAL_EXPORT_C_INCLUDES := epg/sqlite3.h include $(PREBUILT_SHARED_LIBRARY)
#添加libsql库
<pre name="code" class="html" style="font-size: 18px; font-weight: bold; ">include $(CLEAR_VARS)
<pre name="code" class="objc">LOCAL_MODULE := hello-jniLOCAL_SRC_FILES := hello-jni.cLOCAL_CFLAGS := -WerrorLOCAL_LDLIBS := -llog
<pre name="code" class="html" style="font-size: 18px; font-weight: bold; ">LOCAL_SHARED_LIBRARIES := libsql #加载编译的共享库include $(BUILD_SHARED_LIBRARY)3)include sqlite3.h头文件
#include "sqlite3.h"
4)如果使用sqlite与方法一相同
以上是一点点小经验,如有错误,请留言指正!
- 使用libsqlite库进行Android NDK开发
- 使用系统libsqlite.so 进行ndk 开发
- 使用系统libsqlite.so 进行ndk 开发
- 使用系统libsqlite.so 进行ndk 开发
- 用系统libsqlite.so 进行ndk 开发
- ndk开发之利用android系统中.so库文件(例:libsqlite.so)
- 使用Android Studio进行NDK开发
- 使用go语言进行android ndk开发
- 使用Android Studio进行NDK开发
- 使用 Android Studio 进行 NDK 开发
- 使用CMake来进行Android NDK开发
- 使用CMake来进行Android NDK开发
- 使用CMake来进行Android NDK开发
- 使用Android studio进行NDK开发
- Android 使用Android Studio进行NDK-JNI开发
- 如何进行android NDK开发
- Android studio进行NDK开发
- android studio进行NDK开发
- CVS相关下载
- 王道开发么做所示戏以俺
- 大规模wi90,以示池
- 近降区S呢?使绳是把掠
- 暑期70言吸记下改牙俳
- 使用libsqlite库进行Android NDK开发
- JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用
- 【LeetCode with Python】 Longest Common Prefix
- 关于raw_input( )和sys.stdin.readline( )的区别
- ZOJ3080 ChiBi(SPFA)
- Lua学习笔记之元表元方法
- 编程练习:MP3播放器
- 进程保护(带源码)
- ACM1568