Я разрабатываю приложение для Android, в которое потребуется загрузить самокомпилируемый плагин sqlite (libsimple). Скомпилированный плагин представляет собой файл .so.
sqlite-android может загружать такой файл как плагин. Но я новичок в разработке для Android и не знаю, как правильно загрузить файл.
В настоящее время я помещаю скомпилированный плагин в jniLibs.
app/
├─ src/
│ ├─ main/
│ │ ├─ jniLibs/
│ │ │ ├─ x86_64/
│ │ │ │ ├─libsimple.so
│ │ │ ├─ arm64_v8a/
│ │ │ │ ├─libsimple.so
Встроенный APK-файл содержит файлы.
apk-debug.apk/
├─ lib/
│ ├─ x86_64/
│ │ ├─libsimple.so
│ ├─ arm64_v8a/
│ │ ├─libsimple.so
Путь, определенный в коде, выглядит следующим образом:
private val libsimplePath = "${context.applicationInfo.nativeLibraryDir}/libsimple.so"
Однако при запуске приложения в студии Android с API 35 возвращаемый путь имеет вид
data/app/~~W0ZleGXEDPvGfIKN22O5Ow==/com.hal9000com.picfinder-eadN36R50XdAo86g8fxllN==/lib/x86_64/libsimple.so
и следующий тестовый код вернет false. Загрузка плагина также не удастся.
fun isPathReadable(path: String): Boolean {
val file = File(path)
return file.canRead()
}
Но когда я загружаю файл .so и выбираю его с помощью средства выбора файлов, он получит путь типа
/data/user/0/com.hal9000com.picfinder/cache/libsimple.so
и плагин будет работать.
Опрос ChatGPT не дал результатов, и я попробовал добавить
в AndroidManifest.xml, но ничего не меняется.
Часть кода, загружающая расширение, выглядит следующим образом.
import io.requery.android.database.sqlite.SQLiteDatabase
import io.requery.android.database.sqlite.SQLiteDatabaseConfiguration
import io.requery.android.database.sqlite.SQLiteCustomExtension
private val libsimplePath = "${context.applicationInfo.nativeLibraryDir}/libsimple.so"
private val cfg = SQLiteDatabaseConfiguration(":memory:", SQLiteDatabase.OPEN_READWRITE)
val ext = SQLiteCustomExtension(libsimplePath, null)
cfg.customExtensions.add(ext)
private val db = SQLiteDatabase.openDatabase(cfg, null, null)
Укажите путь к файлу .so, как определено в исходном коде sqlite-android.
public final class SQLiteCustomExtension {
public final String path;
public final String entryPoint;
/**
* Creates a SQLite extension description.
*
* @param path path to the loadable extension shared library
* e.g. "/data/data/(package)/lib/libSqliteICU.so"
* @param entryPoint extension entry point (optional)
* e.g. "sqlite3_icu_init"
*/
public SQLiteCustomExtension(String path, String entryPoint) {
if (path == null) {
throw new IllegalArgumentException("null path");
}
this.path = path;
this.entryPoint = entryPoint;
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ndroid-app
Как добавить файл плагина sqlite (.so) в приложение Android? ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1728541187
Anonymous
Я разрабатываю приложение для Android, в которое потребуется загрузить самокомпилируемый плагин sqlite (libsimple). Скомпилированный плагин представляет собой файл .so.
sqlite-android может загружать такой файл как плагин. Но я новичок в разработке для Android и не знаю, как правильно загрузить файл.
В настоящее время я помещаю скомпилированный плагин в jniLibs.
app/
├─ src/
│ ├─ main/
│ │ ├─ jniLibs/
│ │ │ ├─ x86_64/
│ │ │ │ ├─libsimple.so
│ │ │ ├─ arm64_v8a/
│ │ │ │ ├─libsimple.so
Встроенный APK-файл содержит файлы.
apk-debug.apk/
├─ lib/
│ ├─ x86_64/
│ │ ├─libsimple.so
│ ├─ arm64_v8a/
│ │ ├─libsimple.so
Путь, определенный в коде, выглядит следующим образом:
private val libsimplePath = "${context.applicationInfo.nativeLibraryDir}/libsimple.so"
Однако при запуске приложения в студии Android с API 35 возвращаемый путь имеет вид
data/app/~~W0ZleGXEDPvGfIKN22O5Ow==/com.hal9000com.picfinder-eadN36R50XdAo86g8fxllN==/lib/x86_64/libsimple.so
и следующий тестовый код вернет false. Загрузка плагина также не удастся.
fun isPathReadable(path: String): Boolean {
val file = File(path)
return file.canRead()
}
Но когда я загружаю файл .so и выбираю его с помощью средства выбора файлов, он получит путь типа
/data/user/0/com.hal9000com.picfinder/cache/libsimple.so
и плагин будет работать.
Опрос ChatGPT не дал результатов, и я попробовал добавить
в AndroidManifest.xml, но ничего не меняется.
Часть кода, загружающая расширение, выглядит следующим образом.
import io.requery.android.database.sqlite.SQLiteDatabase
import io.requery.android.database.sqlite.SQLiteDatabaseConfiguration
import io.requery.android.database.sqlite.SQLiteCustomExtension
private val libsimplePath = "${context.applicationInfo.nativeLibraryDir}/libsimple.so"
private val cfg = SQLiteDatabaseConfiguration(":memory:", SQLiteDatabase.OPEN_READWRITE)
val ext = SQLiteCustomExtension(libsimplePath, null)
cfg.customExtensions.add(ext)
private val db = SQLiteDatabase.openDatabase(cfg, null, null)
Укажите путь к файлу .so, как определено в исходном коде sqlite-android.
public final class SQLiteCustomExtension {
public final String path;
public final String entryPoint;
/**
* Creates a SQLite extension description.
*
* @param path path to the loadable extension shared library
* e.g. "/data/data/(package)/lib/libSqliteICU.so"
* @param entryPoint extension entry point (optional)
* e.g. "sqlite3_icu_init"
*/
public SQLiteCustomExtension(String path, String entryPoint) {
if (path == null) {
throw new IllegalArgumentException("null path");
}
this.path = path;
this.entryPoint = entryPoint;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79072952/how-to-add-a-sqlite-plugin-file-so-to-an-android-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия