最新androidStudio上jni开发全覆盖
来源:互联网 发布:从概念到数据分析 pdf 编辑:程序博客网 时间:2024/04/30 00:10
JNI(Java Native Interface):Java本地接口。是为了方便Java调用c、c++等本地代码所封装的一层接口(也是一个标准)。大家都知道,Java的优点是跨平台,但是作为优点的同时,其在本地交互的时候就编程了缺点。Java的跨平台特性导致其本地交互的能力不够强大,一些和操作系统相关的特性Java无法完成,于是Java提供了jni专门用于和本地代码交互,这样就增强了Java语言的本地交互能力。
NDK(Native Development Kit) : 原生开发工具包,即帮助开发原生代码的一系列工具,包括但不限于编译工具、一些公共库、开发IDE等
在Android Studio 2.2 之后,工具中增加了CMake
的支持,你可以这么认为,在 Android Studio 2.2 之后你有2种选择来编译你写的 c/c++ 代码。一个是ndk-build
+Android.mk
+Application.mk
组合,另一个是CMake
+CMakeLists.txt
组合。这2个组合与Android代码和c/c++代码无关,只是不同的构建脚本和构建命令。
ABI
(Application binary interface)应用程序二进制接口。不同的CPU 与指令集的每种组合都有定义的ABI
(应用程序二进制接口),一段程序只有遵循这个接口规范才能在该 CPU 上运行,所以同样的程序代码为了兼容多个不同的CPU,需要为不同的ABI
构建不同的库文件。当然对于CPU来说,不同的架构并不意味着一定互不兼容。
- armeabi设备只兼容armeabi;
- armeabi-v7a设备兼容armeabi-v7a、armeabi;
- arm64-v8a设备兼容arm64-v8a、armeabi-v7a、armeabi;
- X86设备兼容X86、armeabi;
- X86_64设备兼容X86_64、X86、armeabi;
- mips64设备兼容mips64、mips;
- mips只兼容mips
以上内容都来自于百度百科和简书。主要用于扫盲。
下面介绍这四个函数
第一个不说了,就是要求的最低版本
cmake_minimum_required(VERSION 3.4.1)# 编译出一个动态库 myjni,源文件只有 src/main/jni/myjni.cadd_library(myjni SHARED myjni.c)# 找到预编译库 log_lib 并link到我们的动态库 myjni中,就是下面两个函数的作用find_library(log-lib log)target_link_libraries(myjni ${log-lib})
(以上四个函数在向现有项目添加 C/C++ 代码中有重要作用)
开始正题
- 首先你需要下载 NDK 和构建工具
接下来
- 在向导的 Configure your new project 部分,选中 Include C++ Support 复选框。
- 点击 Next。
- 正常填写所有其他字段并完成向导接下来的几个部分。
- 在向导的 Customize C++ Support 部分,您可以使用下列选项自定义项目:
- C++ Standard:使用下拉列表选择您希望使用哪种 C++ 标准。选择 Toolchain Default 会使用默认的 CMake 设置。
- Exceptions Support:如果您希望启用对 C++ 异常处理的支持,请选中此复选框。如果启用此复选框,Android Studio 会将
-fexceptions
标志添加到模块级build.gradle
文件的cppFlags
中,Gradle 会将其传递到 CMake。 - Runtime Type Information Support:如果您希望支持 RTTI,请选中此复选框。如果启用此复选框,Android Studio 会将
-frtti
标志添加到模块级build.gradle
文件的cppFlags
中,Gradle 会将其传递到 CMake。
- 点击 Finish
打开工程
在src\main\目录下新建一个名为jni的目录(名称和父目录可以随意)
在src\main\jni\目录内新建一个名称为CMakeLists.txt的文件(该文件名称固定为CMakeLists.txt)CMakeLists.txt文件也可在项目根目录下新建
CMakeLists.txt的内容就是上面的那四个函数
cmake_minimum_required(VERSION 3.4.1)
add_library(myjni SHARED myjni.c)
find_library(log-lib log)
target_link_libraries(myjni ${log-lib})
接下来
在src\main\jni\目录内新建一个c文件myjni.c,在文件中添加 #include <jni.h>
点击IDE菜单的android目录下,选中项目app右击---》Link C++ Project with Gradle
Build System选择CMake
Project Path选择上面创建的CMakeLists.txt
点击确定
再接下来
在java文件中添加native代码
static { System.loadLibrary("myjni");}public native String helloJni();
还有一个牛逼的操作是这个不用生成头文件。。。
鼠标点击放到native函数上(后面那个函数名helloJni)
会提示Cannot resolve corresponding JNI function Java_com_example_jiang_hellojnitest_MainActivity_helloJni
按Alt + Enter点击Create---
神奇的一幕发生了。。。。
JNIEXPORT jstring JNICALLJava_com_example_yaphet_javausec_JNII_helloJni(JNIEnv *env, jobject instance) { // TODO char * returnValue=" I am from C"; return (*env)->NewStringUTF(env, returnValue);}自动生成了原生代码里的函数。接下来的是工作就是调用了,没啥难度。。。
- 最新androidStudio上jni开发全覆盖
- AndroidStudio下jni开发
- AndroidStudio使用jni开发
- AndroidStudio Jni 开发初识
- AndroidStudio jni 开发
- AndroidStudio集成ndk、开发JNI
- AndroidStudio JNI 开发哪些事儿
- Androidstudio中JNI开发初探
- JNI开发流程(androidstudio)
- Androidstudio中JNI基本开发
- AndroidStudio开发工具实现JNI的开发
- AndroidStudio开发第一个JNI工程
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio下JNI开发之 libmobi
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio下的jni开发细节
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio如何配置NDK/JNI开发环境
- 2017.10.24 上升序列 思考记录
- Android 屏幕旋转(一):旋转设置
- linux 命令
- 【扫描线+贪心+线段树】Codeforces 458C Elections
- Linux CentOS7 安装 配置 Redis 3.2.8
- 最新androidStudio上jni开发全覆盖
- AngularJs购物车价格计算
- 通过反射,创建类的实例三
- 01背包问题
- FFplay使用指南
- redis、memcached、mongoDB 对比
- 夯实基础,步步攀升
- L1-009. N个数求和
- 购物车,计算价格,tian