在android studio 2.1 实现简单的ndk
2016-04-27 23:54
369 查看
在android studio 2.1 实现简单的ndk
我从这里参考的,然后自己琢磨好久才自己实现了。第一次玩这个!!!/article/1503778.html
1, 在Settings->中先下载android ndk
2,创建NdkJniUtils类
package com.example.edu.ndktest; /** * Created by Administrator on 2016/4/27. */ public class NdkJniUtils { public native String getCLanguageString(); }
3.然后build project得到其中中间文件,我们关注的是.class文件。编译OK以后生成的class文件在AS工程的如下目录:
NdkTEST\app\build\intermediates\classes\debug
4,点开AS的Terminal标签,(view->tool windows->Terminal) 输入命令:
cd app\build\intermediates\classes\debug
然后执行如下javah命令生成h文件。
javah -jni com.example.edu.ndktest.NdkJniUtils
执行完之后你可以在文件夹NdkTest\app\build\intermediates\classes\debug下看见生成的 .h头文件为:
其内容为:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_example_edu_ndktest_NdkJniUtils */ #ifndef _Included_com_example_edu_ndktest_NdkJniUtils #define _Included_com_example_edu_ndktest_NdkJniUtils #ifdef __cplusplus extern "C" { #endif /* * Class: com_example_edu_ndktest_NdkJniUtils * Method: getCLanguageString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_edu_ndktest_NdkJniUtils_getCLanguageString (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
在工程的main目录下新建一个名字为jni的目录,然后将刚才的 .h文件剪切过来。在jni目录下新建一个c文件,随意取名,我的叫jnitest.c 。然后编辑代码如下
// // Created by Administrator on 2016/4/27. // #include "com_example_edu_ndktest_NdkJniUtils.h" /* * Class: com_example_edu_ndktest_NdkJniUtils * Method: getCLanguageString * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_example_edu_ndktest_NdkJniUtils_getCLanguageString (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"This just a test for Android Studio NDK JNI developer!"); }
5.接下来在工程的local.properties文件中添加NDK路径(上面下载好的那个NDK),类似其中的SDK路径一样,我的添加后如下:
6,接下来在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下
7,现在生成的so库名字也有了,那就去代码的NdkJniUtils Java文件添加静态初始化load代码,添加如下:
static { System.loadLibrary("YanboberJniLibName"); //defaultConfig.ndk.moduleName }
8,编写MainActivity类
package com.example.edu.ndktest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) this.findViewById(R.id.text); NdkJniUtils jni = new NdkJniUtils(); mTextView.setText(jni.getCLanguageString()); } }
9, 编译运行
相关文章推荐
- AndroidStudio 删除依赖的 Android Library Module
- android_Widget桌面小组件_Clock
- [置顶] Android开发之SDCardUtils工具类。java工具详细代码,附源代码。判断SD卡是否挂载等功能
- 发布Android程序
- [android] 新闻客户端主界面部分
- android中存储路径的使用
- 简单聊一下Android 6.0的运行时权限
- 工作一年零8个月总结
- Android自定义属性
- android studio常用快捷键
- Android混淆APK直接copy使用
- Android项目的目录结构
- Android OpenGL 坐标系 <2>
- Android应用开发SharedPreferences存储数据的使用方法
- Android Studio导入Project的方法
- Android开源库集锦
- Android计算器实现源码分析
- android源码解析(十六)-->应用进程Context创建流程
- android串口通信以及串口协议解析
- Android-项目结构-day01