2019独角兽企业重金招聘Python工程师标准>>>

Android Studio ndk-Jni开发详细入门,Aes加密demo

字数920 阅读13 评论0 喜欢0

Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。
由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)来执行。VM在Android平台里,扮演很重要的角色。
(多的咱不说了,介绍什么的 到处都有可以去搜一下)
咱们先建一个NdkJniDemo的工程

新建工程.png

新建JniUtils类实现native方法

public class JniUtils {    public static native String getStringFormC();
}

build.png

然后clean project 再rebuild project 生成class文件,
这时候打开如下图的文件夹看是否生成了classes文件夹,没有生成请重新来过。

文件夹.png

再打开Terminal输入指令
cd app/build/intermediates/classes/debug
然后再输入指令
javah -jni com.wobiancao.ndkjnidemo.ndk.JniUtils
注意 这里javah -jni后面跟的是JniUtils类的全路径,如果javah报不存在之类的,是你的java环境没有配置好。

Paste_Image.png

这时候打开classes/debug下面的文件发现多了一个文件
com_wobiancao_ndkjnidemo_ndk_JniUtils.h
然后在src/main下新建文件夹jni,把生成的.h文件复制或者剪切到jni文件夹下面去,新建一个c类随便取一个名字,添加代码如下

 Created by XY on 16/1/4.//#include "com_wobiancao_ndkjnidemo_ndk_JniUtils.h"/*
* Class:     Java_com_wobiancao_ndkjnidemo_ndk_JniUtils
* Method:    getStringFormC
* Signature: ()Ljava/lang/String;
*/JNIEXPORT jstring JNICALL Java_com_wobiancao_ndkjnidemo_ndk_JniUtils_getStringFormC(JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"这里是来自c的string");

这里发现头文件#include <jni.h>报红色,是因为咱们还没有配置ndk环境,打开file->project structure
选择你所下载的ndk环境路径,如果没有ndk这里有个地址大家可以去下载 一个安卓工具集合的网站:http://androiddevtools.cn/

Paste_Image.png

设置好了之后,发现头文件还是红色的,然后再build一下工程,就会有提示

Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.

按着提示做就行了 在gradle.properties文件末尾添加android.useDeprecatedNdk=true就ok啦
然后在app文件下得build.gradle ->defaultConfig括号内添加如下代码

ndk {    moduleName "NdkJniDemo"          //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库,目前可有可无。}

到了这一步重新build项目,发现已经没有变红了。接下来就是运用了,在JniUtils类里面添加如下代码

static {    System.loadLibrary("NdkJniDemo");//之前在build.gradle里面设置的so名字,必须一致}

然后简单调用就行了,MainActivity代码如下

public class MainActivity extends AppCompatActivity { TextView textView;
@Override    protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.ndk_text);textView.setText(JniUtils.getStringFormC());}
}

运行结果如图

运行图.png

咱们打开app->intermediates-ndk-debug发现生成了三个文件夹,并且对应了之前我们在build.gradle配置的abiFilters
大功告成。
新建libs文件夹把这三个文件夹放进去

Paste_Image.png

然后删除咱们的jni文件试试,是否工程还能运用?
ok 教程完毕
最后出一个利用jni的Aes加密demo运行结果如图所示

Aes加密.png

项目地址:https://github.com/a12a15a05/NdkJniDemo
谢谢star欢迎点赞=。=转载请注明来源

转载于:https://my.oschina.net/wangxnn/blog/596946

Android Studio ndk-Jni开发详细相关推荐

  1. Android studio 下 JNI 开发实例

    在AS中进行 NDK 开发之前,我们先来简单的介绍几个大家都容易搞懵的概念: 到底什么是JNI,什么是NDK? 何为"交叉编译"? 先看什么是 JNI?JNI 的全称就是 Java ...

  2. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  3. Android Studio 4.0.+NDK项目开发详细教学

    JNI开发系列目录 JNI开发必学C++基础 JNI开发必学C++使用实践 Android Studio 4.0.+NDK项目开发详细教学 Android NDK与JNI的区别有何不同? Androi ...

  4. JNI编程基础(二)——Android Studio NDK开发

    由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...

  5. Android NDK开发——Android studio使用JNI调用OpenCV处理图像

    前言 这里要演示的是使用Android studio 做APP开发,使用JNI与C++交互的demo. 一.创建工程 1.创建一个Native C++工程. 2.命令工程和指定交互语言. 3.指定C+ ...

  6. Android Studio NDK环境配置及JNI使用方法

    1.前言 什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.N ...

  7. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  8. android studio ndk HelloWorld 编译环境搭建

    android studio NDK helloworld 项目 第一步 android studio ndk 编译环境搭建 http://yunpan.cn/c3cCxxgwrqDaL 访问密码 6 ...

  9. android Studio 配置LUA 开发环境

    android Studio 配置 LUA 开发环境 关于Android LUA资料 android如何调用lua? Android lua 教程 Lua官网 lua语言解释 Lua 5.1 参考手册 ...

  10. Android Studio下jni应用

    最近在将一个小应用从eclipse开发迁移到android studio,程序中有native代码实现,在eclipse是靠Android.mk这么个mk文件来组织编译的,但到android stud ...

最新文章

  1. 比特币寒冬中,你更应该关注企业区块链!
  2. Java面试参考指南(二)
  3. jquery EasyUI导入js顺序
  4. 关于Object.create()与原型链的面试题?
  5. 机器学习-转换器与估计器05
  6. [Java基础]反射概述
  7. Android 支付宝 开源框架
  8. 关于使用类成员函数作为回调的方法
  9. kettle mysql 导入数据库_ETL工具—Kettle数据的导入导出—数据库到数据库
  10. 从传统ICT到互联网的技术之路
  11. 天书般的ICTCLAS分词系统代码(二)
  12. 【图像处理】【去模糊】代码资源汇总
  13. Java中的MD5加密
  14. MATLAB编程实例
  15. javaSocket编程UDP
  16. ftp服务器文件夹设置,ftp服务器可设置的文件夹
  17. ppt大小如何压缩,ppt压缩方法
  18. usart hmi(串口屏)介绍
  19. 【调剂】2020年西安建筑科技大学考研调剂信息(含接收专业)
  20. 美化滚动条的一个插件 vue3-perfect-scrollbar

热门文章

  1. J2EE项目移植问题一
  2. Stuts的Web.xml 详解
  3. 针对上上篇博文--仿优酷菜单---的bug修改
  4. jquery的文档处理(部分)
  5. Windows Server 2012 R2 文件服务器安装与配置02 之基础说明与安装
  6. 2014-11-18--Hadoop的基础学习(五)--编写不同MapReudce程序及其特性(下)
  7. java list三种遍历方法性能比較
  8. Android无法访问本地服务器(localhost)的解决方案
  9. Android JNI开发入门之一
  10. 分布式事务终极解决方案探讨