Я пытаюсь добавить собственную сборную общую библиотеку в мой проект в Android Studio. Я использую gradle-experimental: 0.6.0-alpha5. Тем не менее, всякий раз, когда я пытаюсь добавить скомпилированную общую библиотеку к моей модели приложения, я получаю следующее сообщение об ошибке:Собственная предварительно созданная общая библиотека в Android Studio с экспериментальным плагином Gradle
Error:Cause: org.gradle.api.internal.PolymorphicDomainObjectContainerConfigureDelegate
библиотека добавляется в модель приложения, как это описывается Google Gradle Experimental Guide:
repositories {
prebuilt(PrebuiltLibraries) {
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("/path_to_libs/${targetPlatform.getName()}/shared_lib.so")
}
}
}
android.sources {
main {
jniLibs {
dependencies {
library "shared_lib"
}
}
}
}
Важнейшей линией является библиотека "shared_lib". Нет ошибки, если я раскомментирую эту строку.
Так как это не работает, я также попытался использовать руководство от ph0b.com. Они используют другой синтаксис для добавления нативных разделяемых библиотек (я только что вышел из заголовков, так как у меня нет ни одного каталога, включая все заголовки):
repositories {
libs(PrebuiltLibraries) {
shared_lib {
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("/path_to_libs/${targetPlatform.getName()}/shared_lib.so")
}
}
}
}
android.sources {
main {
jni {
dependencies {
library "shared_lib" linkage "shared"
}
}
}
}
Тем не менее, это не работает, как хорошо. Android Studio не копирует файл shared_lib в файл apk. Следовательно, я всегда получаю следующее сообщение об ошибке:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader [...] couldn't find "shared_lib.so"
Может ли кто-нибудь сказать мне, как я могу включить библиотеку исходной библиотеки в мой проект? Я использую buildToolsVersion = '22 .0.1 ' и compileSdkVersion = 22 как параметры сборки.
Возможно, вы можете попробовать с жестко закодированным путем .so вместо '$ {targetPlatform.getName()}'? – RaGe
Да, я уже это пробовал. Gradle может определенно разрешить путь, так как я получаю сообщение об ошибке, если я изменю путь к несуществующему файлу. Я все равно был бы рад, если будет решение моей проблемы. Тем не менее, я временно решил свою проблему, не используя ранее созданные библиотеки. Я добавил все необходимые файлы заголовков с помощью 'cppFlags.add (" - I $ {file ("./../../../ projects/test/include")} ". ToString())' и cpp файлы с 'srcDirs + =" ./../../../ projects/test/src/"' to jni. Но было бы лучше иметь возможность использовать предварительно созданные библиотеки. – budderick
вы могли бы запустить с '--stacktrace' и захватить больше ошибок? – RaGe