我需要使用SQLCipher for android ...我已经使用SQLite创建了我的应用程序,并希望将其转换为SQLCipher。
问题是,我对SQLCipher一无所知。
我已在此链接中了解到这一点:http://sqlcipher.net/sqlcipher-for-android/
但我还是不太清楚。 我想知道你是否可以为android教程提供一些基本的sqlcipher,其中所有内容都是从绝对基础知识中轻松教授的。
谢谢!
答案 0 :(得分:25)
要正确使用SQL Cipher for Android,您必须使用外部库并更改与数据库交互的一些代码。
这些必须首先添加到您的项目中(在libs文件夹中。)请参阅此处获取这些内容:http://sqlcipher.net/sqlcipher-for-android/
其次,您需要将icudt4dl.zip文件添加到您的assets文件夹中,此Zip附带SQL Cipher库。
右键单击您的项目,转到属性,然后转到Java构建路径,然后包含诸如commons-codec.jar,guava-r09.jar,sqlcipher.jar之类的库。完成后,执行构建清理。
然后在您的应用程序中,您将导入import net.sqlcipher.database
更改与DB交互的任何代码,例如:
SQLiteDatabase.loadLibs(上下文);
String dbPath = this.getDatabasePath(" dbname.db")。getPath();
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbPath," dbPassword",null);
验证数据库是否已加密,转到Eclipse中的DDMS透视图,单击文件资源管理器选项卡,导航到data / data /,单击.db文件并选择获取设备文件,将其保存到桌面并用文本编辑器打开它。查找已插入数据库的纯文本值,如果仍然可以读取它们,则会出现问题。
在实现SQL Cipher之前查看一些SQLite教程可能也是一个好主意。这里提到一个好的: Android sqlite database - where do i start as the tutorial has gone for notepad?
<强>更新强>
现在这个答案已经过时,并且Eclipse实际上已经不适用于Android开发。我最近不得不在Android Studio for Android 5 + 6上使用SQLCipher构建应用程序,这些是我遵循的步骤。
在Android Studio中,您可以在构建文件中包含SQLCipher作为依赖项。更新build gradle中的依赖项以包含以下行:
dependencies{
compile 'net.zetetic:android-database-sqlcipher:3.5.4@aar'
}
您可以在此处与版本保持同步: https://mvnrepository.com/artifact/net.zetetic/android-database-sqlcipher
我的应用程序不会构建,除非我删除了lib文件夹和资产文件夹中的SQLCipher文件,但之后它按预期工作。完成这些更改后,运行构建/清理并检查它是否有效。
上面提到的更改代码的步骤仍然有效。
答案 1 :(得分:8)
虽然您仍然可以关注Zetetic's Eclipse tutorial并自行添加.so库,但您真的不需要在Android Studio中执行此操作。只需添加一个Gradle依赖项,例如compile net.zetetic:android-database-sqlcipher:3.3.1-2@aar
,您就可以开始了!
答案 2 :(得分:0)
//in build.gradle
implementation 'net.zetetic:android-database-sqlcipher:4.4.0@aar'
implementation "androidx.sqlite:sqlite:2.1.0"
// in activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// initialize sqlite libraries
SQLiteDatabase.loadLibs(this)
// initializing db
val database = SQLiteDatabase.openOrCreateDatabase(
"/some/path",
"mypassword",
null
)
// creating table if not exists
database.execSQL("create table if not exists $DB_TABLE_NAME($DB_COLUMN1_NAME, $DB_COLUMN2_SURNAME)")
// get data from db
s = loadFromDB()
}
private fun loadFromDb(): String {
var s = ""
var i = 0
createTableIfNotExist()
val cursor = database.rawQuery("select * from $DB_TABLE_NAME", null)
cursor?.moveToFirst()
if (!cursor.isAfterLast) {
do {
s += "col_${i++}: name:${cursor.getString(0)} surname:${cursor.getString(1)}\n"
} while (cursor.moveToNext())
cursor.close()
return s
}
return s
}
如果没有真实的示例和文档,入门会有些困难! 这是一个简单的example和documentation。使用起来非常简单方便!
如果您喜欢该示例,请不要忘了加注星标并做出贡献)。谢谢!