第一讲 使用JNI输出“Hello World!”
来源:互联网 发布:iphone6s壁纸软件推荐 编辑:程序博客网 时间:2024/05/22 03:13
一、介绍:
Java Native Interface(JNI)标准是Java平台的一部分,允许Java语言和其他语言进行交互。JNI是本地编程接口,它使得在Java虚拟机内部运行的Java代码能够与用其他语言,如C,C++和汇编语言编写的程序和库进行交互操作。
二、步骤:
1)使用Android Studio新建一个工程:JniHello
2)在src\main\java文件夹下新建Java类:JniUtils.java,并创建一个Native方法:
publicclass JniUtils{
public static native StringgetStringFromC()
}
3)然后点击“Build”菜单下的“Clean Project”然后点击“Make Project”,运行完之后在“app\build\imtermediates”该目录下会生成“classes”文件夹,没有生成请重新操作。如图:
4)打开Android Studio的Terminal控制台,输入指令:
“cdapp\build\imtermediates\classes\debug”进入项目对应的目录下
然后输入:
“javah -jni com.example.lenovo.jnihello”(刚才创建的Java类的完整路径)
如果报javah不是内部命令的话需要检查JDK环境变量是否配置正确,或者JDK的版本和Android Studio启动的版本是否一致(64或者32位)。
5)这时候打开“debug”文件夹下会多出一个“.h”文件,然后在 “src\main”文件夹下新建“jni”目录,将“debug”文件夹下的“.h”文件复制进去,如图:
然后新建一个C类文件,添加如下代码:
若使用C进行编写:
#include"com_example_lenovo_jnihello_JniUtils.h"
/*Header for class com_example_lenovo_jnihello_JniUtils */
/*
* Class: com_example_lenovo_jnihello_JniUtils
* Method: getStringFromC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORTjstring JNICALL Java_com_example_lenovo_jnihello_JniUtils_getStringFromC
(JNIEnv *env, jstring str){
return(*env)->NewStringUTF(env,"hello android developers");
};
若使用C++进行编写:
#include"com_example_lenovo_jnihello_JniUtils.h"
/*Header for class com_example_lenovo_jnihello_JniUtils */
/*
* Class: com_example_lenovo_jnihello_JniUtils
* Method: getStringFromC
* Signature: ()Ljava/lang/String;
*/
JNIEXPORTjstring JNICALL Java_com_example_lenovo_jnihello_JniUtils_getStringFromC
(JNIEnv *env, jstring str){
return env->NewStringUTF("helloandroid developers");
};
如果发现新建的C类文件的头文件“#include<jni.h>”那么是因为没有配置NDK的环境;
6)在“gradle.properties”文件末尾添加“android.useDeprecatedNdk=true”,否则会报出“Error:Yourproject contains C++ files but it is not using a supported native system”的错误,然后在app下的“build.gradle”文件内的defaultConfig内添加:
ndk{
moduleName "jniTest"
abiFilters "armeabi","armeabi-v7a", "x86"
}
并重新编译;
7)在刚才创建的java类(JniUtils.java)中添加以下代码:
static{
System.loadLibrary("jniTest");
}
8)在MainActivity中添加如下代码:
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView)findViewById(R.id.textview);
textView.setText(JniUtils.getStringFromC());
}
运行结果如下:
- 第一讲 使用JNI输出“Hello World!”
- C++之第一个程序Hello World,使用IO库输出Hello World
- 使用vuejs输出Hello world
- 使用reactjs输出Hello world
- Java第一课之输出Hello world
- 16位汇编第一讲----Debug的使用以及Hello World(2016.11.29)
- C#锐利体验 第一讲 “Hello,World!”程序
- 零基础学APICloud:第一讲 Hello World!
- (第三讲) Unity接收PHP的输出Hello World.
- JNI 之 hello world
- JNI Hello World
- JNI Hello World
- jni的hello world
- JNI--Hello World
- JNI--Hello World
- Jni之Hello World
- JNI工程Hello World!
- JNI之hello world
- 幸运大转盘-jQuery+Java实现的抽奖程序
- websoket使用Protocol Buffers3.0传输
- windows系统与macos系统的线程处理差别
- jQuery练习代码暂存
- Gerrit的常见ssh命令
- 第一讲 使用JNI输出“Hello World!”
- vue学习(一)
- JS断点调试心得
- 树形联动的问题,大神们帮帮忙吧。
- 数组,ArrayList和list的区别
- 「五一节后跑会指南」2017年五月15场高端会议合集(上)
- Find Small A [HDU-5980] (水)
- Linux 系统常用命令
- Android高效内存:让图片占用尽可能少的内存