Android Studio中使用NDK/JNI

app下的build.gradle中加入:

defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -frtti -fexceptions"
            }
        }
        ndk {
            abiFilters  'armeabi','armeabi-v7a','x86'
        }
    }
    sourceSets.main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }



gradle.properties中增加下面的属性使用旧版的ndk功能(不添加会使用实验性的ndk构建工具) 

android.useDeprecatedNdk=true

配置CMakeLists:

cmake_minimum_required(VERSION 3.4.1)

add_library( native-lib
             SHARED
             src/main/cpp/native-lib.cpp
             src/main/cpp/test_ffmpeg.cpp)

find_library( log-lib
              log )


find_library( android-lib
              android )

#set(distribution_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})

set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
include_directories(src/main/cpp)

target_link_libraries(native-lib
                      ${log-lib}
                      ${android-lib})


声明native方法

public class JniUtils {
    public static native int getCountJNI(int x, int y);
}



使用AS的Terminal窗口

执行命令:

cd app/src/main/java

然后执行:

javah -jni wjy.geridge.com.testndk.jni.JniUtils(JniUtils类全路径)

会在app/src/main/java目录下生成wjy_geridge_com_testndk_jni_JniUtils.h文件

将wjy_geridge_com_testndk_jni_JniUtils.h文件剪切到cpp目录

在创建一个c/c++文件加入如下代码:

#include "wjy_geridge_com_testndk_jni_JniUtils.h"


JNIEXPORT jint JNICALL Java_wjy_geridge_com_testndk_jni_JniUtils_getCountJNI
    (JNIEnv *env, jobject clazz,jint x,jint y){
   return x+y;
}


jstring,jint是 Java语言中的String、int类型, 方法名格式为 : Java_完整包名类名_方法名();

-- env参数 : 代表的是Java环境, 通过这个环境可以调用Java里面的方法;

-- clazz参数 : 调用C语言方法的对象, thiz对象表示当前的对象, 即调用JNI方法所在的类;

x,y是Java传过来的参数

最后在Android中调用getCountJNI方法
textView.setText(JniUtils.getCountJNI(8,9)+"");


运行如果有下面的错误

这里写图片描述

是因为你先操作的Terminal终端没退出来有两种解决办法1.你敲回原工程路径,如本人的如下

cd E:\ndk\TestNdk

2.另一种方式是重启IDE,这样你再整的时候就可以了


关于Android Studio中配置NDK开发环境 :http://blog.csdn.net/yywan1314520/article/details/52076132

进一步研究JNI :  http://blog.csdn.net/quan648997767/article/details/65444138


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值