Я не думаю, что это правильно - код JNI и собственный код .То, что вы называете «кодом JNI», - это тот же нативный код, что и любой другой, оно просто использует методы и классы, определенные в библиотеке JNI.Ведь сама среда выполнения Android написана на C / C ++, поэтому JNI - это просто интерфейс к ней.
Теперь к вашему вопросу.
Из соображений производительности обычно лучше отделить вашу логику от JNI, потому что это влечет за собой дополнительные накладные расходы.Например, более эффективно использовать const char *
, а не jstring
, если ваша строка не должна пересекать собственную / управляемую границу.Как правило, не используйте типы JNI для переменных, которые не пересекают границу.
С точки зрения design обычно также лучше определять интерфейс отдельно от логики, поскольку он позволяетлегко изменить один, не меняя другой.Тот же принцип, что и при использовании в Java, рекомендуется использовать interface
, а не class
.Но кроме того, на карту поставлена переносимость вашего кода.
Единственный случай, когда я вижу, где было бы разумно поместить весь код в файлы, использующие JNI, - это очень маленькие нативные компоненты, которые не работают.действительно не включает в себя какую-либо сложную логику.Как простая встроенная функция проверки номера лицензии или пароля.