SO库的生成与使用

484 阅读2分钟

一、生成so库

1.1、创建Native项目

> 如图选择相应的Native选项,然后一直next下去即可

> 创建自己要加载so的java/kotlin文件

这里demo中创建的加载so的文件是MySoLib(这里可自主创建),需要着重注意的是这个文件的包名(全路径名),此处我的全路径名是"com.example.nativeprojecttest.testnative"(这个路径后在给到第三方使用这个so的时候会用到)

这里我的代码是:

package com.example.nativeprojecttest.testnative;
public class MySoLib {        
static {
//        System.loadLibrary("nativehook");       
     System.loadLibrary("nativeprojecttest");    
}    
  
 public native String stringFromJNI();
}

那么在当前项目中使用这个so的时候,就可以直接用MySoLib来使用了,例如:

MySoLib lib = new MySoLib();lib.stringFromJNI();

在当前项目中用以上方式使用即可。

1.2、生成so

> 首先要在defaultConfig中配置ndk,内容如下:

defaultConfig {        
    applicationId "com.example.nativehook"       
    minSdk 24        
    targetSdk 34        
    versionCode 1       
    versionName "1.0"        
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"        
    ndk {            
        //选择要添加的对应 cpu 类型的 .so 库。
        //            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'            
        abiFilters 'armeabi-v7a', 'arm64-v8a'            
        // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'        
    }    
}

> 点击cmake

然后在build产物中可以找到相关的so文件了:

这样第一步就完成了,可以拿着这个so文件直接放到第三方的App中使用了。

二、第三方使用so

2.1 新建一个新第三方项目,新建的方式可以跟第一种一样,也可以新建一个全新的非Native的App项目,此处省略。

2.2 配置so路径

> 先创建存放so的目录

在module中创建libs目录并将第三方的so放到该目录下,如图所示:

> 在android节点按照如下方式配置:

sourceSets {    
    main {       
     jniLibs.srcDirs = ['libs']    
    }
}

> 调用so类创建

创建一个第一部分中说的那个类(路径相同,类名相同)

> 使用

然后使用方式跟上面方式相同,

MySoLib lib = new MySoLib();
lib.stringFromJNI();