ho bisogno di ottenere il nome della mia applicazione Android dal somethin lato nativo del genere:ottenere il nome dell'applicazione da NDK
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);
mio codice nativo del genere:
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);
}
e ho appena passare il attività al mio methon nativo dal codice java.
e non ho la possibilità di scrivere questo codice nella classe java, quindi chiamarlo dalla mia applicazione NDK Sto provando molto a passare un oggetto di contesto come jobject al mio codice nativo ma si blocca sempre. dose qualcuno ha qualche idea?
il tuo problema è "() Ljava/lang/String". Dovresti usare questo "() Ljava/lang/String;" –
[il modo più semplice] (http://stackoverflow.com/a/6284443/192373) è di leggere '/ proc/MyPID/cmdline'. –
Rilevante http://pt.stackoverflow.com/q/145869/8984 – Florida