Accedi al contesto Android nell'applicazione ndk

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

C'è un modo in cui posso passare / ottenere un oggetto di contesto Android nella mia applicazione ndk. Voglio usare SharedPreferences nella mia applicazione ndk tramite interfaccia jni. Per ottenere un'istanza dell'oggetto SharedPreferences , ho bisogno di chiamare getSharedPreferences() sull'oggetto Context . Ma non ho accesso all'oggetto di contesto.

O

Come posso leggere e scrivere un file xml da NDK?

Ogni suggerimento sarà apprezzato.

3 Comments
ognian 12/15/2010
Come leggere e scrivere il file xml: xmlsoft.org
Sebastian Roth 12/15/2010
Pur non avendo esperienza con NDK, non penso che tu possa accedere al contesto. Lo sviluppo di NDK è solo per le attività a tempo critico, ad alte prestazioni e di basso livello. Ti suggerisco di trovare i dati di configurazione più importanti di cui hai bisogno e di scriverlo in JSON o XML e analizzarlo dal tuo codice NDK.
Mr.Cool 05/22/2013
@ cppdev ora devo affrontare anche questo stesso problema, se hai implementato questo, puoi condividere

2 Answers


Lucas S. 12/22/2010.

Non c'è niente di speciale che devi fare, è proprio come un normale meccanismo JNI. È necessario ottenere un puntatore all'oggetto contesto, quindi recuperare l'ID del metodo che si desidera chiamare e quindi richiamarlo con gli argomenti che si desidera.

Ovviamente a parole sembra molto semplice, ma nel codice diventa davvero complicato da quando tutti i controlli e le chiamate JNI.

Quindi, a mio parere, non cercherò di implementare il tutto dal codice nativo / JNI, ma implementerò un metodo di supporto in Java che rende tutto e solo i dati necessari per leggere / scrivere la preferenza.

Ciò semplificherà molto il tuo codice nativo e renderà più semplice la manutenzione.

per esempio:

//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);
        }
    }
} 

Nota che ho appena scritto il codice dalla memoria quindi non aspettarti di lavorare fuori dalla scatola.

2 comments
Igor Ganapolsky 04/12/2016
Cos'è la variabile env ? È un passato da passare in Android?
1 aasu 09/08/2016
@IgorGanapolsky Non è necessario che venga passato esplicitamente come argomento nella chiamata della funzione JNI perché la JVM lo passa internamente. Vedi en.wikipedia.org/wiki/Java_Native_Interface#How_the_JNI_work s

dev 02/16/2016.

Sembra che le cose siano cambiate di recente e la soluzione sopra e poche altre postate su altri post SO non ha funzionato per me. Dopo alcuni tentativi, sono riuscito a far funzionare la seguente soluzione. Il mio obiettivo era passare Oggetto Contesto a JNI e ottenere il percorso di archiviazione assoluto.

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
Ho pensato che gli argomenti andassero nell'ultima posizione nell'elenco dei parametri per GetMethodID base a journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementin g / .... Tuttavia, stai passando contextClass come primo parametro?

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 Backstreet Boys

Chances flac

Backstreet Boys. 2018.
5 Clean Bandit

Baby flac

Clean Bandit. 2018. Writer: Jack Patterson;Kamille;Jason Evigan;Matthew Knott;Marina;Luis Fonsi.
6 BTS

Waste It On Me flac

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

Kiss And Make Up flac

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

I'll Never Love Again flac

Lady Gaga. 2018. Writer: Benjamin Rice;Lady Gaga.
9 Kelly Clarkson

Never Enough flac

Kelly Clarkson. 2018. Writer: Benj Pasek;Justin Paul.
10 Fitz And The Tantrums

HandClap flac

Fitz And The Tantrums. 2017. Writer: Fitz And The Tantrums;Eric Frederic;Sam Hollander.
11 Little Mix

Told You So flac

Little Mix. 2018. Writer: Eyelar;MNEK;Raye.
12 Halsey

Without Me flac

Halsey. 2018. Writer: Halsey;Delacey;Louis Bell;Amy Allen;Justin Timberlake;Timbaland;Scott Storch.
13 Cher Lloyd

None Of My Business flac

Cher Lloyd. 2018. Writer: ​iamBADDLUCK;Alexsej Vlasenko;Kate Morgan;Henrik Meinke;Jonas Kalisch;Jeremy Chacon.
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 Ashley Tisdale

Voices In My Head flac

Ashley Tisdale. 2018. Writer: John Feldmann;Ashley Tisdale.
17 Imagine Dragons

Machine flac

Imagine Dragons. 2018. Writer: Wayne Sermon;Daniel Platzman;Dan Reynolds;Ben McKee;Alex Da Kid.
18 Diplo

Close To Me flac

Diplo. 2018. Writer: Ellie Goulding;Savan Kotecha;Peter Svensson;Ilya;Swae Lee;Diplo.
19 Billie Eilish

When The Party's Over flac

Billie Eilish. 2018. Writer: Billie Eilish;FINNEAS.
20 Little Mix

Woman Like Me flac

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

Related questions

Hot questions

Language

Popular Tags