Android JNI, есть ли способ, которым код C ++ может напрямую читать базу данных sqlite приложения? - PullRequest
2 голосов
/ 22 сентября 2010

Я работаю над приложением Android с компонентом Java и компонентом C ++ через JNI.Компонент C ++ используется на других платформах.

Было бы намного проще, если бы компонент C ++ мог запрашивать существующую базу данных SQLite (через API-интерфейс SQLite C), не прибегая к вызовам оболочки на стороне Java.

Я знаю, что это длинный выстрел, кто-нибудь пытался это сделать?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2010

Нет, NDK предлагает только ограниченный apis.Официально поддерживаются только следующие области:

  • заголовки libc (библиотека C)
  • заголовки libm (библиотека математики)
  • заголовки интерфейса JNI
  • libzЗаголовки (сжатие Zlib)
  • заголовок liblog (регистрация в Android)
  • Заголовки OpenGL ES 1.1 и OpenGL ES 2.0 (библиотеки трехмерной графики) * Заголовок 1014 *
  • libjnigraphics (доступ к пиксельному буферу) (для Android 2.2 и выше).
  • A Минимальный набор заголовков для поддержки C ++

От ndk docs .

1 голос
/ 23 сентября 2010

Если вам не нужен доступ к базе данных из java, то, что касается android, это просто файл в каталоге, к которому у вас есть права.Доступ к нему через libsqlite.so и утвержденные java-оболочки платформы - это один из способов, но абсолютно ничто не мешает вам использовать собственную реализацию sqlite для работы с вашим собственным файлом, если вы действительно этого хотите.

Так как это ваша собственная реализация (возможно, основанная на копии текущей платформы), вы не злоупотребляете техническими средствами частного API, поскольку даже если версия платформы развивается несовместимыми способами, вы можете контролировать эволюциюваша собственная копия.

Если вы хотите оптимизировать размер пакета, вы можете сначала «оценить» libsqlite.so платформы, чтобы решить, можете ли вы работать с ней, а если нет, загрузить свою собственную версию с вашего сервера.На моем устройстве это только около 300К.Однако это также имеет некоторые зависимости от других библиотек, не относящихся к ndk, поэтому версия, полностью соответствующая «правилам» nkd, вероятно, будет немного больше, поскольку ей потребуется дублировать биты некоторых других вещей, таких как libutils и т. Д.*

Тогда возникает вопрос: лучше ли вам:

  • перезвонить через jni («путь для Android»)
  • использовать собственную реализацию (безопасную, но сложную для создания)
  • злоупотребляйте существующей библиотекой, пока она работает, а затем создайте свою собственную, если не можете понять, как адаптироваться к тем изменениям, которые ее сломали
0 голосов
/ 24 ноября 2010

Попробуйте использовать этот настроенный NDK со стандартной поддержкой библиотеки C ++ http://www.crystax.net/android/ndk-r4.php

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