基于Android studio3.6的JNI教程之helloworld思路详解

 更新时间:2020年03月19日 21:15:25   作者:watersink  
这篇文章主要介绍了基于Android studio3.6的JNI教程之helloworld,本文通过图文实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

jdk环境变量配置:

path中增加下面2个路径,也就是android studio的路径,android有自带的jdk。

E:\Android\Android Studio\jre\bin
E:\Android\Android Studio\bin

新建工程:

一定要选择Native c++类型,最后要选c++11支持。

SDK设置:

File->Settings

File->Project Structure

首先确定工程的目录结构,然后尝试运行一下工程,使用模拟器,确保工程没问题,

MainActivity的同级目录,新建一个hello.java,然后做一个简单的实现,

package com.example.myapplication;
 
public class hello {
 public native int add(int i, int j);
}

使用android studio自带的Terminal进入该hello.java所在目录,执行,

javac hello.java

Terminal下回到app/src/main所在目录,执行,

javah -d jni -classpath ./java com.example.myapplication.hello

此时,会在main目录下面生成一个和cpp,java同级的目录jni。

在该目录结构里面新建hello.cpp。

com_example_myapplication_hello.h中的内容复制进hello.cpp中,并且进行方法的实现,

#include <jni.h>
/* Header for class com_example_myapplication_hello */
 
#ifndef _Included_com_example_myapplication_hello
#define _Included_com_example_myapplication_hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class: com_example_myapplication_hello
 * Method: add
 * Signature: (II)I
 */
 
#include "com_example_myapplication_hello.h"
 
JNIEXPORT jint JNICALL Java_com_example_myapplication_hello_add
 (JNIEnv *, jobject, jint i, jint j){return i+j;}
 
#ifdef __cplusplus
}
#endif
#endif

com_example_myapplication_hello.h,hello.cpp这连个文件复制到cpp所在的目录,

然后修改CMakeLists.txt,增加,

add_library( # Sets the name of the library.
 hello
 
 # Sets the library as a shared library.
 SHARED
 
 # Provides a relative path to your source file(s).
 hello.cpp )

修改target_link_libraries如下,

target_link_libraries( # Specifies the target library.
  native-lib
  hello
  # Links the target library to the log library
  # included in the NDK.
  ${log-lib} )

修改hello.java的调用方式,

package com.example.myapplication;
 
public class hello {
 
 static {
 System.loadLibrary("hello");
 }
 public native int add(int i, int j);
}

修改MainActivity.java中的onCreate函数,

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 // Example of a call to a native method
 TextView tv = findViewById(R.id.sample_text);
 //tv.setText(stringFromJNI());
 tv.setText("hello 9+10= " + new hello().add(9, 10));
 }

然后,rebuild project,没有错误后,然后run app

最终程序整体目录结构,以及运行效果,

 JNI的整体流程思路:

Java先定义一个类,类中定义一个需要c++来实现的方法.通过javah生成需要c++实现的.h的c++头文件实现.h的c++头文件中定义的方法Cmake编译运行

总结

到此这篇关于基于Android studio3.6的JNI教程之helloworld思路详解的文章就介绍到这了,更多相关android studio JNI helloworld内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android应用中使用DOM方式解析XML格式数据的基本方法

    Android应用中使用DOM方式解析XML格式数据的基本方法

    这篇文章主要介绍了Android应用中使用DOM方式解析XML格式数据的基本方法,值得注意的是DOM方式解析的效率并不高,在数据量大的时候并不推荐使用,需要的朋友可以参考下
    2016-04-04
  • Android SDK安装及配置教程

    Android SDK安装及配置教程

    这篇文章主要为大家详细介绍了Android SDK安装及配置教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Kotlin 协程的异常处理准则

    Kotlin 协程的异常处理准则

    协程是互相协作的程序,协程是结构化的,正是因为协程的这两个特点,导致它和 Java 的异常处理机制不一样,这篇文章重点给大家介绍Kotlin 协程的异常处理准则,感兴趣的朋友一起看看吧
    2024-01-01
  • Android数据库SD卡创建和图片存取操作

    Android数据库SD卡创建和图片存取操作

    这篇文章主要介绍了Android数据库SD卡创建和图片存取操作的相关资料,需要的朋友可以参考下
    2017-04-04
  • Android碎片fragment实现静态加载的实例代码

    Android碎片fragment实现静态加载的实例代码

    这篇文章主要介绍了Android碎片fragment实现静态加载的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Android实现通用筛选栏

    Android实现通用筛选栏

    这篇文章主要为大家详细介绍了Android实现通用筛选栏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Android实现手写签名

    Android实现手写签名

    这篇文章主要为大家详细介绍了Android实现手写签名的具体实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Android nonTransitiveRClass资源冲突问题浅析

    Android nonTransitiveRClass资源冲突问题浅析

    这篇文章主要介绍了Android nonTransitiveRClass资源冲突问题,别搞错了,nonTransitiveRClass不能解决资源冲突,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Android UI设计系列之自定义SwitchButton开关实现类似IOS中UISwitch的动画效果(2)

    Android UI设计系列之自定义SwitchButton开关实现类似IOS中UISwitch的动画效果(2

    这篇文章主要介绍了Android UI设计系列之自定义SwitchButton开关实现类似IOS中UISwitch的动画效果,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android实现仿今日头条点赞动画效果实例

    Android实现仿今日头条点赞动画效果实例

    我想看到今日头条的点赞效果,应该都觉得很绚丽吧,下面这篇文章主要给大家介绍了关于Android实现仿今日头条点赞动画效果的相关资料,文中通过示例代价介绍的非常详细,需要的朋友可以参考下
    2022-02-02

最新评论