Articles of jni

Отправка int s между Java и C

У меня есть код обработки изображений Java на Android, который действует на два больших массива int. В большинстве случаев Java достаточно быстро, но мне нужно использовать C через JNI и NDK для ускорения нескольких операций. Единственный способ, которым я знаю, что я могу передать данные из массивов int в C, – использовать ByteBuffer.allocateDirect для создания […]

Возвращает массив String по методу JNI

Мне нужно получить список строк (char *) из C ++ и вернуть его на Java. Как я могу это сделать? Я думаю, что одним из решений является возвращение большой строки, предварительно определенной как: «[item1] [item2]» и сделать разделение на Java, но это не похоже на правильный подход.

Отправка параметра android.content.Context для функции с JNI

Я пытаюсь создать метод, который проверяет подключение к Интернету, которому нужен параметр Context. JNIHelper позволяет мне вызвать статические функции с параметрами, но я не знаю, как «извлечь» класс активности Cocos2d-x, чтобы использовать его в качестве параметра. public static boolean isNetworkAvailable(Context context) { boolean haveConnectedWifi = false; boolean haveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) context.getSystemService( […]

Заполнение данных в растровом файле Android как можно быстрее от C

Мне удалось создать android.graphics.Bitmap, и я успешно заполняю его с помощью команды SetPixels. Проблема в том, что я начинаю с RGBA-данных. Затем я создаю jintArray. Затем я вызываю SetIntArray (эффективно memcpying данные в буфер). Затем, наконец, я вызываю setPixels, чтобы фактически установить пиксели (что предположительно вызывает другую копию). Одна большая проблема заключается в том, что […]

Как я могу эффективно отлаживать код C, который обернут JNI в Eclipse? (Android Dev)

У меня есть segfault, но я не знаю, как его найти. Советы?

Как применяется Android-разрешение?

Если я вызову функцию socket() в методах JNI C, приложение будет по-прежнему терпеть неудачу с ошибкой разрешения. И если я положу строку разрешений на использование в AndroidManifest.xml, проблема будет исправлена. Таким образом, похоже, что проверка доступа к Android не реализована в виртуальной машине Dalvik, так как я вызываю функцию C и все еще проверяется. Я […]

Android NDK переполняет dalvik локальную справочную таблицу JNI

У меня есть следующая проблема: из c ++ я посылаю огромную строку [] в java. Огромное = не более 20 строк; Я делаю следующее jint jtype = 2; jstring emptyString = env->NewStringUTF(""); jobjectArray data = (jobjectArray)env->NewObjectArray(7, env->FindClass("java/lang/String"), emptyString); env->SetObjectArrayElement( data,0,env->NewStringUTF(item->get_id().c_str()); env->SetObjectArrayElement( data,1,env->NewStringUTF(item->get_number().c_str()); env->SetObjectArrayElement( data,2,env->NewStringUTF(item->get_fullname().c_str()); env->SetObjectArrayElement( data,3,env->NewStringUTF(item->get_mf().c_str()); env->SetObjectArrayElement( data,4,env->NewStringUTF(item->get_dob().c_str()); env->CallVoidMethod(dao, jsaveItem, data, jtype); int i; for […]

Вызов функций JNI в имени пакета Android, содержащем знак подчеркивания

Я пытаюсь реализовать кодировку MP3 в Android, используя библиотеку LAME, следуя этим руководствам: Lame MP3 Encoder компилируется для Android http://developer.samsung.com/android/technical-docs/Porting-and-using-LAME-MP3-on -Android-с-JNI Однако я получаю java.lang.UnsatisfiedLinkError, который, я полагаю, может быть связан с тем, что мое имя пакета содержит символ подчеркивания, который он интерпретирует как полную остановку. Глядя на мой код ниже, вероятно, эта проблема и […]

Android – сбой при загрузке библиотеки

У меня есть аналогичная проблема с этим вопросом , но немного другая. Я скомпилировал библиотеку .so для использования с JNI. Поскольку он большой (15 МБ), я помещаю его в SDCard вместо стандартного приложения. Файл называется libSample.so, и он находится в /data/library/libSample.so Я загружаю его в статический блок инициализации: try { File sdcard = Environment.getExternalStorageDirectory(); File […]

Получение допустимого указателя JNIEnv

У меня есть C ++ dll, которую я хочу использовать в Unity, экспортируя функции на C #. Проект Unity работает на устройствах Android, а код C ++ использует java. Для инициализации C ++ мне нужно сначала вызвать следующую функцию: void api_initialize(JNIEnv* env, jobject* app_context, jobject* class_loader) { JavaVM* vm = nullptr; env->GetJavaVM(&vm); if (!vm) { […]