Android Studio2.3上JNI开发

123 篇文章 1 订阅

转自:http://blog.csdn.net/yichang666/article/details/70228096

Android Studio2.2以后取代了原先的jni文件夹和mk文件,取代的是cpp文件夹,采用新的cmake编译方式,大大的简化了以前复杂的jni开发流程。

  1)先说下官方提供的最简单的JNi开发,ndk的配置肯定是需要,但是还需要添加另外两个配置,可以直接在Setting-System Setting-Android SDK直接下载cmake和LLDB(NDK调试工具)


  2)新建工程,跟一般项目不一样,在configure your new project时需要勾上Include C++ support

  3)中间步骤就是一直选择next就可以,但是在Customize C++ Support选项卡中,可以进行对以下属性进行配置:

  • C++ Standard:点击下拉框,可以选择标准 C++,或者选择默认 CMake 设置的 Toolchain Default 选项。
  • Exceptions Support:如果你想使用有关 C++ 异常处理的支持,就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的cppFlags 中添加-fexcetions 标志。
  • Runtime Type Information Support:如果你想支持 RTTI,那么就勾选它。勾选之后,Android Studio 会在 module 层的 build.gradle 文件中的cppFlags 中添加-frtti 标志   

   4)生成的项目列表如下

  c++文件放在cpp文件夹,比如这里为native-lib.cpp文件,CMakeLists.txt文件在app目录下,在gradle中对于cmakelists文件路径进行了配置,对整个项目进行Make Project,就可以自动生成.so文件,如下图所示:


在图左侧中生成了一个cmake的文件夹,由于没有在gradle中配置CPU类型,这里生成不同类型的.so文件。在Java文件中通过System.loadLibrary导入了so文件,并且书写了native方法来调用c++代码。
先了解cmakeLists文件的配置,方便于了解so文件的生成,

 cmake_minimum_required(VERSION 3.4.1) #cmake的版本声明
 add_library(native-lib SHARED src/main/cpp/native-lib.cpp) #编译目标cpp文件生成so文件
 add_library(lib_jni
             SHARED  #动态库
             IMPORTED)
 set(SOURECEDIR  ${CMAKE_SOURCE_DIR}/..)#给变量设定指定值
set_target_properties(lib_jni PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/lib_jni.so) #添加第三方提供的so文件
target_include_directories(native-lib PRIVATE ${jni-dir}/include) #配置所需头文件的路径
target_link_libraries(lib_jni
                       native-lib) #设置所有需要链接库的名称(包括静态库和动态库)
  
 native-lib.cpp文件中的代码比较简单,这里简单说明下
 #include <jni.h>   //导入头文件
 #include <string>
 extern "C"   //jni中方法都是用c方式定义的,这里采用的c++文件,加入这段,表示这部分代码按C语言编译
 JNIEXPORT jstring JNICALL  //固定编写格式 其中jstring为返回类型,代表的是java里的string类型
 Java_hiar_myapplication_MainActivity_stringFromJNI(   //Java_包名_类名_方法名
        JNIEnv *env,
        jobject /* this */) {   //除了java方法传递过来的参数,还需要包含这两个参数
    std::string hello = "Hello from C++";  
    return env->NewStringUTF(hello.c_str());  //输出字符串
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值