android studio NDK-JNI调用
16lz
2021-01-23
原文发表在 http://mybeibei.net/?p=1039
为了学习cydia_substrate框架,要在AndroidStudio上搭建NDK环境,网上查了好多教程,也询问了一些android的群,各种不行,折腾了一下午,最终发现是NDK版本问题(之前用ndkr8版本 ),最终解决,特将配置流程记下,以免其它像我这样的菜鸟再次入坑:
一、环境准备:
AndroidStudio(用的是1.3.2版本)
NDK(android-ndk-r11版本)
二、配置开始:
1.创建新的一个project,并建立一个blankActivity
2.在MainActivity.java中增加一个方法
代码:
3.打开as的Teminal,进入到app/src/main/java目录下,输入:javah-d../jnicom.kuhn.myjni.MainActivity,如果没有任何报错,这时as刷新后,会多出一个jni的文件夹,该文件夹下会出现com.kuhn.myjni.MainActivity.h文件,文件内容类似下面这样:
代码:
代码:
代码:
代码:
7.MainActivity.java中增加相应调用代码:
代码:
9.OK,大功告成,上图:
为了学习cydia_substrate框架,要在AndroidStudio上搭建NDK环境,网上查了好多教程,也询问了一些android的群,各种不行,折腾了一下午,最终发现是NDK版本问题(之前用ndkr8版本 ),最终解决,特将配置流程记下,以免其它像我这样的菜鸟再次入坑:
一、环境准备:
AndroidStudio(用的是1.3.2版本)
NDK(android-ndk-r11版本)
二、配置开始:
1.创建新的一个project,并建立一个blankActivity
2.在MainActivity.java中增加一个方法
代码:
publicnativeStringgetStringFromNative();此时“getStringFromNative()”会有红色报错,不用管它,继续下一步
3.打开as的Teminal,进入到app/src/main/java目录下,输入:javah-d../jnicom.kuhn.myjni.MainActivity,如果没有任何报错,这时as刷新后,会多出一个jni的文件夹,该文件夹下会出现com.kuhn.myjni.MainActivity.h文件,文件内容类似下面这样:
代码:
/*DONOTEDITTHISFILE-itismachinegenerated*/#include<jni.h>/*Headerforclasscom_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;*/JNIEXPORTjstringJNICALLJava_com_kuhn_mykuhn_MainActivity_getStringFromNative(JNIEnv*,jobject);#ifdef__cplusplus}#endif#endif4.接着,修改local.properties文件,末尾增加ndk路径:
代码:
ndk.dir=D\:\\android-ndk-r115.修改app下的build.gradle,在defaultConfig中增加
代码:
ndk{moduleName"jni"//你的so库文件名}6.在jni目录下新建一个.c文件,我的叫“jni.c”,然后将.h头文件包含进去,并写入相应代码:
代码:
////CreatedbyKuhnon2016/3/17.//#include"com_kuhn_mykuhn_MainActivity.h"JNIEXPORTjstringJNICALLJava_com_kuhn_mykuhn_MainActivity_getStringFromNative(JNIEnv*env,jobjectobj){return(*env)->NewStringUTF(env,"I'mcomesfromtoNativeFunction!");}如果正确无报错的话,左侧会出现红绿色的相交箭头,表示方法调用了:
7.MainActivity.java中增加相应调用代码:
代码:
publicclassMainActivityextendsAppCompatActivity{TextViewtv=null;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv=(TextView)findViewById(R.id.tv);tv.setText(getStringFromNative());}publicnativeStringgetStringFromNative();static{System.loadLibrary("jni");}}8.最后在gradle.properties文件中,末尾增加 代码:
android.useDeprecatedNdk=true,否则会运行报错
9.OK,大功告成,上图:
更多相关文章
- Android的代码都得自己一个个敲一遍吗?
- Android 电子书应用完全开源代码
- Android 原始资源文件的使用详解
- Android中如何获取视频文件的缩略图
- Android缩略图类源代码
- Android 根文件系统分析(2)