Android 下 编写自己第一个NDK Demo
来源:互联网 发布:中小企业网络搭建 编辑:程序博客网 时间:2024/06/06 01:36
废话不多说
首先新建一个项目
然后新建一个NDK工具类,然后内部声明native方法
之后就build project ,之后会得到中间文件,我们关注的是classes文件夹:
然后我们点出Android Studio 下面的Termina标签输入一下命令,首先进入classes文件夹下的debug文件下,然后输入javah命名
cd app\build\intermediates\classes\debug
之后输入javah命令:
javah -jni com.jst.ndktestdemo.NDKTestUtils
注意的是框里面的是我们新建的NDK工具类包名加类名.
命名运行成功之后在debug文件夹下面会生成一个h文件
内容是这样子:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_jst_ndktestdemo_NDKTestUtils */#ifndef _Included_com_jst_ndktestdemo_NDKTestUtils#define _Included_com_jst_ndktestdemo_NDKTestUtils#ifdef __cplusplusextern "C" {#endif/* * Class: com_jst_ndktestdemo_NDKTestUtils * Method: getNDKString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_jst_ndktestdemo_NDKTestUtils_getNDKString (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif之后我们需要在main目录节点下新建jni文件夹,然后把h文件剪切到jni文件夹中,然后在里面新建一个c文件,名字自取,我这里是Ndktest.c
编辑代码如下:
#include "com_jst_ndktestdemo_NDKTestUtils.h"JNIEXPORT jstring JNICALL Java_com_jst_ndktestdemo_NDKTestUtils_getNDKString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"我是C实现的");}
接下来我们需要在工程的local.properties文件下检查是否配置了NDK路径,没有则要配置上
然后我们要在build.gradle下配置so库文件名,在defaultConfig节点下添加:
defaultConfig { ...... ndk{ moduleName "TestJniLibName" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。 }}
然后我们需要到NDKTestUtils下添加静态初始化load代码,代码如下:
static { System.loadLibrary("TestJniLibName"); //defaultConfig.ndk节点下配置的so库名 }
最后记得在gradle.properties下添加android.useDeprecatedNdk=true
最后,我们代码实现调用,
public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); final NDKTestUtils ndkTestUtils = new NDKTestUtils(); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this,ndkTestUtils.getNDKString(),Toast.LENGTH_SHORT).show(); } }); }}
效果如下:
0 0
- Android 下 编写自己第一个NDK Demo
- 自己的第一个NDK的Demo
- Android NDK开发<一>:第一个demo
- 编写第一个NDK程序
- 编写第一个NDK程序
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- win7+eclipse+ndk创建第一个自己编写的ndk应用程序
- 如何编写第一个成功的Android NDK程序
- Android 第一个NDK
- Android第一个NDK示例
- Android 第一个ndk开发
- Android初涉NDK,从零打造你的第一个demo
- 自己的第一个游戏demo
- 搭建Window环境下android NDK开发环境——编译第一个NDK程序
- Android NDK--自己编写调用JNI
- 自己编写的第一个程序
- 如何自己编写第一个驱动
- 阿里云服务器支持ipv6(苹果app审核不通过问题)
- (ing)一周一誌临时(2017-4月-2017-5月)
- 从传统SQL语句平稳过渡到Linq
- android绘图Paint.setXfermode()和Canvas.saveLayer()方法的作用
- RxSwift(3.4.1)- Transforming Operators
- Android 下 编写自己第一个NDK Demo
- 获取对端IP,端口信息
- eclipse的java classpath variables没有显示
- TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议
- mybatis学习之一
- Android中SQLite的基本使用(二)
- 按照官方文档启动不了tensorboard的解决办法
- C++计时
- 解决IE兼容问题