下载sqlcipher源码,设置sdk,ndk路径(linux环境)
在sqlichper源码目录下,
make init
make
生成so ,jar,还有icudt461.zip
如果无需修改sqlcipher内部的代码,则直接用官方提供的二进制包即可,我这里需要修改
放置在libs目录中如下
lua@lua-desktop:~/xgm$ tree gingerbread/packages/providers/ContactsProvider/libs/
gingerbread/packages/providers/ContactsProvider/libs/
├── armeabi
│?? ├── libdatabase_sqlcipher.so
│?? ├── libsqlcipher_android.so
│?? └── libstlport_shared.so
├── commons-codec.jar
├── guava-r09.jar
└── sqlcipher.jar
下面是替换工作 ContactsProvider目录下
在Android.mk添加外部jar引用和so,方法:
include $(BUILD_PACKAG)之前添加 LOCAL_STATIC_JAVA_LIBRARIES = codec guava sqlcipher
在 include $(BUILD_PACKAGE)之后添加
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := codec:libs/commons-codec.jar guava:libs/guava-r09.jar sqlcipher:libs/sqlcipher.jar
LOCAL_PREBUILT_LIBS := libs/armeabi/libdatabase_sqlcipher.so libs/armeabi/libsqlcipher_android.so libs/armeabi/libstlport_shared.so
include $(BUILD_MULTI_PREBUILT)
修改源码中的引用
android.database.下的全部引用除Cursor外,全部换成info.guardianproject.database.
android.database.sqlite.全部换成info.guardianproject.database.sqlcipher.
sed -i "s/android.database.sqlite./info.guardianproject.database.sqlcipher./g" `grep "android.database.sqlite." -Rl src/`
sed -i "s/android.database./info.guardianproject.database./g" `grep "android.database." -Rl src/`
sed -i "s/info.guardianproject.database.Cursor/android.database.Cursor/g" `grep "info.guardianproject.database.Cursor" -Rl src/`
sed -i "s/info.guardianproject.database.CharArrayBuffer/android.database.CharArrayBuffer/g" `grep "info.guardianproject.database.CharArrayBuffer" -Rl src/`
将com.android.internal.content.SyncStateContentProviderHelper 移到包内,并修改相关引用
修改sqlcipher,在SQLiteOpenHelper中添加getReadableDatabase()和getWriteableDatabase()的stub,在ContactsDatabaseHelper里重载,这样可以少改动很多代码
另由于ContactsContract中使用的是android.database命名空间的SqliteException,不好修改,捕捉异常时捕不到sqlcipher定义的SqliteException,
故将sqlcipher中的SqliteException,SQLException,StaleStateExceptin,全部继承于对应的android命名空间的类,这将无论使用哪边的代码,都可以正常捕捉到异常
mms数据库TelphonyProvider按同样的方法修改Android.mk和替换引用,由于当时忘了拷贝icudt461.zip过来,建立数据库时失败,查了半天才搞清