Xamarin.Forms中使用SQLite.Net.Cipher
需求是需要对Sqlite加密。
这里我选择了SQLite.Net.Cipher这个库来进行加密。
Github:https://github.com/has-taiar/SQLite.Net.Cipher
SQLite.Net.Platform.XamarinAndroidN:https://www.nuget.org/packages/SQLite.Net.Platform.XamarinAndroidN/
首先来看我们需要安装的库:
1. SQLite.Net.Cipher
2. SQLite.Net.Platform.XamarinAndroidN(从Nuget安装会失败,下载Nuget包,解压该包,再在Android项目用引用即可。)
3. Mono.Data.Sqlite.Portable (Android项目中安装)
为什么需要2和3两个库?
关于Mono.Data.Sqlite.Portable的使用:
官方文档这样说的:
https://developer.xamarin.com/releases/android/xamarin.android_6/xamarin.android_6.0/
Due to a change by Google, Android N will now only permit linking to NDK-provided native libraries. libsqlite.so
is not an NDK-provided native library. Consequently, existing apps using e.g. Mono.Data.Sqlite.dll
will crash when running on Android N. This may include other SQLite-using assemblies, not distributed with Xamarin.Android.
在andorid7.0后,不允许应用调用系统的sqlite,所以需要应用自己引入。
关于 SQLite.Net.Platform.XamarinAndroidN使用:
先看SQLite.Net.Cipher的Demo代码:
public class MyDatabase : SecureDatabase { public MyDatabase(ISQLitePlatform platform, string dbfile, string someSalt): base(platform, dbfile, someSalt) { } protected override void CreateTables() { CreateTable<SampleUser>(); } }
MyDatabase在实例化的时候需要platform,这时后SQLite.Net.Platform.XamarinAndroidN就排上用场了。
在AndroidN即(7.0)以下版本设置 platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
在AndroidN以上设置platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroidN();
当然在iOS和UWP中和SQLite.Net.Platform.XamarinAndroidN这个库就无关了。
iOS中设置 platform = new SQLite.Net.Platform.XamarinIOS.SQLitePlatformIOS();
UWP中设置 platform = new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT();
这样就可以愉快的使用SQLite.Net.Cipher了。