AndroidStudio下初涉NDK开发
来源:互联网 发布:java 高仿京东商城 编辑:程序博客网 时间:2024/06/05 06:22
虽然具体还没有需要用到NDK开发,但先了解一下也是好的,所以搭建了一下NDK环境并配置尝试第一个helloworld,在网上找了很多文章,都略微有点不清楚,在此整理总结一下在AndroidStudio开发JNI过程。
一、下载NDK,配置环境变量
看了个网上视频教程是在eclipse下,需要用NDK的命令行,发现在AndroidStudio下不用,方便极了。。NDK翻墙到官网下,或者百度,这里下也行http://www.androiddevtools.cn/,下载解压即可。java命令还是要用的,所以需要配置系统环境变量,在Path一项加上jdk的路径,搞定。这里需要用的是javah命令。
二、新建android项目,配置gradle
1.在local.properties文件中添加NDK路径
这里的路径需要加多一个右斜杠 \
2.在gradle.properties文件中加一个“android.useDeprecatedNdk=true"
3.在app模块下新建JNI目录,当然在其他模块也行,将头文件跟源文件放到其他模块,然后调用也是可以的。
文件目录结构如此
4.在java文件中声明native函数,并加载库,这里就是app这个模块拉,导入其他模块也是可以的。步骤到这里声明的native函数底下是有红线警告的。
5.利用javah命令生成声明了native函数的类对应的头文件,命令: javah -d jni(输出的目录) -classpath E:\studytools\AndroidStudioProjects\NdkDemo\app\src\main\java(类的路径) -jni jali.w3cboss.ndkdemo.MainActivity(类)。在AS的Terminal或者window的cmd都ok。 执行完成后在jni目录下就生成头文件了。
6.编写C++文件,实现声明的native函数。这里我创建了个main文件
生成的头文件代码,包含两个未实现的函数:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class jali_w3cboss_ndkdemo_MainActivity */#ifndef _Included_jali_w3cboss_ndkdemo_MainActivity#define _Included_jali_w3cboss_ndkdemo_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class: jali_w3cboss_ndkdemo_MainActivity * Method: getJniHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_jali_w3cboss_ndkdemo_MainActivity_getJniHello (JNIEnv *, jobject);/* * Class: jali_w3cboss_ndkdemo_MainActivity * Method: getAnotherHello * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_jali_w3cboss_ndkdemo_MainActivity_getAnotherHello (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
main.cpp:
//// Created by Administrator on 2016/4/5.//#include <jali_w3cboss_ndkdemo_MainActivity.h>JNIEXPORT jstring JNICALL Java_jali_w3cboss_ndkdemo_MainActivity_getJniHello (JNIEnv *env, jobject obj){ return env->NewStringUTF("i come from native function!");};JNIEXPORT jstring JNICALL Java_jali_w3cboss_ndkdemo_MainActivity_getAnotherHello (JNIEnv *env, jobject obj){ return env->NewStringUTF("i come from another native function!");}include以上头文件,分别实现两个函数
7. 还要在app模块的build.gradle配置文件中加上以下: moduleName的值是保存头文件和源文件的模块,可以是app也可以是导入的模块。
Activity代码:
package jali.w3cboss.ndkdemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity { private native String getJniHello(); private native String getAnotherHello(); static { System.loadLibrary("app"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv1 = (TextView) findViewById(R.id.tv1); tv1.setText(getJniHello()); TextView tv2 = (TextView) findViewById(R.id.tv2); tv2.setText(getAnotherHello()); }}
运行程序,native函数成功调用拉~大功告成。
暂时没有用到这块知识,就先研究到这了,深入的以后再说。 要做大牛还是得有学好C++的觉悟。。
0 0
- AndroidStudio下初涉NDK开发
- AndroidStudio开发NDK
- AndroidStudio NDK开发
- AndroidStudio NDK开发
- AndroidStudio NDK开发
- AndroidStudio NDK开发
- AndroidStudio Ndk 开发
- AndroidStudio NDK开发(1)
- AndroidStudio配置NDK开发环境
- AndroidStudio集成ndk、开发JNI
- AndroidStudio下的NDK开发
- 使用AndroidStudio进行NDK开发
- AndroidStudio中的NDK开发初探
- AndroidStudio中的NDK开发初探
- AndroidStudio中的NDK开发初探
- Android NDK 开发 AndroidStudio 2.2 NDK的开发环境搭建
- AndroidStudio如何配置NDK/JNI开发环境
- AndroidStudio NDK开发最佳入门实践
- 转发与重定向的区别
- const限定符
- 云舒天气上线啦
- 非常安全的加密方式
- 结构体位制
- AndroidStudio下初涉NDK开发
- 类与对象
- Linux Mint (官方应用软件社区中心)
- chmod 和 chown 命令用法
- 【BZOJ3032】七夕祭【绝对值不等式】【中位数】【数形结合】
- 如何在Ubuntu中自定义键盘快捷[译]
- 线程同步方法、性能比较(synchronized,ReentrantLock,Atomic)
- 【codevs 1690】题解
- 事件委托