AndroidStudio下初涉NDK开发
2016-04-05 22:13
447 查看
虽然具体还没有需要用到NDK开发,但先了解一下也是好的,所以搭建了一下NDK环境并配置尝试第一个helloworld,在网上找了很多文章,都略微有点不清楚,在此整理总结一下在AndroidStudio开发JNI过程。
这里的路径需要加多一个右斜杠
\
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文件
生成的头文件代码,包含两个未实现的函数:
main.cpp:
7. 还要在app模块的build.gradle配置文件中加上以下: moduleName的值是保存头文件和源文件的模块,可以是app也可以是导入的模块。
Activity代码:
运行程序,native函数成功调用拉~大功告成。
暂时没有用到这块知识,就先研究到这了,深入的以后再说。 要做大牛还是得有学好C++的觉悟。。
一、下载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 __cplusplus extern "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++的觉悟。。
相关文章推荐
- Android 属性 allowBackup 安全风险浅析
- 【Android】XML文件的解析
- Android startActivityForResult的使用
- Android Studio
- [android] 手机卫士应用程序更新和签名
- Android实现第三方登录
- android视图学习---从源码角度来理解onMeasure过程
- android fitsystemwindows简单使用
- 初步了解Android
- at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
- Android开发环境搭建
- android日常 游戏:跳舞男孩
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory AndroidStudio
- Android Studio导入项目
- 通过Android源代码分析startActivity()过程(上)
- Android学习方法
- Android动态加载—Res文件
- Android编程获取sdcard音乐文件的方法
- 自定义 View 基础和原理
- Android--登录界面