美文网首页后端砖头
AS jni开发流程实例讲解

AS jni开发流程实例讲解

作者: 三十五岁养老 | 来源:发表于2022-05-31 22:21 被阅读0次

    已有工程使用已存在的so库

    注意 :不管动态注册还是静态注册,jni里面的函数和java 类名包名都是一一对应关系,两个不同包名的工程或者两个类无法使用同一个jni库。同一个工程下面多个类都调用jni库,可以采取辅助类或者辅助jar包的方式

    添加so库到项目

    第一种方式 :将库放置libs下面
    由于Android Studio中,则会默认匹配main下的jniLibs目录,故如果将库放在libs下面 需要在build.gradlel里面添加如下配置

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

    此时将so库放到libs下面,在sync以下,AS就会自动生成jniLibs文件夹,并且有了放在libs下面的so库


    捕获.PNG

    第二种方式:手动创建jniLibs 文件夹,将库手动放置jniLibs 下面
    在指定位置新建jniLibs文件夹,注意大小写
    将so库复制到jniLibs 文件夹下编译即可


    捕获.PNG

    如果要精简通过so库来减少安装包的大小其实还可以通过动态选择需要添加的.so库
    在App下的build.gradle中配置:

    ndk {
                //选择要添加的对应cpu类型的.so库。
                abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
                // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
            }
    

    注意: libs 和 jniLibs是冲突的,so库只能放在一处, 如果放在libs下面,并且指定 jniLibs.srcDirs = ['libs'], 那么手动放在jniLibs下面的库将不会加载,所以两边都有时 需要合并

    java代码调用so库

    捕获.PNG
    • 调用方法前 加载so库
    • 声明native方法
    • 调用native方法

    已有工程NDK开发

    方式一 新建module方式

    优点:输出aar包,多个工程可以共用jni,不用jni注册函数和调用函数包名类名一致,相当于新建了辅助aar用于jni调用

    新建->module->Android Native Library


    捕获.PNG

    选择完后AS工程会多出一个module


    捕获.PNG
    build nativelib 在对应build文件夹下面会生成aar包
    捕获.PNG
    方式二 主项目中NDK开发

    使用传统jni目录开发

    • File->new->Folder->JNI Folder
      切换到project模式会看到jni文件夹,在jni文件夹下新建cpp、Android.mk


      image.png

      使用cmake开发

    • File->Add C++ to module


      捕获.PNG

      选择创建CmakeLists这个选项后AS自动生成cpp目录如下


      捕获.PNG

    新工程NDK开发

    新建 工程 选择 native C++


    捕获.PNG

    选择完后 AS会自动生成CPP文件夹,里面包含 CMakeList 和 cpp 文件


    捕获.PNG

    AndroidStudio更新到2.2,有了CMake和传统JNI两种开发NDK的方法,新建native工程只能得到cmake方式,要想jni开发方式,只能普通项目转jni,具体参考:https://blog.csdn.net/chenhuakang/article/details/77364926

    相关文章

      网友评论

        本文标题:AS jni开发流程实例讲解

        本文链接:https://www.haomeiwen.com/subject/wddgurtx.html