android studio NDK-JNI调用
来源:互联网 发布:linux nano 怎样保存 编辑:程序博客网 时间:2024/06/05 11:29
原文发表在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();
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 __cplusplusextern "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
代码:
ndk.dir=D\:\\android-ndk-r11
代码:
ndk { moduleName "jni" //你的so库文件名}
代码:
//// 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"); }}
代码:
android.useDeprecatedNdk=true
9.OK,大功告成,上图:
0 0
- android studio NDK-JNI调用
- Android Studio-NDK-JNI调用
- Android Studio通过JNI调用NDK程序
- Android studio 使用NDK ,jni调用
- android studio + NDK + JNI
- Android Studio 下的NDK环境搭建与JNI调用
- Android Studio + NDK JNI调用openCV图像处理
- Android Studio NDK 入门教程--JNI签名验证防止恶意调用
- Android Studio NDK jni 开发
- Android Studio ndk-Jni开发
- Android Studio NDK/JNI开发
- Android studio jni Ndk 配置
- Android Studio ndk-Jni开发
- Android Studio NDK JNI 配置
- android studio初试ndk,jni
- android studio jni ndk 例子
- Android Studio开发NDK JNI
- Android Studio NDK JNI 实践
- 欢迎使用CSDN-markdown编辑器
- 蒙特卡洛算法
- yum list
- Java中的流与文件:文本的输入与输出
- 输出二叉树第n个节点
- android studio NDK-JNI调用
- Windows中搭建Android开发环境
- C语言使用const定义数组时的错误原因
- android broadcastReceiver学习
- 条款40:将std::atomic用于并发,而volatile用于专有内存
- 归并排序
- google方程式
- C++之strcpy、memcpy、memmove比较
- nsoj A. Oil Deposits