前言:在Android开发的eclipse时代,想要开发NDK项目或生成so库,是非常蛋疼的,需要踩坑无数,方能生成so库;而如今Android Studio时代,开发jni C/C++项目,通过gradle的集成工具,那是一个爽。下面将会介绍两种利用AS和gradle开发NDK项目及生成so库的方式。
一.环境准备
Android开发环境,Android-SDK,java-SDK,android-NDK相关环境(略:网上有许多)
1.安装完成之后如图:
2.在项目的gradle.properties文件中加上 android.useDeprecatedNdk = true
3.注意写好native接口和System.loadLibrary()
如:JNIUtil和MainActivity
|
|
二.两种编译和生成SO库的方式
1.手动编译C/C++文件和so库生成
i.生成C/C++文件
执行Build->Make Project,生成class文件,class文件的生成路径为: app_path/build/intermediates/classes/debug.
javah生成c头文件
操作命令:
javah -d jni -classpath SDK_android.jar;APP_classes lab.sodino.jnitest.MainActivity
代码示例:
|
|
生成头文件如图:
ii.编辑C文件
在main.c文件中实现头文件中的方法
代码示例C:
|
|
代码示例C++:
|
|
iii.修改build.gradle配置
代码示例:
|
|
具体如图
iV.执行Build->Rebuild Project或Make Project,so库就会自动生成,具体如图:
2.Android studio配置工具编译和生成so库
i.Android studio工具配置
为了方便生成头文件和so文件,我们可以在Android Studio → External Tools中设置两个命令,分别来生成头文件和生成.so文件
javah:
具体配置代码:
|
|
ndk-build:
具体配置代码:
|
|
ii.C/C++文件生成及so库生成
头文件.h的生成,具体操作如图:
具体步骤:
选中JNIUtil点击右键,显示如上图,选中NDK,点击javah,就会自动生成头文件,具体位置如图:
.c文件生成和第一种一样(这里略)
so库文件生成,点击ndk-build,生成库文件,具体如图:
到此,两种方法生成讲解完毕。
三.注意事项
第一种方式
- gradle.build中生成so库文件的平台可配置,如(具体如第一种方式build配置):abiFilters “armeabi”, “armeabi-v7a”, “x86”//控制so库生成兼容的平台
- 生成的so库是在build文件中,需要手动copy到项目。
第二种方式
- 在ndk-build的配置中,so库文件生成平台也可以配置,如(具体如ndk-build配置):APP_ABI=armeabi-v7a,armeabi,x86
- so库文件的生成位置是可以配置的,自动生成到你配置的位置(这一点爽爆了,不用copy),如(具体如ndk-build配置):NDK_LIBS_OUT=$ModuleFileDir$/libs
- 可以随时修改C/C++代码,然后点击ndk-build生成so库,直接调试,非常方便。
源码地址,欢迎下载及Star
https://github.com/awenzeng/JniTest