Obtener el nombre de la aplicación de NDK

Necesito conseguir el nombre de mi androide aplicación de la parte nativa algo así:

android.content.context context=(android.content.context) this;//current activiy Resources appR =context.getResources(); String packageName=context.getPackageName(); int id=appR.getIdentifier("app_name","string",packageName ); CharSequence txt = appR.getText(id); 

Mi código nativo así:

  jstring Java_com_AnalyticToolC_AnalyticToolActivity_JNISendData(JNIEnv* env,jobject entryObject,jobject contxt) { char *realAppName; realAppName=(char *)malloc(16 * 1024); jclass android_content_Context =(*env)->GetObjectClass(env, contxt); jmethodID midGetPackageName = (*env)->GetMethodID(env, android_content_Context, "getPackageName", "()Ljava/lang/String"); jstring packageName=(*env)->CallObjectMethod(env, contxt, midGetPackageName); jmethodID midGetResources = (*env)->GetMethodID(env, android_content_Context, "getResources", "()L"); jobject jResource=(*env)->CallObjectMethod(env, context, midGetResources); jclass resource_Class=(*env)->GetObjectClass(env, jResource); jmethodID midGetIdentifier = (*env)->GetMethodID(env, resource_Class, "getIdentifier", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String)I"); jstring app_name=(*env)->NewStringUTF(env,"app_name"); jstring TypeName=(*env)->NewStringUTF(env,"string"); int id=(*env)->CallObjectMethod(env, jResource, midGetIdentifier,app_name,TypeName,packageName); jmethodID midGetAppName = (*env)->GetMethodID(env, resource_Class,"getText","(I)Ljava/lang/String"); jstring appName=(*env)->CallObjectMethod(env, jResource, midGetAppName,id); realAppName=(*env)->GetStringUTFChars(env, appName, NULL); } 

Y acabo de pasar la actividad a mi methon nativo del código de java.

Y no tengo la oportunidad de escribir este código en la clase java, a continuación, llamarla forma de mi aplicación NDK Estoy tratando de pasar un objeto de contexto como jobject a mi código nativo, pero siempre se bloquea. Dosis cualquiera tiene alguna idea?

El acceso reflejado de Java en C es feo, feo, feo, como lo has demostrado. Pase el nombre de la aplicación como un parámetro de cadena extra.

EDIT: OK, usted quiere la reflexión, la reflexión que obtendrá.

Su método nativo pertenece a la clase AnalyticToolActivity . Como método de clase no estàtica, tiene un puntero en cada llamada. A diferencia de los métodos C ++ y Java, este puntero se pasa de forma explícita como el segundo parámetro. El método tiene dos parámetros obligatorios: un JNIEnv * y un jobject . El segundo corresponde al puntero del objeto Java.

Por lo tanto, si su AnalyticToolActivity es una subclase de Activity – muy probable – el parámetro entryObject es una instancia de Activity , lo que significa que es una instancia de Context . Así que deshacerse del tercer parámetro ( contxt ), Y su código JNI puede ir así:

 jclass android_content_Context =(*env)->GetObjectClass(env, entryObject); //or use FindClass jmethodID midGetPackageName = (*env)->GetMethodID(env, android_content_Context, "getPackageName", "()Ljava/lang/String;"); jstring packageName=(*env)->CallObjectMethod(env, entryObject, midGetPackageName); 

Etcétera.

¿Por qué necesita hacerlo desde el NDK? Tal vez sería más útil para nosotros ayudarle a depurar el problema pasando un objeto de contexto, y entonces simplemente podría pasar el nombre de la aplicación como una cadena.

  • ¿Cómo puedo activar todas las advertencias cuando se utiliza ndk?
  • Incluir la biblioteca estática pre-compilada usando NDK
  • ¿Cuáles son las funciones POSIX más importantes que no están disponibles en Android?
  • ¿Es posible ejecutar un binario de brazo nativo en un teléfono Android no enraizado?
  • Punteros compartidos: ¿hay alguna diferencia de gotcha entre la plantilla "sp <>" de Android y la plantilla "shared_ptr <>" de BOOST?
  • FFMPEG sws_scale Crash en Android
  • ¿Cómo utilizar la biblioteca FreeType del sistema Android en código nativo?
  • Diferencia entre armeabi y armeabi-v7a
  • OpenCV referencias indefinidas
  • Carga de una biblioteca nativa en una prueba de Android JUnit
  • ¿Cómo solucionar un bloqueo de la biblioteca del sistema Android (libwebcore.so)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.