Android关于JNI开发(2)-----Android Studio工具开发
来源:互联网 发布:淘宝网注册网上开店 编辑:程序博客网 时间:2024/06/05 01:12
关于jni的简介,在我的上篇博客Android关于JNI开发(1)-----eclipse工具开发里面已经介绍过了,这里就不在多讲,因为上篇博客里面开发工具用的是eclipse,而现在基本都已经开始用Android Studio了,所以这里在介绍一下用Android Studio开发jni.网上有很多将步骤的,然而靠谱的不是很多。这里给大家提供一个流程。然后在将一些常见的问题的处理方法。
我这里用的AS版本是2.0,ndk的版本是10r。最开始ndk版本是8r,各种问题,后来改成10r,就好了。
1,创建一个android工程,JniDemo,并在MainActivity中添加一个本地方法:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv=(TextView)findViewById(R.id.tv); } public native String getString();}如果你的本地方法报错(是红色的),可以不用管它,也可以settings->plugins->Android NDK Support后面的勾去掉就可以了。
2, 进入文件夹D:\Android\JniDemo\app\src\main\java然后按住shift键,点鼠标右键,然后选择“在此处打开命令窗口”,然后进入doc命令的界面, 然后输入命令javah com.example.gaolong.jnidemo.MainActivity如果没有错误,则会在D:\Android\JniDemo\app\src\main\java下生成一个文件 com_example_gaolong_jnidemo_MainActivity.h,程序中在D:\Android\JniDemo\app\src\main\java\com\example\gaolong\jnidemo下出现 com_example_jnidemo_MainActivity.h文件。
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_gaolong_jnidemo_MainActivity */#ifndef _Included_com_example_gaolong_jnidemo_MainActivity#define _Included_com_example_gaolong_jnidemo_MainActivity#ifdef __cplusplusextern "C" {#endif/* * Class: com_example_gaolong_jnidemo_MainActivity * Method: getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_gaolong_jnidemo_MainActivity_getString (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
3, 然后在D:\Android\JniDemo\app\src\main\java下创建一个文件夹,命名为“jni”,将com_example_jnidemo_MainActivity.h复制到jni中,然后创建两个c文件(一个写自己的代码,一个什么都不写,AS开发jni的时候有一个bug,就是如果jni中只有一个c文件,编译的时候会出错。)jni.c和empty.c然后打开.h文件夹,将里面的方法复制到jni.c文件夹中,然后补全参数和要实现的逻辑代码。在.c中加入导入文件的代码。
jni.c代码内容如下:
#include<stdlib.h>#include<stdio.h>#include"com_example_gaolong_jnidemo_MainActivity.h"JNIEXPORT jstring JNICALL Java_com_example_gaolong_jnidemo_MainActivity_getString (JNIEnv * env, jobject job){ return (*env)->NewStringUTF(env,"I'm comes from to Native Function!"); }
ndk.dir=D\:\\BaiduYunDownload\\android-ndk32-r10-windows-x86\\android-ndk-r10sdk.dir=D\:\\ruanjiananzhuangbao\\sdk
5.修改app下的build.gradle,在defaultConfig 中增加
defaultConfig { applicationId "com.example.gaolong.jnidemo" minSdkVersion 17 targetSdkVersion 23 versionCode 1 versionName "1.0" ndk { moduleName "jni" //你的so库文件名 } }
android.useDeprecatedNdk=true
7最后MainActivity.java中增加相应调用代码,即调用c代码中的方法。
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("jni"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv=(TextView)findViewById(R.id.tv); tv.setText(getString()); } public native String getString();}
我的源码在这里,有需要的朋友可以下载一下。源码:源码
- Android关于JNI开发(2)-----Android Studio工具开发
- NDK工具开发Jni,Android studio jni开发
- Android关于JNI开发(1)-----eclipse工具开发
- Android Studio开发JNI
- Android Studio JNI开发
- Android Studio jni开发
- Android Studio jni开发
- android studio Jni开发
- Android studio JNI开发
- Android Studio JNI开发
- Android Studio JNI开发
- android studio jni开发
- Android Studio Jni开发
- Android Jni 开发(Android studio)
- Android Jni 开发(Android studio)
- Android studio JNI(NDK) 开发
- Android Studio开发JNI工程
- Android Studio开发JNI工程
- leetcode算法总结之字符串除空格操作
- iOS真机运行出现The certificate used to sign "APP名" has either expired or has been revoked.
- 2016年最新的第三方支付公司排名
- 02-如何使用通用Mapper
- IE上不了网,但是火狐可以
- Android关于JNI开发(2)-----Android Studio工具开发
- Caused by: java.lang.NoClassDefFoundError: javassist/util/proxy/MethodFilter
- SEO关键词:从延伸到聚焦
- Mac电脑上配置cocoaPods环境(最新版)
- JS的Event属性和方法
- STRUTS2为每个线程提供一个ACTION实例
- 03-在Spring4中使用通用Mapper
- 如何退出Activity?如何安全退出已调用多个Activity的Application?
- qt换肤功能-qss