使用实验性gradle插件在Android Studio中使用java中的预构建本机.so库

时间:2016-03-23 13:35:27

标签: android android-studio android-ndk android-gradle

我已将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库中的方法?

1 个答案:

答案 0 :(得分:0)

你应该创建一个包装器c lib:

1.-更改moduleName的名称以避免冲突:

ndk {
     moduleName "gstplayerwrapper"
    }

2.-在活动中加载包装器库

static{

    System.loadLibrary("EcoLogSIL");

}

3.-建立你的项目

4.-创建一个调用包装器的函数,然后按alt + intro

enter image description here

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文件