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 

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. Android中AsyncTask的使用与源码分析+3.0以前的缺陷(并发->逐一)
  7. Android下使用lamemp3库将PCM录音数据压缩为MP3格式
  8. Android资源访问
  9. android应用程序签名详解

随机推荐

  1. Android Service实现闹钟
  2. android 文档路径获取
  3. Android OTA 升级之二:脚本 ota_from_targ
  4. Android studio 页面布局无法显示问题
  5. Ubuntu amd64 running Android SDKs and
  6. Android tips tool 发现的性能问题
  7. Android软键盘用法实例
  8. Android之SharedPreferences权限
  9. android 多次调用getview的position=0
  10. Android中Parcelable和Serializable接口