Сбои FindClass в Android NDK - PullRequest
       1

Сбои FindClass в Android NDK

2 голосов
/ 26 августа 2011

У меня есть чисто нативное приложение для Android, точка входа которого:

 void android_main(struct android_app* state) 
 {
 }

Мне нужно получить доступ к информации об устройстве, например, android.os.Build.MODEL и в моем android_main, иметь следующее:

JNIEnv *env = state->activity->env;
    jclass build_class = env->FindClass("android/os/Build");
    jfieldID brand_id = env->GetStaticFieldID(build_class, "MODEL", "Ljava/lang/String;");
    jstring brand_obj = (jstring)env->GetStaticObjectField(build_class, brand_id);
const char *nativeString = env->GetStringUTFChars(brand_obj, 0);

К сожалению, он вылетает во второй строке - "FindClass". Я знаю, что env не является нулевым, потому что я проверил это, но в противном случае я не могу отладить это и выяснить, почему это происходит сбой: (* ​​1008 *

Ответы [ 2 ]

2 голосов
/ 27 августа 2011

Оказывается, мне нужно было:

 state->activity->vm->AttachCurrentThread(&env, NULL);

вместо

 JNIEnv *env = state->activity->env;

Это сообщение было полезным: http://blog.tewdew.com/post/6852907694/using-jni-from-a-native-activity

1 голос
/ 20 февраля 2014

Кроме того, вы можете сделать это в собственном коде: -

#include <sys/system_properties.h>
#define ANDROID_OS_BUILD_MODEL               "ro.product.model"       

char model_id[PROP_VALUE_MAX]; // PROP_VALUE_MAX from <sys/system_properties.h>.
int len;
len = __system_property_get(ANDROID_OS_BUILD_MODEL, model_id); 

// При возврате len будет равно (int) strlen (model_id).

model_id будет содержать reqinfo

См. this для всех констант

...