Android Studio NDK开发之一(Java调用C的方法)
来源:互联网 发布:a站 b站 知乎 编辑:程序博客网 时间:2024/06/04 19:30
学习NDK开发的过程中查找了很多资料很多博客,也实验了很多次,觉得还是自己整理一下比较好。
省略部分:添加一个button设置监听用于调用native方法。。。
开始—–
1、先配置一下NDK环境
2、添加一个专门放native方法的类NativeUtils以及相应要调用的native方法
public class NativeUtils { public static native String javaCallC();}
3、rebuild一下工程
4、确认下是否生成了debug文件夹,路径:app/build/intermediates/classes/debug
如果没有再rebuild一下
5、打开Terminal,cd到debug目录下(或者直接把debug拖进去就直接进到该目录了)。
然后打入命令
//javah -jni 包名.类名javah -jni com.example.jnidemo.NativeUtils
如果不成功检查下java环境配置
6、在debug目录下会生成.h文件(com_example_jnidemo_NativeUtils.h)
然后在app/src/main目录下建jni文件夹
再然后把com_example_jnidemo_NativeUtils.h文件复制到jni文件夹中
7、在gradle.properties文件中加上
android.useDeprecatedNdk=true
8、再rebuild一下工程试一下
如果出现不能删除debug文件什么的
那是因为刚刚输入javah -jni的那个窗口还占用了debug文件夹的资源,把刚刚那个命令窗口关掉再试试,如果还不能解决,关掉工程重新开下再试试。。。这个问题我遇到了3次。。终于在第三次基本上确定是这个问题。。
9、在jni文件夹中创建一个MyNative.c的文件
先导入刚刚生成的头文件,然后对里面的方法做些修改,如下
#include "com_example_jnidemo_NativeUtils.h"/* * Class: com_example_jnidemo_NativeUtils * Method: javaCallC * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_jnidemo_NativeUtils_javaCallC (JNIEnv * env, jobject obj);{ return (*env)->NewStringUTF(env,"java调用C");}
上面是C调用java的方法,格式:Java_packageName_className_MethodName
10、在主module的build.gradle中添加so文件生成配置
android {... defaultConfig {... ndk { moduleName "MySo"//生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库 } ... }...}
如果不写abiFilters,那么就会生成所有平台的so文件,写了就只会生成指定平台的so文件。
11、回到NativeUtils类,添加加载so文件代码
static { System.loadLibrary("MySo");//要和build.gradle里面设置的so名字一致 }
12、然后编译,应该没问题了。
生成的so文件在app\build\intermediates\ndk\debug\lib目录下
DEMO:http://download.csdn.net/detail/lang523493505/9683024
- Android Studio NDK开发之一(Java调用C的方法)
- Android NDK开发之c调用java方法
- Android-本地方法C调用Java中的方法/NDK-JNI开发实例(六)
- Android studio NDK成长记录(三)Java调用C的各种情况解析
- Android NDK之----- C调用Java [GetMethodID方法的使用]
- Android NDK之----- C调用Java [GetMethodID方法的使用]
- Android NDK之----- C调用Java [GetMethodID方法的使用]
- Android Studio下的NDK开发(三):C中通过JNIEnv访问Java中的内容
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- Android 基于NDK的JNI开发 C调用java和java调用C的进阶教程
- NDK的使用(java调用C方法)
- NDK开发java调用c(三)
- Android Studio 添加C库so文件方法(NDK开发)
- Android ndk探索之一(利用Android Studio和ndk编译c)
- Android Studio NDK 开发之在Native中调用java层的函数
- ubuntu下的android studio jni生成c++动态库的调用方法及排错(ndk生成的动态库调用)
- android NDK--C 调用java
- Android NDK开发 Java与C互相调用实例详解
- 九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试六十题
- JQuery编写选项卡
- 【NOIP2013】 积木大赛 (贪心)
- JZOJ 4882 【NOIP2016提高A组集训第12场11.10】多段线性函数
- JS学习31:关于正则全局匹配结果为奇偶真假的小疑问
- Android Studio NDK开发之一(Java调用C的方法)
- 程序猿的C++小笔记
- 【BZOJ 1047】 [HAOI2007]理想的正方形 单调队列(也可以dp水)
- 【HTML5】选择列表及文本框
- 面试宝典(三)
- 时间序列(arima)+支持向量机(svm)+优化=组合预测
- Tomcat server.xml配置
- 16.11.11
- Spring_aop学习