Android中与sqlite相关的代码并不多,这里先列出来:

external/sqlite/
|-- android
|   |-- Android.mk
|   |-- NOTICE
|   |-- PhoneNumberUtils.cpp
|   |-- PhoneNumberUtils.h
|   |-- PhoneticStringUtils.cpp
|   |-- PhoneticStringUtils.h
|   |-- PhoneticStringUtilsTest.cpp
|   |-- sqlite3_android.cpp
|   |-- sqlite3_android.h
|   `-- tags
`-- dist
    |-- Android.mk
    |-- MODULE_LICENSE_PUBLIC_DOMAIN
    |-- NOTICE
    |-- shell.c
    |-- sqlite3.c
    |-- sqlite3.h
    `-- version

android:
PhoneNumberUtils.cpp    电话号码比较的相关函数;
PhoneticStringUtils.cpp    Unicode文本排序、比较等一系列函数;
sqlite3_android.cpp        sqlite扩展函数的注册。

这个目录里编译完后是一个静态库libsqlite3_android.a。

dist:
dist里是sqlite3数据库的代码。Android中使用的是3.5.9版本的sqlite,这是2008.05的Release。这里仅有三个源码文件,觉得很奇怪,sqlite的源代码中少说也有上百个源码文件吧,难道是被GOOGLE精简了?如下:

$ wc -l *.[ch]
   2102 shell.c
  87283 sqlite3.c
   5648 sqlite3.h

其中sqlite3.c这个文件非常大,共87283行,2.9M!看了一下sqlite3.c中的内容,是把sqlite3里所有的源码文件做了合并,并到这一个文件里面了。这样做的原因在源码里也作了解释:把代码合并了比起分开编译更有利于编译器做优化,在这里至少有5%的性能提升。这样做的确很有创意,但是做这个合并一定很费事,以后如果没有大的改进的话应该不会轻易升级sqlite了。

编译情况如下:
shell.c      -->  sqlite3            依赖libsqlite.so
sqlite3.c  -->  libsqlite.so        依赖libsqlite3_android.a

扩展函数加载:

扩展函数的加载放在shell.c里,代码如下:

open_db(……)
{
    ……
#ifndef NO_ANDROID_FUNCS
        register_android_functions(db, 0);        //注册扩展函数
        register_localized_collators(db, "", 0);    //排序相关
#endif
……
}