SharedPreferences中封装了一系列使用sp保存数据的方法,特点在于可以直接保存数据类与储存时加密数据。
step 1: 在项目根目录下的build.gradle添加
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
step 2: 添加项目依赖
dependencies {
implementation 'com.github.YeGuli:CryptSharedPreference:v1.0.0'
}
- 创建继承自
BaseSet
的数据类:
public class AccountSet extends BaseSet {
private String username = "";
private String password = "";
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
- 初始化SharedPreferencesHandler:
SharedPreferencesHandler handler = SharedPreferencesHandler.getInstance();
handler.initSecretKey(getApplicationContext(), "",false);
- 使用SharedPreferencesHandler保存数据:
AccountSet set = new AccountSet();
set.setUsername("kyon");
set.setPassword("asd456@#$%sdfgsgfs");
try {
handler.saveSetting(context, set);
} catch (IOException e) {
}
- 使用SharedPreferencesHandler读取保存的数据:
try {
AccountSet set = Shandler.getSettings(getApplicationContext(), AccountSet.class);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
- sp的键名使用了SHA512加密;
- sp的键值使用了AES加密,AES加密所需的key则是由当前设备的IMEI值经过一系列算法生成;
如果初始化秘钥时选择使用设备IMEI码处理秘钥则需要权限<uses-permission android:name="android.permission.READ_PHONE_STATE"/>