Il n'y a rien de spécial à faire, c'est comme un mécanisme JNI normal. Vous devez obtenir un pointeur vers l'objet de contexte, puis récupérer l'ID de la méthode que vous souhaitez appeler, puis l'appeler avec les arguments souhaités.
Bien sûr, dans les mots, cela semble super simple, mais dans le code, il devient vraiment salissant puisque tous les contrôles et les appels JNI. Donc, à mon avis, je n'essaierai pas de mettre en œuvre tout le code natif/JNI, mais je vais implémenter une méthode d'aide en Java qui fait tout le travail et qui reçoit juste les données nécessaires pour lire/écrire la préférence.
Cela simplifiera beaucoup votre code natif et le rendra plus facile à maintenir.
par exemple:
//Somewhere inside a function in your native code
void Java_com_example_native_MainActivity_nativeFunction(JNIEnv* env, jobject thiz)
{
jclass cls = (*env)->FindClass(env,"PreferenceHelper");
if (cls == 0) printf("Sorry, I can't find the class");
jmethodID set_preference_method_id;
if(cls != NULL)
{
set_preference_method_id = (*env)->GetStaticMethodID(env, cls, "setPreference", "(Ljava/lang/String;Ljava/lang/StringV");
if(set_preference_method_id != NULL)
{
jstring preference_name = (*env)->NewStringUTF(env, "some_preference_name");
jstring value = (*env)->NewStringUTF(env, "value_for_preference");
(*env)->CallStaticVoidMethod(env, cls, get_main_id, preference_name, value);
}
}
}
Notez que je viens d'écrire le code de mémoire afin de ne pas attendre à travailler hors de la boîte.
Comment lire et écrire le fichier xml: http://xmlsoft.org/ – ognian
Tout en ayant aucune expérience avec le NDK, je ne pense pas que vous pouvez accéder au contexte. Le développement NDK est uniquement pour les choses critiques en termes de temps, de haute performance et de bas niveau. Je vous suggère de trouver les données de configuration les plus critiques dont vous avez besoin et de les écrire en format JSON ou XML et de les analyser à partir de votre code NDK. –
@cppdev maintenant je fais aussi face à ce même problème, si vous avez implémenté cela, pouvez-vous partager –