android studio NDK-JNI调用
2016-03-18 22:48
405 查看
原文发表在http://mybeibei.net/?p=1039
为了学习cydia_substrate框架,要在Android Studio上搭建NDK环境,网上查了好多教程,也询问了一些android的群,各种不行,折腾了一下午,最终发现是NDK版本问题(之前用ndk r8版本
),最终解决,特将配置流程记下,以免其它像我这样的菜鸟再次入坑:
一、环境准备:
Android Studio(用的是1.3.2版本)
NDK(android-ndk-r11版本)
二、配置开始:
1.创建新的一个project,并建立一个blank Activity
2.在MainActivity.java中增加一个方法
代码:
此时“getStringFromNative()”会有红色报错,不用管它,继续下一步
3.打开as的Teminal,进入到app/src/main/java目录下,输入:javah -d ../jni com.kuhn.myjni.MainActivity,如果没有任何报错,这时as刷新后,会多出一个jni的文件夹,该文件夹下会出现com.kuhn.myjni.MainActivity.h文件,文件内容类似下面这样:
代码:
4.接着,修改local.properties文件,末尾增加ndk路径:
代码:
5.修改app下的build.gradle,在defaultConfig 中增加
代码:
6.在jni目录下新建一个.c文件,我的叫“jni.c”,然后将.h头文件包含进去,并写入相应代码:
代码:
如果正确无报错的话,左侧会出现红绿色的相交箭头,表示方法调用了:
7.MainActivity.java中增加相应调用代码:
代码:
8.最后在gradle.properties文件中,末尾增加
代码:
,否则会运行报错
9.OK,大功告成,上图:
为了学习cydia_substrate框架,要在Android Studio上搭建NDK环境,网上查了好多教程,也询问了一些android的群,各种不行,折腾了一下午,最终发现是NDK版本问题(之前用ndk r8版本
),最终解决,特将配置流程记下,以免其它像我这样的菜鸟再次入坑:
一、环境准备:
Android Studio(用的是1.3.2版本)
NDK(android-ndk-r11版本)
二、配置开始:
1.创建新的一个project,并建立一个blank Activity
2.在MainActivity.java中增加一个方法
代码:
public native String getStringFromNative();
此时“getStringFromNative()”会有红色报错,不用管它,继续下一步
3.打开as的Teminal,进入到app/src/main/java目录下,输入:javah -d ../jni com.kuhn.myjni.MainActivity,如果没有任何报错,这时as刷新后,会多出一个jni的文件夹,该文件夹下会出现com.kuhn.myjni.MainActivity.h文件,文件内容类似下面这样:
代码:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_kuhn_mykuhn_MainActivity */ #ifndef _Included_com_kuhn_mykuhn_MainActivity #define _Included_com_kuhn_mykuhn_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_kuhn_mykuhn_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_com_kuhn_mykuhn_MainActivity_getStringFromNative (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
4.接着,修改local.properties文件,末尾增加ndk路径:
代码:
ndk.dir=D\:\\android-ndk-r11
5.修改app下的build.gradle,在defaultConfig 中增加
代码:
ndk { moduleName "jni" //你的so库文件名 }
6.在jni目录下新建一个.c文件,我的叫“jni.c”,然后将.h头文件包含进去,并写入相应代码:
代码:
// // Created by Kuhn on 2016/3/17. // #include "com_kuhn_mykuhn_MainActivity.h" JNIEXPORT jstring JNICALL Java_com_kuhn_mykuhn_MainActivity_getStringFromNative (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,"I'm comes from to Native Function!"); }
如果正确无报错的话,左侧会出现红绿色的相交箭头,表示方法调用了:
7.MainActivity.java中增加相应调用代码:
代码:
public class MainActivity extends AppCompatActivity {
TextView tv = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
tv.setText(getStringFromNative());
}
public native String getStringFromNative();static {
System.loadLibrary("jni");
}
}
8.最后在gradle.properties文件中,末尾增加
代码:
android.useDeprecatedNdk=true
,否则会运行报错
9.OK,大功告成,上图:
相关文章推荐
- ionic 中的popover 在ios android上的样式 不同解决办法
- Android 自定义Camera(一)
- Android使用sd卡保存读取数据
- android学习——activity实现动画切换
- Android Studio 简单介绍和使用问题小结
- android studio 导入项目太慢
- android:ToolBar详解(手把手教程)
- Android 雷达图(网状图)
- android自动弹出软键盘(输入键盘)
- android学习——activity实现跳转
- android开发步步为营之97:几种常用的android图片内存优化方法避免OOM
- android 选择头像上传
- Android 水平柱状图
- Android下雪动画的实现
- Android项目大全(总有你用的到的)
- android开发--actionbar的初阶
- 自定义Viewc(比较模糊的知识点)
- android基础---->数据保存到文件
- android学习——activity生命周期和切换逻辑
- Android窗口显示:全屏与隐藏标题栏