Xposed Module Data Storage
This is an efficient Module App data storage solution that automatically connects
SharedPreferences
andXSharedPreferences
.
We need to store the data of the Module App for the Host App to call.
At this time, we will encounter the data exchange obstacle of the native Sp
storage.
The native Xposed
provides us with a XSharedPreferences
for reading the Sp
data of the Module App.
Use in Activity
Loading
YukiHookPrefsBridge
inActivity
is described here.
Usually we can initialize it in Host App like this.
The following example
XSharedPreferences(BuildConfig.APPLICATION_ID)
Is there a convenient and quick solution?
At this point, you can use the extension capability of YukiHookAPI
to quickly implement this function.
When you store data in a Module App, you can use the following methods if you are currently in an Activity
.
The following example
prefs().edit { putString("test_name", "saved_value") }
When you read data in a Host App, you can use the following methods.
The following example
val testName = prefs.getString("test_name", "default_value")
You don't need to consider the module package name and a series of complicated permission configurations, everything is handled by YukiHookPrefsBridge
.
To achieve localization of storage, you can specify the name of each prefs
file.
This is used in the Activity
of the Module App.
The following example
// Recommended usage
prefs("specify_file_name").edit { putString("test_name", "saved_value") }
// Can also be used like this
prefs().name("specify_file_name").edit { putString("test_name", "saved_value") }
Read like this in Host App.
The following example
// Recommended usage
val testName = prefs("specify_file_name").getString("test_name", "default_value")
// Can also be used like this
val testName = prefs.name("specify_file_name").getString("test_name", "default_value")
If your project has a lot of fixed data that needs to be stored and read, it is recommended to use PrefsData
to create templates.
Through the above example, you can call the edit
method to store data in batches in the following two ways.
The following example
// <Scenario 1>
prefs().edit {
putString("test_name_1", "saved_value_1")
putString("test_name_2", "saved_value_2")
putString("test_name_3", "saved_value_3")
}
// <Scenario 2>
prefs(). edit()
.putString("test_name_1", "saved_value_1")
.putString("test_name_2", "saved_value_2")
.putString("test_name_3", "saved_value_3")
.apply()
Tips
For more functions, please refer to YukiHookPrefsBridge, PrefsData.
Use in PreferenceFragment
Loading
YukiHookPrefsBridge
inPreferenceFragment
is described here.
If your Module App uses PreferenceFragmentCompat
, you can now start migrating its extends ModulePreferenceFragment
.
Pay Attention
You must extends ModulePreferenceFragment to implement the module storage function of YukiHookPrefsBridge.
Tips
For more functions, please refer to ModulePreferenceFragment.
Use Native Storage
In the Module environment, YukiHookPrefsBridge
will store data in the Module App's own private directory (or the shared directory provided by Hook Framework) by default.
Using YukiHookPrefsBridge
in the Host environment will read the data in the Module App's own private directory (or the shared directory provided by Hook Framework) by default.
If you want to store data directly into a Module App or Host App's own private directory, you can use the native
method.
For example, the directory of the Module App is .../com.demo.test.module/shared_prefs
, and the directory of the Host App is .../com.demo.test.host/shared_prefs
.
The following is the usage in Activity
.
The following example
// Store private data
prefs().native().edit { putBoolean("isolation_data", true) }
// Read private data
val privateData = prefs().native().getBoolean("isolation_data")
// Store shared data
prefs().edit { putBoolean("public_data", true) }
// Read shared data
val publicData = prefs().getBoolean("public_data")
The following is the usage in PackageParam
.
The following example
// Store private data
prefs.native().edit { putBoolean("isolation_data", true) }
// Read private data
val privateData = prefs.native().getBoolean("isolation_data")
// Read shared data
val publicData = prefs.getBoolean("public_data")
After using the native
method, no matter in Activity
or PackageParam
, the data will be stored and read in the private directory of the corresponding environment, and the data will be isolated from each other.
Tips
For more functions, please refer to YukiHookPrefsBridge.