使用openssl库文件进行android jni 开发

上一篇文章讲了如何在windows下使用androidstudio编译openssl库文件给我们使用。

本片文章教大家如何使用编好的openssl库进行调用。

首先大家来了解一下jni开发的两种方式:

     1 ndk-build 该方式就是在main包下建立jni文件夹,生成的cpp文件就要放在jni里面,然后定义android.mk和application.mk两个文件,具体的请参考其他文章。变量定义好后,进入terminal 下进入jni文件夹,通过命令ndk-build即可编译。生成出来的so文件要放回本项目,放在jniLibs下面,java文件会自动调用。

    2 cmake方式,该方式操作比较简单,现在androidstudio3.0默认的就是这种方式进行编译,只需要加一个cmakelists文件,在gradle里面配置一下即可。最后gradle 进行sync一下就能够直接运行。

本片文章采用第二种方式进行编译。由于我不会c++公司项目也不能外放,所以只用一个例子进行说明。c++里有区别,其他情况都一样的,

好的,现在开始:

首先新建一个项目,勾选下方的include C++ Support,后边的都默认即可。


这是一个生成出来的默认的项目


但是我们不用这个,在firstcpp下新建一个NativeHelper类,如下



上边的名字往后看,在cmakelist文件里进行指定,没事,爆红也不要管他。这个时候rebuild项目


依次去build下找到生成的class文件

进入terminal下,进入debug文件下输入命令javah -jni wangmian.www.firstcpp.NativeHelper

生成好后会在debug下发现


头文件,这时候把头文件相应的拷贝到cpp下即可,同时建立相应的c文件。


有人问c文件怎么写,基本就是这样,参数会有一些变化,多百度,照猫画虎,学习一下基本的写法。

好了,接下来该配置openssl了。把上篇文章中的openssl 下有头文件的整体复制过来放在cpp文件夹下,如图


在main文件夹下建立jniLibs文件夹,把上篇文章生成出来的so文件整体拿过来放在jniLibs下。重点是libssl和libcrypto两个so文件。


接下来配置CMakeLists.txt文件


第一个红框是我们将要生成so文件的名字,之后的调用也要用这个名字,自己定义即可,

第二个红框是我们要进行编译的cpp文件,有几个写几个,h文件不用写

接下来指定一下库文件位置:include_directories(src/main/cpp)  

接下来定义两个库



cmake文件至此完成。在app的build.gradle文件夹下边 defaultConfig结点里添加:

externalNativeBuild {

            cmake {

                cppFlags "-std=c++14 -frtti -fexceptions  -ffunction-sections -fdata-sections -Ofast"

              abiFilters 'x86','x86_64','armeabi','armeabi-v7a',

'arm64-v8a','mips','mips64'

            }

        }




到这里就大功告成了。你可以尽情的往cpp里添加代码


运行之后的so文件在这个地方,会自动打入apk内部,如果你是要给别人进行调用的话。还需要另外加入,其实都一样的,放入到jniLibs下或者libs下,进行调用。不过调用的时候要注意,java的文件的包名。层级都是要和cpp里的文件名,方法对应的,

所以你可以自己建一个library用同样的包名,或者直接在自己的app里建一个相同的包名。即可。

好的,最后地址奉上:欢迎收看

你可能感兴趣的:(使用openssl库文件进行android jni 开发)