Android Studio下NDK编程生成so库说明以及遇到的坑

                             so动态库生成说明以及遇到的坑

        关于安卓的so库开发的摸索,以下是我个人的开发经历总结以及踩过的坑,希望对大家有所帮助,一起进步!下面说明下具体的开发步骤:

一、新建一个加载库文件并且声明和调用动态库本地方法的a.java文件

        开发so库,对应需要创建编写一个带有native声明的方法的java类,

java类中定义static方法加载动态链接库,大概如下图:

图1    带有native声明的方法的java类

二、  生成a.java对应的.h的文件

        在android studio自带的终端里面cd到工程名路径\app\build\intermediates\classes\debug目录下,编写命令javah -d  jni文件夹名(可自己定义)   类全名(路径+类名),比如:javah -d jni com.app.example.GpayTestJ 即可对应会生成以下.h文件。

注意这里有个坑:android studio2.2之后的版本有变动, build的文件对应的classes路径有所变动,变成了如下的路径:

build\intermediates\javac\debug\compileDebugJavaWithJavac\classes\


图2 AS2.2.3版本classes路径截图  

图3 AS4.1.1版本classes路径截图  

3.      新建对应的.c文件

在2执行后对应生成的jni文件夹下面新建一个任意命名的.c文件,做好对应的方法实现,这里就要看个人大佬的c语言的功底了。

4.     创建.mk文件

在jni文件夹下新建Android.mk文件

LOCAL_PATH := $(call my-dir)           //固定写法,把路径赋给LOCAL_PATH变量

include $(CLEAR_VARS)                  //清除其他LOCAL变量

LOCAL_MODULE := nativeTest             //这个模块的名字,最后生成的.so的名字就是它,要跟java里面的loadLibray的名字一样。

LOCAL_SRC_FILES := nativeTest.cpp     //这里是要编译的文件,

include $(BUILD_SHARED_LIBRARY)        //SHARED_LIBRARY就是动态库,即.so文件

ps:这里的写法是最简单的一个例子,用的时候把注释去掉。每一行都是很关键,不能省略。至于makefile怎么编写内容比较多,此处不赘述

注意这有个坑:.mk文件的名字一定要是Android.mk,不然ndk-build时生成so会失败!!!!!!!!!!!

图4 命名为非Android.mk时报错情况说明

5.       生成so库文件

在步骤2的路径下直接ndk-build即可生成so库文件。

另外:自己创建的jni文件夹也可放到src下面,只要对应cd到它的根路径下,然后直接ndk-build也可以生成对应的so库文件。

以上为大概的so库开发编成,以及个人遇到的坑,描述与不正确或者不妥的,欢迎指出来交流!!!

你可能感兴趣的:(Android Studio下NDK编程生成so库说明以及遇到的坑)