Android Studioのプロジェクトにネイティブのビルド済み共有ライブラリを追加しようとしています。私はgradle-experimental:0.6.0-alpha5を使用しています。私は自分のアプリケーションモデルに構築済みの共有ライブラリを追加しようとするたびしかし、私は次のエラーを取得する:実験的なGradleプラグインを使用したAndroidスタジオのネイティブ事前ビルド共有ライブラリ
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を使用しています。
あなたは '$ {targetPlatform.getName()}'の代わりに.soにハードコーディングされたパスを試してみることができますか? – RaGe
はい、私はすでにそれを試みました。存在しないファイルへのパスを変更するとエラーが発生するので、Gradleは確実にパスを解決できます。私の問題の解決策があるなら、私はまだ喜んでいます。しかし、私は一時的に私の問題を解決しました。私は 'cppFlags.add(" - I $ {file( "./../../../ projects/test/include")} "。toString())'とcppですべての必要なヘッダファイルを追加しました。 'srcDirs + =" ./../../../ projects/test/src/"'〜jniのファイルを作成します。しかし、あらかじめ構築されたライブラリを使用できるようにする方が良いでしょう。 – budderick
あなたは '--stacktrace'を実行してエラーの詳細を取得できますか? – RaGe