Accéder au contexte android dans l'application ndk

cppdev 12/15/2010. 2 answers, 7.899 views
android android android-ndk android-ndk

Y at-il un moyen de passer / obtenir un objet de contexte android dans mon application ndk. Je veux utiliser SharedPreferences dans mon application ndk via l'interface jni. Pour obtenir une instance de l'objet SharedPreferences , je dois appeler getSharedPreferences() sur l'objet Context . Mais je n'ai pas accès à l'objet contextuel.

OU

Comment puis-je lire et écrire un fichier XML à partir de NDK?

Tout pointeur sera apprécié.

3 Comments
ognian 12/15/2010
Comment lire et écrire le fichier xml: xmlsoft.org
Sebastian Roth 12/15/2010
Même si je n'ai pas d'expérience avec le NDK, je ne pense pas que vous puissiez 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.
Mr.Cool 05/22/2013
@cppdev maintenant je fais aussi face à ce même problème, si vous avez implémenté cela, pouvez-vous partager

2 Answers


Lucas S. 12/22/2010.

Il n'y a rien de spécial à faire, c'est comme un mécanisme JNI régulier. 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 d'implémenter le tout à partir du code natif / JNI, à la place je vais implémenter une méthode d'aide en Java qui fait tout et 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 la mémoire alors attendez-vous à ne pas travailler hors de la boîte.

2 comments
Igor Ganapolsky 04/12/2016
Quelle est variable d' env ? Est-ce qu'un contexte doit être adopté dans Android?
1 aasu 09/08/2016
@IgorGanapolsky Il n'a pas besoin d'être explicitement passé en argument dans l'appel de la fonction JNI parce que la JVM le passe en interne. Voir en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_work s

dev 02/16/2016.

On dirait que les choses ont changé récemment et la solution ci-dessus et peu d'autres postées sur d'autres publications de SO n'ont pas fonctionné pour moi. Après quelques essais, j'ai été en mesure de faire le travail de solution suivante. Mon objectif était de transmettre l'objet de contexte à JNI et d'obtenir un chemin de stockage absolu.

void Java_com_path_to_my_class_jniInit(JNIEnv* env, jobject thiz, jobject contextObject) {

    try {
         //Get Context Class descriptor
         jclass contextClass = env->FindClass("android/content/Context");
         //Get methodId from Context class
         jmethodID getFilesDirMethodId = env->GetMethodID(contextClass,"getFilesDir","()Ljava/io/File;");

         //Call method on Context object which is passed in
         jobject fileObject = env->CallObjectMethod(contextObject,getFilesDirMethodId);

         //Get File class descriptor
         jclass fileClass = env->FindClass("java/io/File");
         //Get handle to the method that is to be called
         jmethodID absolutePathMethodId = env->GetMethodID(fileClass,"getAbsolutePath","()Ljava/lang/String;");
         //Call the method using fileObject
         jstring stringObject = (jstring)env->CallObjectMethod(fileObject,absolutePathMethodId);
      }
      catch(exception& ex){
            JNIExceptionHelper::throwException(env, ex.what());
            return;
      }
} 
1 comments
Igor Ganapolsky 04/12/2016
Je pensais que les arguments vont dans la dernière position dans la liste des paramètres pour GetMethodID selon journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementin g / .... Cependant, vous contextClass comme premier paramètre?

HighResolutionMusic.com - Download Hi-Res Songs

1 (G)I-DLE

POP/STARS flac

(G)I-DLE. 2018. Writer: Riot Music Team;Harloe.
2 Ariana Grande

​Thank U, Next flac

Ariana Grande. 2018. Writer: Crazy Mike;Scootie;Victoria Monét;Tayla Parx;TBHits;Ariana Grande.
3 Imagine Dragons

Bad Liar flac

Imagine Dragons. 2018. Writer: Jorgen Odegard;Daniel Platzman;Ben McKee;Wayne Sermon;Aja Volkman;Dan Reynolds.
4 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
5 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
6 BTS

Waste It On Me flac

BTS. 2018. Writer: Steve Aoki;Jeff Halavacs;Ryan Ogren;Michael Gazzo;Nate Cyphert;Sean Foreman;RM.
7 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
8 BlackPink

Kiss And Make Up flac

BlackPink. 2018. Writer: Soke;Kny Factory;Billboard;Chelcee Grimes;Teddy Park;Marc Vincent;Dua Lipa.
9 Lady Gaga

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
10 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
11 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
12 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
13 Little Mix

The Cure flac

Little Mix. 2018. Writer: Pete Kelleher;Camille Purcell;Tom Barnes;Ben Kohn.
14 Bradley Cooper

Always Remember Us This Way flac

Bradley Cooper. 2018. Writer: Lady Gaga;Dave Cobb.
15 Calum Scott

No Matter What flac

Calum Scott. 2018. Writer: Toby Gad;Calum Scott.
16 Frida Sundemo

Apologize flac

Frida Sundemo. 2018.
17 Little Mix

Woman Like Me flac

Little Mix. 2018. Writer: Nicki Minaj;Steve Mac;Ed Sheeran;Jess Glynne.
18 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
19 Ashley Tisdale

Voices In My Head flac

Ashley Tisdale. 2018. Writer: John Feldmann;Ashley Tisdale.
20 Haley Reinhart

Something Strange flac

Haley Reinhart. 2018.

Related questions

Hot questions

Language

Popular Tags