NDK开发 环境搭建 与 JNI的编写
1.NDK简介
定义:Native Development Kit,是 Android的一个工具开发包 由C/C++语言实现
作用:快速开发C/C的动态库,并自动将so和应用一起打包成 APK 即可通过 NDK在Android中使用JNI与本地代码(如C、C)交互
应用场景:在Android的场景下 使用JNI即 Android开发的功能需要本地代码(C/C++)实现
特点:将主要的功能用C/C语言编写并打包成so 动态库不容易被反编译具有较高的安全性 使用C/C编写的代码运行效率更高并且可以移植到其他平台使用
环境搭建 :
下载安装NDK
环境变量的配置这里就不赘述了
这里讲述的是在Android Studio 下NDK开发
创建项目时添加C的支持 选择默认的C版本 和 添加C++的异常处理
创建完项目之后可以在app Module的目录下看到CMakelist.txt文件以及CPP文件目录(存放编写c文件和c++文件和头文件) 这时就可以根据自己的需求编写CMakelist.txt文件
1.设置so文件的输出路径 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
2.编写Java本地方法
public static native String getStringFromC();
3.使用javah 命令生成.h 文件 因为前面已经定义了so的输出路径 所以也可以在 Android Studio 中自定义external tool 这里发个自定义External Tools 的文章
自定义External Tools
执行完命令后就可以在自定义的.h文件输出目录下找 .h头文件
4.创建要调用的C文件
NDK_Practice.c
5.编写完c文件后 再进入CMakelist.txt 文件中进行配置 加入自己编写的c文件 和 log lib 包引用
add_library( # Sets the name of the library. NDK_Practice # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/NDK_Practice.c )
6.make project
8.编写JNI 实现Java 调用 C
#include "com_james_ndk_practice_NDKPracticeActivity.h"
JNIEXPORT jstring JNICALL Java_com_james_ndk_1practice_NDKPracticeActivity_getStringFromC
(JNIEnv *env,jclass jcls){
char *c ="ndk practice";
return (*env)->NewStringUTF(env,c);
}
在Activity 加载so文件并调用C
static {
System.loadLibrary("NDK_Practice");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ndk_practice);
Toast.makeText(this,getStringFromC(), Toast.LENGTH_SHORT).show();
}
public static native String getStringFromC();
最后附上Github 的demo地址NDK_Practice
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android中AsyncTask的使用与源码分析+3.0以前的缺陷(并发->逐一)
- Android下使用lamemp3库将PCM录音数据压缩为MP3格式
- Android资源访问
- android应用程序签名详解