Рейтинг:
0
Nick_3141592654
Невозможно использовать C++ без JNI-дело в том, что JNI * - это нативный код, то есть сам факт того, что вы хотите использовать C++ (или C), означает, что вы используете нативную библиотеку в среде Java => JNI.
Помните, что вам нужно только предоставить код оболочки JNI для вашего API между двумя доменами: Java и native (C++). Поэтому, хотя у вас может быть несколько десятков (даже сотен) классов/методов C++, крайне маловероятно, что все они должны быть представлены в вашем интерфейсе JNI.
Подумайте об этом... каким-то образом вам придется перенести эти аргументы метода Java в мир C++ и аналогично возвращать результаты из C++ в Java. Вы не можете убежать от необходимости справиться с этим.
Сказав все это, если, например, у вас есть большое количество требуемых вызовов методов из Java в JNI, которые имеют аналогичные сигнатуры методов, вы можете обобщить их. Например, вы можете передать String, идентифицирующий требуемый метод JNI, вместе с массивом объектов переменной длины (или целыми числами, числами с плавающей запятой, двойными числами и т. Д.). Один метод JNI может анализировать такой список аргументов и «отдавать» вызов соответствующему классу / методу C ++ и аналогичным образом предоставлять общий набор возвращаемых результатов. Это потребует дополнительных предварительных вложений для настройки интерфейса, но после этого вы сможете легко добавлять вызовы методов. Я бы рекомендовал этот подход только в том случае, если у вас есть много интерфейсов JNI, хорошо поддающихся такому обобщению. Если нет, у вас нет другого выбора, кроме как начать печатать!
vishalgpt
Согласиться с вами. Извини, что немного неудачно. Это типичная библиотека "C", а не библиотека" C++". Я провел некоторые поиски и обнаружил, что **JNI** является здесь главным героем. Есть определенные требования/ситуации, когда нужно использовать родную библиотеку в android. Нравится вам это или нет, но это большой факт. Это приносит преимущество с недостатком также.
Есть ли там какие-нибудь хорошие книги JNI, которые подходят для разработки android? С хорошими примерами.
Nick_3141592654
Я не нашел большой книги, специально посвященной JNI, имея несколько книг, но это тема, которая, кажется, замалчивается. Я нахожу, что большинство книг для android тралят те же темы,которые уже очень хорошо освещены учебниками Google. Однако есть несколько довольно хороших онлайн-ресурсов, например этот: https://www.ibm.com/developerworks/java/tutorials/j-jni/j-jni.html.
Я думаю, что самый простой способ "войти" сейчас - взять один из примеров проектов Google для JNI и учиться на примере.
Как только вы сможете построить библиотеку JNI и сделать что-то вроде "Привет, мир!" в JNI, вы скоро будете летать.
Что касается плюсов и минусов, то, конечно, большой профи-это производительность. Я написал приложение для обработки видео в реальном времени на чистом Java, на самом деле не ожидая, что оно будет работать достаточно быстро, и действительно, оно было ужасно медленным. JNI дал мне, по крайней мере, улучшение скорости x10. Если, однако, вам действительно не нужна такая скорость, то, как говорят стандартные учебники Google, не беспокойтесь о JNI. Вам действительно нужно определить, что в этом есть необходимость, а не делать это только потому, что это кажется "профессиональным" или вообще хорошим делом.