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?

2 Solutions collect form web for “Obtener el nombre de la aplicación de NDK”

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.

  • Escalado de vista de superficie OpenGL para diferentes DPI
  • Android: Captura de audio interno con SDK
  • Edificio Pango Cairo para Android NDK
  • ¿Cuáles son las herramientas para depurar código nativo en Android
  • El permiso USB obtenido a través de android.hardware.usb no se aplica a NDK
  • Android NDK, dos bibliotecas estáticas y vinculación
  • Error de Android NDK ndk-build helloJni
  • Suma de dos valores usando ndk android
  • La aplicación de Android NDK no puede acceder a ningún punto de interrupción
  • Android NDK clang compilador no puede encontrar std :: make_unique
  • ¿Qué es SLDataLocator_AndroidSimpleBufferQueue (Android 4.3)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.