JNI开发应该是最详细的步骤了
2017-03-29 18:40
253 查看
关于Android的NDK开发你需要了解的
NDK开发环境的配置
一 ,Android Studio中早已支持NDK的导入,AS版本上的环境配置。
当你在项目中使用的时候
做完上面这一部的话,你可以去你的SDK路径下去看看了,你将看到
的路径,很好了,NDK你已经下载完毕。(这里自动下载最新版的)
二 ,当然你自己也可以去NDK的官网下载最新版的NDK。
NDK下载
三,对于前两种的下载方式,希望选择第一种,因为还能下载调试工具,虽然我不讲,但以后会用到的。剩下的我们就是在系统的环境变量中配置NDK路径。
路径就这样也就配置好了。
四,我们在DOS操作界面检测一下,你输入
出现上面的信息的话也就证明你的环境成功了。
在Android Studio中使用
一,在app级别的build文件中
同步一下,看下出错什么的吗,如果出错,请检查上面的AS的环境配置中的第二张截图,选择了NDK目录了吗。
还有根据提示需要在gradle.properties中设置android.useDeprecatedNdk=true。
二,创建你调用So库的CLass,因为你现在还没有根据 .C文件生成,我们先写上,调用native的方法吧。
这里会提示当前没有 HelloWord这个方法。不着急,我们慢慢来。
这里,我们在main 目录下创建 jni 的目录 ,为下一步在此目录生成相应文件。
三,接下来我们应该根据这个Class 生成相应的 .h 文件,它的语法规则很麻烦,但我们可以不去掌握的它的生成规则。可以利用 javah 自动生成
记住,这里一定要在你的 app 目录级别下去生成(我是这么做的,其他也能生成,但感觉这样好记忆一点)
如果这里出现问题,请你更换下自己moudel的名字,也就成功了。
四,.h文件生成完毕,我们就开始 做 .c文件了
.c文件
Application.mk文件
Android.mk文件
仔细看,我们注意到包名有所变化,写的.c文件 也不用我们太关心,只要 .h文件是正常的请求头就好。
五,到这一步,我们的 jni 调试已经完成了一大半了,剩下的就开始编译吧。
我们从 Dos界面 进入到 jni目录
在此目录下执行操作
你可能在AS下直接用它的 terminal 进行操作,不好意思,可能会行不通。看系统了吧。
执行完编译的后 我们会看到以下的目录结构
obj目录你可以删除,我们只保留libs 目录即可。编译完成,你可以正常调用.C文件的方法了。
别忘了,我们还需要在 我们调用的的Class 中 加载编译生成的SO库,
OK ,完事,你可以在其他界面调用了。
本例子虽然简单,但是步骤详细,是你jni开发了解详细步骤的不多见的例文,后面我附上源码,需要的请star.
JNIDemo
JNI,JNI(Java Native Inteface)是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。尤其是c/c++,但是并不妨碍你使用其他语言,只要调用约定支持就可以了。 这里,将详细记录我的NDK开发的踩坑之路。
NDK开发环境的配置
一 ,Android Studio中早已支持NDK的导入,AS版本上的环境配置。
当你在项目中使用的时候
做完上面这一部的话,你可以去你的SDK路径下去看看了,你将看到
E:\AndroidSDK\sdk\ndk-bundle
的路径,很好了,NDK你已经下载完毕。(这里自动下载最新版的)
二 ,当然你自己也可以去NDK的官网下载最新版的NDK。
NDK下载
下载到自己容易找到到的目录。
三,对于前两种的下载方式,希望选择第一种,因为还能下载调试工具,虽然我不讲,但以后会用到的。剩下的我们就是在系统的环境变量中配置NDK路径。
路径就这样也就配置好了。
四,我们在DOS操作界面检测一下,你输入
ndk-build
出现上面的信息的话也就证明你的环境成功了。
在Android Studio中使用
上面我们已经配置了好了环境,接下来就一步步带你实现自己的JNI开发的第一步!
一,在app级别的build文件中
defaultConfig { applicationId "com.example.administrator.myndkceshi" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //以下两条需加入 sourceSets.main { jniLibs.srcDir 'src/main/libs' } ndk { moduleName 'helloword' }
同步一下,看下出错什么的吗,如果出错,请检查上面的AS的环境配置中的第二张截图,选择了NDK目录了吗。
还有根据提示需要在gradle.properties中设置android.useDeprecatedNdk=true。
二,创建你调用So库的CLass,因为你现在还没有根据 .C文件生成,我们先写上,调用native的方法吧。
这里会提示当前没有 HelloWord这个方法。不着急,我们慢慢来。
这里,我们在main 目录下创建 jni 的目录 ,为下一步在此目录生成相应文件。
三,接下来我们应该根据这个Class 生成相应的 .h 文件,它的语法规则很麻烦,但我们可以不去掌握的它的生成规则。可以利用 javah 自动生成
记住,这里一定要在你的 app 目录级别下去生成(我是这么做的,其他也能生成,但感觉这样好记忆一点)
javah -d src/main/jni/ -classpath build/intermediates/classes/debug/ com.example.administrator.myndkceshi.HelloJni //-d 指定生成的目录路径 // -classpath build build之后,会在debug目录下生成.class文件的 //最后面就是你的完整类名了
如果这里出现问题,请你更换下自己moudel的名字,也就成功了。
四,.h文件生成完毕,我们就开始 做 .c文件了
.c文件
#include "com_example_administrator_myndkceshi_HelloJni.h" JNIEXPORT jint JNICALL Java_com_example_administrator_myndkceshi_HelloJni_HelloWord(JNIEnv *env, jobject instance, jint a) { if (a >10) { return 100; } if(a<10){ return 300; } return 400; }
Application.mk文件
APP_MODULES := helloword APP_ABI :=all
Android.mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE :=helloword LOCAL_SRC_FILES =: com_example_administrator_myndkceshi_HelloJni.c include $(BUILD_SHARED_LIBRARY)
仔细看,我们注意到包名有所变化,写的.c文件 也不用我们太关心,只要 .h文件是正常的请求头就好。
五,到这一步,我们的 jni 调试已经完成了一大半了,剩下的就开始编译吧。
我们从 Dos界面 进入到 jni目录
在此目录下执行操作
ndk-build
你可能在AS下直接用它的 terminal 进行操作,不好意思,可能会行不通。看系统了吧。
执行完编译的后 我们会看到以下的目录结构
obj目录你可以删除,我们只保留libs 目录即可。编译完成,你可以正常调用.C文件的方法了。
别忘了,我们还需要在 我们调用的的Class 中 加载编译生成的SO库,
public class HelloJni {
static {
//加载.so类库,加载的名称去掉lib
System.loadLibrary("helloword");
}
public native int HelloWord(int a);
}
OK ,完事,你可以在其他界面调用了。
HelloJni helloJni = new HelloJni(); TextView tv = (TextView) findViewById(R.id.tv); tv.setText(helloJni.HelloWord(220)+"");
本例子虽然简单,但是步骤详细,是你jni开发了解详细步骤的不多见的例文,后面我附上源码,需要的请star.
JNIDemo
相关文章推荐
- android之JNI开发详细步骤
- 在AndroidStudio2.3.2下JNI开发的详细步骤
- android jni开发详细步骤
- NDK开发(1)——JAVA通过JNI调用C代码详细步骤
- 在AndroidStudio下JNI开发的详细步骤
- JNI及Android JNI 开发基本知识和具体操作步骤
- Android下JNI开发步骤
- 开发在HTTP服务器端运行的Servlet详细步骤
- JNI操作的详细步骤
- Eclipse + jboss开发EJB详细步骤
- ios 5.1.1完美越狱+xcode4.1/4.2/4.3免证书(iDP)开发+真机调试+生成ipa文件+破解详细步骤
- java的JNI调用完整步骤(有详细的截图) java 本地调用
- Ubuntu Feisty 下开发 JNI 应用步骤 (Java调用C/C++的技术)
- ubuntu下搭建java web开发环境的详细步骤
- linux下JNI开发步骤详解
- 【Java Servlet 开发系列之一】在mac系统安装Apache Tomcat的详细步骤
- WPF开发示例,详细操作步骤
- JBoss5开发EJB3.0的环境搭建详细步骤
- 使用ARM开发详细步骤
- 快速搭建Struts1.x开发环境详细步骤与讲解