在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134.html)
- 博客分类:
- 技术杂绘
在 Android 平台上应用 Berkeley DB 11gR2 SQL(drop-in模式)(转http://www.cnmsdn.com/html/201004/1270362092ID3134.html)
2010年10月17日
前文我们介绍了如何编译Berkeley DB SQL(BDB SQL)库并放到Android平台上使用。现在我们来介绍另一种更为彻底的使用方式。依本方法编译得到的BDB库将完全替换Android的 SQLite库,我们称其为drop-in模式。在这种模式下,Android平台上所有的应用程序(包括我们自己编译的应用程序)都将链接到BDB SQL库以获取更高的存储和并发性能。
本文将使用完整的Android源代码来编译构建我们的全新Android系统镜像,而Android源代码包中包含了交叉编译器,因此我们不需要事先安装NDK。
1. 编译Android代码
从Android官方网站获取一份Android源代码,这份源代码有2~3G之巨。
在Linux平台上,把源代码解压到$HOME/android/android_src
安装java 1.5版本,(1.6不行),并设置JAVA_HOME和PATH:
$ export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
$ export PATH=$JAVA_HOME/bin:$PATH
先把原始的Android代码完全编译成功(这过程可能要花2~3小时):
$ cd $HOME/android/android_src
$ . build/envsetup.sh
$ make
可看到生成三个镜像:
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
2. 安装Android SDK并测试镜像
安装Android SDK: http://developer.android.com/sdk/installing.html, 安装目录:$HOME/android/android-sdk-linux_86
安装Android SDK组件: http://developer.android.com/sdk/adding-components .html,选择安装SDK Platform Android 2.1 API 7和Google APIs by Google Inc., Android API 7
用我们编译得到的镜像替换系统的默认镜像。如果需要替换Windows环境下的sdk,那么以下目录"android-sdk-linux_86″相应应该改成 "android-sdk-windows"。
$ cd $HOME/android/android-sdk-linux_86/platforms/andro id-2.1
$ cp -r images images.bak
$ cp $HOME/android/android_src/out/target/product/gener ic/*.img images
创建并运行一个新的设备:
$ cd $HOME/android/android-sdk-linux_86/tools/
接上页
$ ./android
(如图)使用图形界面工具创建一个Android 2.1的设备BDBSQL,并点击"start"启动。新的设备第一次启动的时间会非常长,这是正常现象。等到Android界面出现,就说明我们的镜像编译基本没问题了。接下来我们进一步把SQLite库替换为BDB。
3. 编译BDB SQL
从http://www.oracle.com/technology/software/products /berkeley-db/index.html下载BDB 11gR2源文件(db-5.0.x.tar.gz),然后
$ cd $HOME/android/android_src/external/sqlite/dist
$ tar zxvf db-5.0.x.tar.gz
$ cp Android.mk Android.mk.bak
$ cp db-5.0.x/build_android/Android.mk .
编辑Android.mk,默认的BDB Log和Region文件大小总和可达到十几兆,因此我们有必要修改Android.mk来减小它(可能需要为Android.mk去掉只读属性)。修改第一处LOCAL_CFLAGS如下所示(相对于默认配置,我们删除了-DSQLITE_OMIT_TRUNCATE_OPTIMIZATION,新增了 -DSQLITE_DEFAULT_CACHE_SIZE=256 -DBDBSQL_MAX_LOCKS=1000 -DBDBSQL_MAX_LOCK_OBJECTS=1000):
LOCAL_CFLAGS += -Wall -DHAVE_USLEEP=1
-DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576
-DSQLITE_THREADSAFE=1 -DNDEBUG=1 -DSQLITE_TEMP_STORE=3
-DSQLITE_OS_UNIX=1
-D_HAVE_SQLITE_CONFIG_H -DSQLITE_THREAD_OVERRIDE_LOCK=-1
-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_BACKWARDS -Dfdatasync=fsync
-DSQLITE_DEFAULT_CACHE_SIZE=256
-DBDBSQL_MAX_LOCKS=1000
-DBDBSQL_MAX_LOCK_OBJECTS=1000
如果确定不会在多进程间共享数据库,还可以在上述LOCAL_CFLAGS中加入"-DBDBSQL_OMIT_SHARING",这样日志文件不会被写入文件系统,进一步节省了设备空间。
编译系统镜像中的SQLite部分:
$ cd $HOME/android/android_src
$ . build/envsetup.sh
$ make clean-libsqlite
$ mmm -B external/sqlite/dist
$ make snod
编译好了,再来一次镜像替换:
$ cp $HOME/android/android_src/out/target/product/gener ic/*.img
接上页$HOME/android/android-sdk-linux_86/platforms/andro id-2.1/images
使用图形界面工具删除先前的设备BDBSQL,重创建一个新的Android 2.1设备BDBSQL,并点击"start"启动。这里一定要创建新的设备,因为启动过的设备,其数据库文件已被SQLite生成,BDB SQL无法访问。
4. 使用BDB SQL
现在Android里所有应用程序的SQL存储引擎都已被替换为BDB SQL了。我们使用"联系人"来试用一下我们的新设备吧,在Setting里面把Locate设置为中文简体,安装一个中文输入法(比如搜狗),然后打开"联系人",随便增加一条记录:
在主机上我们可以使用adb shell来查看并操作程序所生成的数据库。请留意sqlite3 shell输出的版本信息是Berkeley DB 11gR,同时shell的提示符是dbsql>,这说明我们已经把SQLite成功替换为BDB SQL引擎:
$ adb shell
# cd /data/data/com.android.providers.contacts/database s/
# sqlite3 contacts2.db
Berkeley DB 11g Release 2, library version 11.2.5.0.21: (March 30, 2010)
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
dbsql> .tables
_sync_state status_updates
_sync_state_metadata v1_settings
activities view_contacts
agg_exceptions view_contacts_restricted
android_metadata view_data
calls view_data_restricted
contact_entities_view view_groups
contact_entities_view_restricted view_raw_contacts
contacts view_raw_contacts_restricted
data view_v1_contact_methods
groups view_v1_extensions
mimetypes view_v1_group_membership
name_lookup view_v1_groups
nickname_lookup view_v1_organizations
packages view_v1_people
phone_lookup view_v1_phones
raw_contacts view_v1_photos
settings
dbsql> select * from contacts;
2|逍遥李|||0|0|0|0|1|1|0nE08B4A8BFA37D4||0
接上页
dbsql> select * from data;
1||4|1|0|0|0|li|li|||||||||||||||||
2||6|2|0|0|0|66666666|1||66666666|||||||||||||||
3||6|2|0|0|0|88888888|2||88888888|||||||||||||||
4||8|2|0|0|0|蜀山|1|||||||||||||||||
5||4|2|0|0|0|逍遥李|逍遥|李||||||||||||||||
dbsql>
5. 结束语
关于BDB SQL库在Android平台上的编译和使用的介绍到这里就结束了。我们用两篇博文分别介绍了side-by-side(并存)和Drop-in(替换)这两种使用方式。在Drop-in模式下,现有的应用程序无修改就可以直接使用BDB SQL引擎。
BDB SQL在开发过程中始终给予Android平台高度重视,在开发过程中投入了多位资深工程师致力于将BDB SQL移植到Android平台上,并将Android列为产品周期测试的主流平台。OARDC的工程师Zengfa.Dou和Stephen.Tang 给予了我这个初学者极大帮助。在此一并致谢!
下载数据库软件
http://www.oracle.com/technetwork/database/berkele ydb/downloads/index.html
发表评论
-
在 C# 中通过 P/Invoke 调用Win32 DLL
2012-01-20 01:03 489在 C# 中通过 P/Invoke 调用Win32 DLL ... -
用IIS发布网站
2012-01-20 01:03 598用IIS发布网站 2010年07月15日 1,安装iis ... -
我的ATL/ADO编程的曲折经历
2012-01-20 01:03 576我的ATL/ADO编程的曲折经 ... -
深入探究 Win32 PE 文件格式
2012-01-20 01:03 673深入探究 Win32 PE 文件格 ... -
中国各地男人之最的分析
2012-01-19 08:52 1220中国各地男人之最的分 ... -
第七十三章 暗杀
2012-01-19 08:52 542第七十三章 暗杀 2011年06月10日 丰含笑又等了 ... -
我的见解
2012-01-19 08:52 500我的见解 2011年08月20日 上等美女只存在两个地方 ... -
“网店模特”成新兴职业 大学生兼职居多
2012-01-19 08:52 602“网店模特”成新兴职 ... -
HTC G2 超级新手教程之最终版
2012-01-17 01:22 530HTC G2 超级新手教程之最 ... -
System32下每个DLL的作用
2012-01-17 01:22 1629System32下每个DLL的作用 ... -
轻松编译google chrome浏览器最新稳定版源代码
2012-01-17 01:22 1022轻松编译google chrome浏览器最新稳定版源代码 2 ... -
从零开始- Android刷机指南<二>
2012-01-17 01:22 614从零开始- Android刷机指 ... -
c# 语音功能入门
2012-01-17 01:22 936c# 语音功能入门 2011年10月09日 ... -
一个简单破解excelvba工程密码方法
2012-01-15 20:04 1319一个简单破解excelvba工程密码方法 2010年02月2 ... -
转 Windows API 函数在VFP中的运用
2012-01-15 20:04 561转 Windows API 函数在VFP中的运用 2010年 ... -
VB关机程序
2012-01-15 20:03 741VB关机程序 2009年12月26日 这是我以前写的一个 ... -
VB窗口图表化
2012-01-15 20:03 596VB窗口图表化 2011年04月20日 '本模块为实现托 ... -
VB获取QQ2011安装路径
2012-01-15 20:03 735VB获取QQ2011安装路径 2011年05月23日 V ... -
rome制作rss服务
2012-01-11 12:13 593rome制作rss服务 2011年04月01日 最近用 ... -
jspSmartUpload下载
2012-01-11 12:13 563jspSmartUpload下载 2011年04月01日 ...
相关推荐
This release includes binaries for the Berkeley DB. The source distribution for the Berkeley DB is available at: http://www.sleepycat.com This release includes binaries for Markus Dahm's Byte ...
《高等应用数学问题的MATLAB求解》一书的配书光盘。供大家参考学习 本光盘包括如下目录: “CAI教学材料” 包含全套的PowerPoint文件,可以直接用于教学,具体请参见该目录中的readme.pps文件说明。目前包含的...
《高等应用数学问题的MATLAB求解》光盘资料。供大家参考学习 本光盘包括如下目录: “CAI教学材料” 包含全套的PowerPoint文件,可以直接用于教学,具体请参见该目录中的readme.pps文件说明。目前包含的为中文版...
高等应用数学问题的MATLAB求解随书光盘 光盘分为两部分上传,第一部分是CAI教学资源 第一部分的资源名为:高等应用数学问题的MATLAB求解光盘 part1:包含书中CAI教学材料 光盘使用说明 本光盘是薛定宇和陈阳泉所著...
第二部分的资源名为:高等应用数学问题的MATLAB求解光盘 part2:包含书中开发函数,使用资源及例题全部代码 光盘使用说明 本光盘是薛定宇和陈阳泉所著《高等应用数学问题的MATLAB求解》一书的配书光盘。本光盘的...
Berkeley DB Berkeley DB(BDB)是一个高效的嵌入式数据库编程库,C语言、C++、Java、Perl、Python、Tcl以及其他很多语言都有其...http://www.oracle.com/technetwork/cn/database/berkeleydb/index-085507-zhs.html
Berkeley DB 5.3.21.tar,你也可以去http://www.oracle.com/technetwork/products/berkeleydb/downloads/index.html下载最新版
EpicDuel-Simulator:EpicDuel模拟器可让您测试任何构建并播放EpicDuel的逼真的1v1和2v2模拟。 下载XML文件并将其加载到Snap! (构建您自己的块),网址为https:snap.berkeley.edusnapsnap.html。 要直接访问该...
5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. ...
Berkeley DB 4.4.20 .tar.gz 来自https://www.oracle.com/database/technologies/related/berkeleydb-release-history.html
https://people.eecs.berkeley.edu/~tinghuiz/projects/pix2pix/datasets/
https://www.youtube.com/watch?v=fZvOy0VXWAI&t=5s 数据集: https://vimeo.com/146492001 图像分割: 例子: https://www.depends-on-the-definition.com/unet-keras-segmenting-images/ 数据集: ...
* Optional Berkeley-like socket API * TLS: optional layered TCP ("altcp") for nearly transparent TLS for any TCP-based protocol (ported to mbedTLS) (see changelog for more info) * PPPoS and PPPoE ...
Getting Started with Berkeley DB for C++.pdf
db-6.1.26.tar.gz berkeley db
http://berkeley-cs61as.github.io/textbook.html [SICP with Racket] 4. http://www.yegor256.com/2015/06/29/simple-diagrams.html?2015-26 -[Simple & to the point. The Better Architect You Are, The Simpler ...
CS 61B数据结构(2014年Spring) 关于ucb-61b的所有实验室,作业和项目(2014年Spring) 网址: :
2) 由于MyICQ在存储好友资料和聊天记录时,使用Berkeley DB库,所以先到 http://www.sleepycat.com下载 3) 编译Berkeley DB 4) 在VC的Tools->Options->Directories中设置好MySQL和BerkeleyDB的include和library路径 ...
BerkeleyDB-Core-C-GSG.pdf bdb c开发手册 英文版
Berkeley DB4.8以上各版本,已经亲测过哪些版本可与redhat6.5兼容,见附件名称备注。