简介
通过android studio生成so库的实践。
上一篇记录的是通过eclipse生成so的方法eclipse生成so库实践,这里记录一下通过android studio是怎么生成so库的,参考文章http://www.jianshu.com/p/0c0d37c9a2db,这篇blog主要是参考上面文章实现,自己做了一部分修改,以及实现时遇到了一些坑,这里记录一下。
配置NDK
- 下载ndk
下载地址:http://developer.android.com/intl/zh-cn/ndk/downloads/index.html 解压配置环境变量
验证配置成功
- 设置android studio ndk路径
JNI开发
添加native接口注意写好native接口和System.loadLibrary()。
执行Build->Make Project,生成了.class文件,.class文件的生成路径是在 app/build/intermediates/classes/debug下
javah生成c头文件
点击”View->Tool Windows->Terminal“,打开终端,进入 \app\src\main的目录下执行javah命令:javah -d jni -classpath <SDK_android.jar>;<APP_classes> <class>
然后就看到\app\src\main\jni\com_fy_administrator_jnitoso_JniUtil.h出现了.
- 然后根据.h文件,创建相对应的.cpp文件
创建Android.mk和Application.mk文件
Android.mkLOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JNIDemo LOCAL_SRC_FILES := testJni.cpp LOCAL_SRC_FILES += CAdd.cpp include $(BUILD_SHARED_LIBRARY)
其中LOCAL_PATH是C/C++代码所在目录,也就是我们的jni目录。
LOCAL_MODULE是要编译的库的名称。编译器会自动在前面加上lib,在后面加上.so。
LOCAL_SRC_FILES是要编译的C/C++文件。Application.mk
APP_ABI := all #APP_ABI := armeabi armeabi-v7a x86 mips arm64-v8a mips64 x86_64
配置gradle
在defaultConfig下,配置ndk:
ndk { moduleName "JNIDemo" // 生成的so名字 }
在android标签内配置sourceSets:
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
执行ndk-build命令生成所有cpu架构的so库
注意:
在最后生成so库的时候,如果无法生成64位的so库,可能原因是ndk版本太老的缘故,下载最新ndk试试