我已将2个.so预建库添加到Android Studio中的新项目中,该项目正在使用实验性gradle插件(com.android.tools.build:gradle-experimental:0.6.0-beta5)。
我的build.gradle文件如下所示:
apply plugin: 'com.android.model.application'
model {
repositories {
prebuilt(PrebuiltLibraries) {
gstplayer {
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("libs/libgstplayer.so")
sharedLibraryFile = file("libs/libgstreamer_android.so")
}
}
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.myexample.gstreamertest2"
minSdkVersion.apiLevel 19
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0"
buildConfigFields {
create() {
type "int"
name "VALUE"
value "1"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles.add(file('proguard-rules.pro'))
}
}
ndk {
moduleName "gstplayer"
}
productFlavors {
create("flavor1") {
applicationId "com.app"
}
}
// Configures source set directory.
sources {
main {
// jni {
// source {
// srcDirs = ['src/main/jni']
// }
// }
jniLibs {
dependencies {
library "gstplayer"
}
}
}
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
}
Gradle构建成功,但我无法在任何地方找到有关如何引用这些库的说明。我知道你可以在你的Java文件中创建public native String getInfoFromJni()
并引用你的jni文件夹中的原生.c文件,我已经能够使这个工作,但我不知道如何做类似的事情.so图书馆。
如何从java访问.so库中的方法?
答案 0 :(得分:0)
你应该创建一个包装器c lib:
1.-更改moduleName的名称以避免冲突:
ndk {
moduleName "gstplayerwrapper"
}
2.-在活动中加载包装器库
static{
System.loadLibrary("EcoLogSIL");
}
3.-建立你的项目
4.-创建一个调用包装器的函数,然后按alt + intro
5.-你应该在gtsplayerwrapper.c中有一个新功能,你可以在这里调用libgstplayer.so
JNIEXPORT void JNICALL
Java_your_activty_name_call_1wrapper(JNIEnv *env, jobject instance) {
// YOUR CODE HERE
}
不要忘记在gtsplayerwrapper.c中导入库
编辑添加标题
repositories {
prebuilt(PrebuiltLibraries) {
gstplayer {
headers.srcDir "src/main/jni/include"
binaries.withType(SharedLibraryBinary) {
sharedLibraryFile = file("libs/libgstplayer.so")
sharedLibraryFile = file("libs/libgstreamer_android.so")
}
}
}
}
在项目中创建此文件夹并复制.h文件