Я хочу включить в свой проект yctung's AndroidLibSVM, поэтому я следовал его инструкциям, чтобы импортировать .AAR и установить зависимости.
Установить
Установка проста, вы просто импортируете нашу библиотеку AAR в свой проект Android>, выполнив следующие действия:
Щелкните правой кнопкой мыши по вашему модулю -> новый -> модуль -> Импортировать пакет .JAR / .AAR ->> выберите наш Release / androidlibsvm-release.aar
После этого вы должны добавить зависимость приложения:
Щелкните правой кнопкой мыши на модуле приложения -> открыть настройки модуля -> заблокировать приложение ->> зависимости -> + -> зависимость модуля -> androidlibsvm
Теперь я мог импортировать и работать с его библиотекой, как ожидалось, и Android Studio могла бы скомпилировать код и собрать без каких-либо ошибок. Приложение работает нормально на эмулируемом устройстве, однако оно вылетает на моем физическом устройстве, как только оно пытается запустить часть кода, ссылающуюся на библиотеку yctung, со следующей ошибкой:
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "__aeabi_memcpy" referenced by "/data/app/com.krautkremer.nils.mymirror-1/lib/arm/libjnilibsvm.so"
Ссылаясь на этот SO-вопрос, ошибка может быть вызвана неправильными настройками Cmake / Gradle. Если я правильно понял, Тунг использовал ndk-build для своего проекта, в то время как я собираюсь с Cmake. Поэтому в моем случае его инструкций по установке библиотеки может быть недостаточно. На самом деле, я не внес никаких изменений в CMakeLists.txt по умолчанию, который, как я понимаю, имеет решающее значение для Cmake.
Я попытался добавить несколько строк в файл build.gradle и / или файл CmakeLists, поскольку они обычно предлагаются в SO-решениях, но безуспешно, но я должен признать, что я действительно не понимаю, что я делаю, даже после того, как Чтение официального гида .
Я немного заблудился здесь, так как я едва знаю разницу между ndk-build и Cmake, не говоря уже о том, как правильно их настроить или даже если это необходимо в этом случае.
Я был бы очень признателен, если бы кто-нибудь мог объяснить мне, как я могу правильно интегрировать AndroidLibSVM в мой проект, какие изменения я должен внести в мои файлы gradle / cmake и как мне настроить мои каталоги (в случае это является частью ответа).
Все, что я скачал до сих пор, это .aar, который действительно содержит несколько файлов .so, но я не понимаю, где их разместить.
Теперь,
это мой build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.krautkremer.nils.mymirror"
minSdkVersion 23
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
arguments "-DANDROID_PLATFORM=android-23"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
//exclude 'META-INF/proguard/androidx-annotations.pro'
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.media:media:1.1.0-alpha01'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
implementation 'com.google.android.material:material:1.1.0-alpha01'
implementation 'androidx.annotation:annotation:1.0.1'
implementation 'com.google.firebase:firebase-core:16.0.6'
implementation 'com.google.firebase:firebase-ml-vision:18.0.2'
implementation 'com.google.firebase:firebase-ml-common:16.1.6'
implementation 'com.google.firebase:firebase-ml-vision-face-model:17.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1-alpha01'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1-alpha01'
implementation project(':androidlibsvm-release')
}
apply plugin: 'com.google.gms.google-services'
а это мой CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp)
find_library(
log-lib
log)
target_link_libraries(
native-lib
${log-lib})
Это - моя структура каталогов.
Заранее спасибо. Если вам нужно больше, чтобы помочь мне, я был бы рад помочь вам помочь;)