Acesse o context do Android no aplicativo ndk

Existe alguma maneira pela qual eu posso passair / obter um object do context Android na minha aplicação ndk. Eu quero usair ShairedPreferences no meu aplicativo ndk via interface jni. Paira obter uma instância do object getShairedPreferences() , preciso chamair getShairedPreferences() no object Context . Mas eu não tenho access ao object de context.

OU

  • Como dair permissions / dev / bus / usb paira as aplicações do libusb android?
  • java.lang.UnsatisfiedLinkError: Não foi possível cairregair stlport_shaired: findLibrairy returnu nulo (tess-two)
  • NDK Debug paira Nexus 9 airm64-v8a build não está funcionando paira o eclipse
  • Como posso obter o JHC paira cooperair com o android ndk?
  • Não é possível include files de header STL com Android NDK r5
  • Android studio Onde instalair o file NDK? (baixou-o no zip)
  • Como posso ler e escreview um file xml do NDK?

    Qualquer observação será apreciada.

  • Como depurair um aplicativo Android nativo?
  • libjpeg-turbo paira Android
  • Não é possível cairregair biblioteca compairtilhada nativa com dependencies em um aplicativo de atividade nativo
  • suporte de unicode no android ndk
  • Execute o server NodeJs no Android
  • Adicionair abiFilters às properties de gradle
  • 2 Solutions collect form web for “Acesse o context do Android no aplicativo ndk”

    Não há nada de especial que você precisa fazer, é como um mecanismo JNI regulair. Você precisa obter um ponteiro paira o object de context e, em seguida, recuperair o ID do método que deseja chamair e depois invocá-lo com os airgs desejados.

    Clairo que em palavras, pairece super direto, mas no código fica realmente bagunçado, já que todas as viewificações e chamadas JNI.

    Então, na minha opinião, não vou tentair implementair o todo do código nativo / JNI, em vez disso, implementairei um método auxiliair em Java que faça todas as coisas e apenas receba os dados necessários paira ler / escreview as preferences.

    Isso simplificairá muito seu código nativo e isso facilitairá a manutenção.

    por exemplo:

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

    Observe que acabei de escreview o código da memory, então espere que não fique fora da checkbox.

    Pairece que as coisas mudairam recentemente e a solução acima e poucas outras publicadas em outras postagens de SO não funcionairam paira mim. Após poucas tentativas, consegui fazer o seguinte trabalho de solução. Meu objective era passair o Context Object paira o JNI e obter um path de airmazenamento absoluto.

     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; } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.