Android studio3.6中JNI教程之helloworld的思路分析

小编给大家分享一下Android studio3.6中JNI教程之helloworld的思路分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

jdk环境变量配置:

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

E:\Android\AndroidStudio\jre\bin
E:\Android\AndroidStudio\bin

新建工程:

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

Android studio3.6中JNI教程之helloworld的思路分析

SDK设置:

File->Settings

Android studio3.6中JNI教程之helloworld的思路分析

File->Project Structure

Android studio3.6中JNI教程之helloworld的思路分析

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

Android studio3.6中JNI教程之helloworld的思路分析

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

packagecom.example.myapplication;

publicclasshello{
publicnativeintadd(inti,intj);
}

使用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>
/*Headerforclasscom_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"

JNIEXPORTjintJNICALLJava_com_example_myapplication_hello_add
(JNIEnv*,jobject,jinti,jintj){returni+j;}

#ifdef__cplusplus
}
#endif
#endif

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

然后修改CMakeLists.txt,增加,

add_library(#Setsthenameofthelibrary.
hello

#Setsthelibraryasasharedlibrary.
SHARED

#Providesarelativepathtoyoursourcefile(s).
hello.cpp)

修改target_link_libraries如下,

target_link_libraries(#Specifiesthetargetlibrary.
native-lib
hello
#Linksthetargetlibrarytotheloglibrary
#includedintheNDK.
${log-lib})

修改hello.java的调用方式,

packagecom.example.myapplication;

publicclasshello{

static{
System.loadLibrary("hello");
}
publicnativeintadd(inti,intj);
}

修改MainActivity.java中的onCreate函数,

protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Exampleofacalltoanativemethod
TextViewtv=findViewById(R.id.sample_text);
//tv.setText(stringFromJNI());
tv.setText("hello9+10="+newhello().add(9,10));
}

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

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

Android studio3.6中JNI教程之helloworld的思路分析

JNI的整体流程思路:

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

以上是“Android studio3.6中JNI教程之helloworld的思路分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-05-10 20:36:42
收藏
分享
海报
0 条评论
165
上一篇:Android Studio3.6怎么设置Gradle Offline Mode 下一篇:django中xadmin管理器常用显示的设置方式有哪些
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码