Android中JNI的使用
来源:互联网 发布:免费数据可视化工具 编辑:程序博客网 时间:2024/06/05 14:32
1)安装和下载Cygwin,下载 AndroidNDK
2)在ndk项目中JNI接口的设计
3)使用C/C++实现本地方法
4)JNI生成动态链接库.so文件
5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可
5、案例分析
Android Studio 出来两年多了,网上针对 AS 开发 JNI 工程资源比较少,针对于此,我特意写下本篇博客,希望能对大家有所帮助。
配置环境
- 下载NDK,并进行环境配置,如图:
NDK是什么?
Android NDK(Native Development Kit )是一套工具集合,允许你用像C/C++语言那样实现应用程序的一部分。
为什么要用NDK?
1、安全性,java是半解释型语言,很容易被反汇编后拿到源代码文件,我们可以在重要的交互功能使用C语言代替。
2、效率,C语言比起java来说效率要高出很多。
JNI和NDK的区别?
从工具上说,NDK其实多了一个把.so和.apk打包的工具,而JNI开发并没有打包,只是把.so文件放到文件系统的特定位置。
从编译库说,NDK开发C/C++只能能使用NDK自带的有限的头文件,而使用JNI则可以使用文件系统中带的头文件。
从编写方式说,它们一样。
项目关联NDK ,具体操作如图:
右键你的工程项目,选择 【Open Module Settings】
在 【Android NDK location】配置 NDK 的按着目录:
最后在 项目根目录 【gradle.properties】 下加上:
android.useDeprecatedNdk=true
如图:
JNI实现
新建 JNI_DEMO
项目,完成以上的配置工作。我的项目路径为:D:\Android_Study_Demos\JNI_DEMO
生成 .h 文件
新建TestJNI
类
public class TestJNI { public native String HelloWord(String str);}
在cmd
命令下面,cd
到java
目录,输入javah -jni com.github.jni_demo.TestJNI
命令,生成 .h
文件:
注意:com.github.jni_demo.TestJNI
不能 cd com , cd github……否则编译不成功。
java
路劲下生成了com_github_jni_demo_TestJNI.h
文件:/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_github_jni_demo_TestJNI */#ifndef _Included_com_github_jni_demo_TestJNI#define _Included_com_github_jni_demo_TestJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_github_jni_demo_TestJNI * Method: HelloWord * Signature: (Ljava/lang/String;)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *, jobject, jstring);#ifdef __cplusplus}#endif#endif
app
>New
> Folder
> JNI Folder
生成jni目录如图:#include <stdio.h>#include <stdlib.h>#include "com_github_jni_demo_TestJNI.h"JNIEXPORT jstring JNICALL Java_com_github_jni_1demo_TestJNI_HelloWord (JNIEnv *env, jobject, jstring str) { return str;}
build.gradle 配置 ndk
defaultConfig
节点下加入如下代码: ndk { moduleName "TestJNI" abiFilters "armeabi", "armeabi-v7a", "x86" }
Build
> Make Project
如图:package com.github.jni_demo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;public class MainActivity extends AppCompatActivity { static { // 加载动态库 System.loadLibrary("TestJNI"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TestJNI testJNI=new TestJNI(); Log.e("---------------","************"+testJNI.HelloWord("恭喜你,调用成功!")); }}
- Android中JNI的使用
- Android中jNI的使用
- android中JNI的使用
- Android中JNI的使用
- Android中JNI的使用
- Android中JNI的使用
- Android中JNI的使用
- Android中JNI的使用
- Android中JNI的使用
- android中使用JNI
- Android中jni使用
- Android 开发中JNI的使用总结
- Android中JNI和NDK的使用
- Android中JNI的使用之HelloWorld
- Android Studio 中使用JNI的步骤
- Android Studio中jni的使用
- Android中Jni的基本使用详解
- Android JNI的使用
- #开发中注意的问题#
- 04 单片机时钟
- 图层的添加和隐藏
- tomcat设置默认主页为指定项目
- HAWQ技术解析(二) —— 安装部署
- Android中JNI的使用
- 深入研究java.lang.ThreadLocal类
- spring batch(xml文件读写)
- 1056. Mice and Rice (25)
- iOS开发经验总结2
- python 输出101到200 之间的所有素数,并统计个数
- sftp 安全文件传输
- 数据结构与算法分析笔记与总结(java实现)--排序7:基数排序练习题
- eclipse中添加tomcat8:The Apache Tomcat installation at this directory is version 8.5.11. A Tomcat 8.0 i