Android Studio JNI开发
来源:互联网 发布:js中有多少循环 编辑:程序博客网 时间:2024/05/16 11:23
今天花了一天时间终于把JNI的配置弄清了,参考了好几个人的文章,有一个地方原作者漏掉了,转载加补充
准备工作:下载NDK。
简单的说,要用到C/C++,就要用NDK。直接百度搜索然后去官网下载就行,位置可以随便放。
1、新建一个类,声明native方法。这个类是java与C/C++交互的中介,方法由java声明,由C/C++实现。
不在Activity类里面写是为了避免编译时报错:找不到android.support.v7.app.AppCompatActivity
public class myJNI {
//加载so库
static {
System.loadLibrary("JniTest");
}
static {
System.loadLibrary("JniTest");
}
//native方法
public static native String sayHello();
public static native String sayHello();
}
2、打开android studio终端,使用javac编译上述文件,生成class文件
命令:
D:\AndroidStudioProject\testJNI\app\src\main\java\com\example\binbin\testjni>javac myJNI.java
3、确认自己类的包名!然后在上一级的位置使用javah生成.h头文件
一定要在上一级哦,不然不会报错:找不到xxx类
比如我的myJNI.class在
D:\AndroidStudioProject\testJNI\app\src\main\java\com\example\binbin\testjni
我的包名是:
package com.example.binbin.testjni;
所以我的javah命令应该这么写:
D:\AndroidStudioProject\testJNI\app\src\main\java>javah -jni com.example.binbin.testjni.myJNI
然后就能看到生成了一个h文件。
4、新建一个jni文件夹//这就是原作者落点的地方,当时一跳而过我有点蒙
再新建main.c,把.h里面的内容复制进去,并实现里面的函数。
生成的h文件
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_binbin_testjni_myJNI */#ifndef _Included_com_example_binbin_testjni_myJNI#define _Included_com_example_binbin_testjni_myJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_example_binbin_testjni_myJNI * Method: sayHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_binbin_testjni_myJNI_sayHello (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif
拷贝修改后的main.c
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_binbin_testjni_myJNI */#ifndef _Included_com_example_binbin_testjni_myJNI#define _Included_com_example_binbin_testjni_myJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_example_binbin_testjni_myJNI * Method: sayHello * Signature: ()Ljava/lang/String; *///就实现了个函数 JNIEnv的用法可以自行百度,这里就不展开了JNIEXPORT jstring JNICALL Java_com_example_binbin_testjni_myJNI_sayHello (JNIEnv *env, jclass jobj){ //返回一句话 return (*env)->NewStringUTF(env,"JNI hahahahahahahaha");}#ifdef __cplusplus}#endif#endif8、使用JNI
因为native方法声明成了静态的方法,在Activity里面直接调用myJNI类就行
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = (TextView)findViewById(R.id.text); //调用 text.setText(myJNI.sayHello()); }}
好了,到这里完工shift + F10运行一下吧
阅读全文
0 0
- Android Studio开发JNI
- Android Studio JNI开发
- Android Studio jni开发
- Android Studio jni开发
- android studio Jni开发
- Android studio JNI开发
- Android Studio JNI开发
- Android Studio JNI开发
- android studio jni开发
- Android Studio Jni开发
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- Android Studio NDK jni 开发
- csu----报数游戏
- 建立循环单链表
- 常用Shell脚本整理《一》
- ONVIF协议网络摄像机(IPC)客户端程序开发(14):修改分辨率
- 宋有陈抟擅矩文, 内方外圆有如神。 逐浪字库技更精, 数字出版工匠魂
- Android Studio JNI开发
- linode vps centos7 配置
- codeforce 797A
- Tensorflow应用之简单验证码识别
- Hadoop本地开发,9000端口拒绝访问
- apache隐藏版本号
- GitHub详细教程
- C++中vitual的用法总结
- FFmpeg 音频相关专有名词详解