Android Studio NDK开发之一(Java调用C的方法)

学习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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hrx-@@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值