Android 引入so包的两种方式

来源:互联网 发布:mac字典扩展 编辑:程序博客网 时间:2024/06/06 05:01

参考:http://jingyan.baidu.com/article/e3c78d644baaf23c4d85f57d.html

            http://blog.csdn.net/wulianghuan/article/details/44567001

两个方法,我使用的是方法二,方法一没有测试。


方法一、

1、在src/main中添加 jniLibs文件夹 ,把.so复制进去

android studio 中 添加.so 文件












  











2、在build.gradle中就添加这么几行  ,  看图

 

 sourceSets {

        main {

            jniLibs.srcDirs = ['libs']

        }

    }

android studio 中 添加.so 文件

















3、然后make project

android studio 中 添加.so 文件







4、切换到android结构下,你会看到 jniLibs 中.so已经变成了.jar文件,证明已经成功
android studio 中 添加.so 文件
















注意:此方法成功的android studio版本是1.2.1.1

方法二、

其实很简单。这里以集成JPUSH为例,看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。


首先,在我们的Module的根目录中建立libs目录,将jpush集成SDK中的so文件分别拷入,截图如下:




然后就是编写我们的build.gradle文件。

关于so文件引入的配置很简单,代码配置如下:

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {        destinationDir file("$projectDir/libs")        baseName "Native_Libs2"        extension "jar"        from fileTree(dir: "libs", include: "**/*.so")        into "lib"    }    tasks.withType(JavaCompile) {        compileTask -> compileTask.dependsOn(nativeLibsToJar)    }


自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into "lib",那么动态运行库就被拷入到lib目录中。

完整的build.gradle文件如下:

apply plugin: 'com.android.application'android {    compileSdkVersion 21    buildToolsVersion "21.1.0"    defaultConfig {        applicationId "com.wujay.footerballstar"        minSdkVersion 8        targetSdkVersion 21        versionCode 1        versionName "1.0"    }    buildTypes {        release {            runProguard false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {        destinationDir file("$projectDir/libs")        baseName "Native_Libs2"        extension "jar"        from fileTree(dir: "libs", include: "**/*.so")        into "lib"    }    tasks.withType(JavaCompile) {        compileTask -> compileTask.dependsOn(nativeLibsToJar)    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:21.0.0'    compile files('libs/jpush-sdk-release1.7.2.jar')    compile files('libs/umeng_sdk.jar')    compile files('libs/libammsdk.jar')}

0 0
原创粉丝点击