編輯:關於Android編程
免費的SQLite開源源碼只給提供了兩個函數,只有實現這兩個函數才能實現數據庫整體加密。然後廢了點勁從網上找了一個已經實現好的開源庫http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/
然後大概寫一下如何把它集成到自己的so庫中。
首先下載源碼,找到sqlite3/secure/src下,把其中所有的文件(除了sqlite3.def)拷貝到Android工程下的jni目錄下,然後打開sqlite3.c文件,在最前面添加一行代碼:
#define SQLITE_HAS_CODEC
在jni目錄下新建Android.mk文件,輸入如下內容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libsqlite3
LOCAL_SRC_FILES:= sqlite3secure.c #這裡寫的是相對路徑
include $(BUILD_STATIC_LIBRARY)
# 從這裡開始是so庫的聲明,我這裡使用了一個自動加載腳本,只需要指定
# MY_FILES_PATH就能自動加載所有的cpp和c文件
include $(CLEAR_VARS)
LOCAL_MODULE := native
MY_FILES_PATH := $(LOCAL_PATH)/Classes
MY_FILES_SUFFIX := %.cpp %.c
# 遞歸遍歷目錄下的所有的文件
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))
# 獲取相應的源文件
MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*.*) )
MY_ALL_FILES := $(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_SRC_LIST := $(filter $(MY_FILES_SUFFIX),$(MY_ALL_FILES))
MY_SRC_LIST := $(MY_SRC_LIST:$(LOCAL_PATH)/%=%)
# 去除字串的重復單詞
define uniq =
$(eval seen :=)
$(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))
${seen}
endef
# 遞歸遍歷獲取所有目錄
MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) )
MY_ALL_DIRS := $(call uniq,$(MY_ALL_DIRS))
#MY_ALL_DIRS :=
# 賦值給NDK編譯系統
LOCAL_SRC_FILES := $(MY_SRC_LIST)
LOCAL_C_INCLUDES := $(MY_ALL_DIRS)
LOCAL_LDLIBS := -llog -ldl
LOCAL_STATIC_LIBRARIES := libsqlite3 # 這裡添加靜態庫
include $(BUILD_SHARED_LIBRARY)
在使用的時候,只需要
#include "sqlite3.h"
然後在open數據庫之後,調用如下兩個函數:
SQLITE_API int sqlite3_key(
sqlite3 *db, /* Database to be rekeyed */
const void *pKey, /* The key */
int nKey /* The key length */
);
SQLITE_API int sqlite3_key_v2(
sqlite3 *db, /* Database to be rekeyed */
const char *zDbName, /* Name of the database */
const void *pKey, /* The key */
int nKey /* The key length */
);
即可將數據庫加密。
需要注意的是,只能在創建數據庫後馬上調用以上兩個函數中的任意一個才能加密數據庫。當需要操作一個加密後的數據庫後,只需要在open數據庫之後調用一次該函數,即可正常操作數據庫。
Adapter常用的實現方式ArrayAdapter、simpleAdapter、SimpleCursorAdapter、BaseAdapter。 1、ArrayAdap
今天簡單講解一下PackageInstaller 文件路徑: 下面開始講解: 首先,我們說一下安裝apk的幾種方式,整體上可以分為2類,一類是有界面安裝,一
效果:滑動切換,自動切換。 代碼:https://github.com/ldb-github/Layout_Tab1、布局界面通過ViewPager標簽來實現視
本文實例為大家詳細介紹了Android開發之HTTP訪問網絡的相關代碼,供大家參考,具體內容如下代碼1:package com.ywhttpurlconnection;i