AndroidStudio中NDK开发-制作so库与调用so库(一)
来源:互联网 发布:pp盘古越狱mac 编辑:程序博客网 时间:2024/05/17 08:09
NDK开发越来越火,企业目前对Android开发者掌握NDK开发技术的需求越来越大。下面我们就来进入NDK的HolloWorld.
AndroidStudio中生成so库步骤
1、写好java,native方法,以及调用lib名
static { System.loadLibrary("hello");}public native String getStringFromC();
2、进入工程的src/main/java目录下 生成.h头文件
命令: javah -d ../jni 全包名+类名
2.1、JNI头文件中的方法的命名规范是
1) 前缀: Java_
2) 类的全限定名,用下划线进行分隔(_):com_lms_jni_JniTest
3) 方法名:getTestString
2.2、常见错误:
Error: no classes specified bash: ../../build/intermediates/classes/debug: is a directory
解决方法:
因为你是在main目录下,需要在src/main/java目录下执行
javah -d ../jni 你的包含native方法的类。
3、创建 .c文件
将.h头文件的方法copy到.c文件,稍微修改如下:
#include "com_sim_helllondk_HelloNdk.h" JNIEXPORT jstring JNICALL Java_com_sim_helllondk_HelloNdk_getStringFromC(JNIEnv *env, jobject jobject){ return (*env)->NewStringUTF(env,"NDK 测试成功"); };
4、在jni目录下创建Android.mk文件,指定lib名和编译的源文件名
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := hello //so库名LOCAL_SRC_FILES := hello.c //.c文件include $(BUILD_SHARED_LIBRARY)
5、利用ndk-build生成so库
在src/main目录下 利用 ndk-build 命令生成so库 ,默认会在main目录下生成文件夹jni和obj,so库就在这里。
5.1可以在build.gradle(moudle:app)内配置生成的so库的类型
defaultConfig { applicationId "com.sim.hello" minSdkVersion 15 targetSdkVersion 24 ......................... ndk{ moduleName "MyJni" ldLibs "log" abiFilters "armeabi", "armeabi-v7a", "x86" } }
6、此时运行project,会报以下错误
6.1 Error:1
Error: Your project contains C++ files but it is not using a supported native build system http://stackoverflow.com/questions/40065871/error-your-project-contains-c-files-but-it-is-not-using-a-supported-native-bu
解决方法:
Put this part in build.gradle(Module:app) above buildTypes{}
sourceSets { main { jni.srcDirs = [] } }buildTypes{}
6.2 Error:2
java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader........couldn't find "libhello.so"
错误原因:
ndk-build 命令生成so库的是在文件夹jni和obj内,但android调用so库时默认从 jniLibs 目录下查找,
解决方法:
将AS切换到Project目录,在main下新建jniLibs,在jniLibs下新建armeabi,把so库copy进去
1 0
- AndroidStudio中NDK开发-制作so库与调用so库(一)
- AndroidStudio中调用So库方法
- AndroidStudio中调用So库方法
- ndk开发之利用android系统中.so库文件(例:libsqlite.so)
- AndroidStudio开发jni调用第三方SO库
- android开发ndk调用第三方so库
- android开发ndk调用第三方so库
- android开发ndk调用第三方so库
- android开发ndk调用第三方so库
- AndroidStudio2.2.3 JNI与NDK开发之一:生成可调用.so库
- AndroidStudio配置NDK/JNI,完成so动态链接库的调用
- Ndk把密码打包在so动态库中调用libsqlcipher_android.so
- AndroidStudio编译.SO库文件心得一
- AndroidStudio引入.so库
- AndroidStudio打包.so库
- Androidstudio 添加so库
- NDK so库的调用和编译
- NDK调用第三方so共享库
- RabbitMQ 消息轮询和消息确认机制
- zookeeper梳理二 之 zookeeper的数据模型,运维
- 开源项目PublicCMS初体验
- JS前端动态添加表格--包括合并指定单元格
- 如何使用一个for循环输出九九乘法表
- AndroidStudio中NDK开发-制作so库与调用so库(一)
- Maven学习总结(二)——Maven项目构建过程练习
- hi3519v101 nandflash 调试
- 关于JEE中的javax.mail 和javamail冲突问题
- Java多线程-工具篇-BlockingQueue
- Android 带角标的ImageView(微博,QQ消息提示)
- 洛谷 P1169 [ZJOI2007]棋盘制作
- oracle 游标使用
- 机器分配