将android联系人和短信数据库换成sqlcipher记录

下载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过来,建立数据库时失败,查了半天才搞清



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值