JNI реализован по-разному на некоторых устройствах? - PullRequest
1 голос
/ 05 апреля 2011

У меня есть родное приложение (2.2), которое без проблем работает на моем старом устройстве Motorola Droid (2.1). Недавно я купил новый Sanyo Zio (2.2.1), но тот же код, который работал на Droid, получает следующую ошибку времени выполнения:

04-05 12:43:34.006: WARN/dalvikvm(901): JNI WARNING: expected return type 'I'

и код затем прерывается. Я пытаюсь получить длинную переменную со стороны Native с помощью следующего вызова:

static jmethodID = java_getScore = env->GetStaticMethodID(javaClass, "native_getScore", "()J");

Реализация JNI отлично работает на моем старом Droid, но не на более новом Zio.

Что-то я упустил из виду в своей первоначальной реализации?

Спасибо за ваше время.

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

JNI страдает по крайней мере одним существенным недостатком в дополнение к множеству меньших недостатков: он не является платформой / устройством неспецифичным.

Другая проблема, которая заставляет меня ненавидеть JNI, заключается в том, что вы не можете получить доступ к произвольным функциям в произвольных библиотеках DLL. JNI требует, чтобы вы написали слой клея на C / C ++, чтобы делать то, что вы собираетесь делать изначально.

Так что да, короче говоря, реализация JNI отличается на каждом устройстве.

0 голосов
/ 30 апреля 2012

Нет, JNI не реализован по-другому на любом устройстве , о котором я знаю.Но это меняется от релиза к релизу (я знаю это, потому что я часто работаю над этим).В частности, более новые выпуски могут найти больше ошибок в вашем коде.Лучшая защита - запустить ваш код с CheckJNI в новейшей версии: http://android -developers.blogspot.com / 2011/07 / debugging-android-jni-with-checkjni.html

В частности, более новые выпуски сообщат о немного лучшем сообщении об ошибке в вашем случае, сообщая вам, что вы вызвали и что вы должны были вызвать, и какой метод вы пытались вызвать.

0 голосов
/ 03 октября 2011

Как вы наконец узнали, (и я также только что выяснил) существуют разные функции для вызова методов Java из нативного кода.Они перечислены здесь: http://java.sun.com/docs/books/jni/html/functions.html#87060

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...