Android的JNI【实战教程】2⃣️--AS下NDK环境配置及第一个工程
来源:互联网 发布:如何申请软件著作权 编辑:程序博客网 时间:2024/05/18 09:32
通过上一篇相信大家已经对Java和c/c++之间的桥梁JNI有了初步认识,那么接下来就让我们写个小demo来实现。
http://blog.csdn.net/github_33304260/article/details/62891137
let’s show time!
配置:
首先需要把我们本地的NDK环境搭起来:
1. 下载NDK:
AS里面配置NDK超级EASY,点击file–ProjectStructure
我这里在NDK Location处已经有了NDK,没有的回提示下载,直接点击下载就好了。
2. 配置环境变量
和配置SDK方法一下 在配置文件中添加如下代码(MAC)
然后
source .zshrc
- 1
- 1
更新一下全局配置(本人用的o-m-zsh)
命令行输入:
ndk-build
- 1
- 1
有下面提示说明配置正确,否则会提示command not found
Android NDK: Could not find application project directory !Android NDK: Please define the NDK_PROJECT_PATH variable to point to it./Applications/sdk/ndk-bundle/build/core/build-local.mk:151: *** Android NDK: Aborting . Stop.
- 1
- 2
- 3
- 1
- 2
- 3
生成.h文件:
一、新建一个类
public class NDK { // 1.加载实现了native函数的动态库,只需要写动态库的名字 static { System.loadLibrary("MyJni"); } // 2.声明这是一个native函数,由本地代码实现 public static native String getStringFromNative();//本地方法 public static native String getString_From_c();}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
System.loadLibrary(“MyJni”);加载库,需要注意的是加载的库名即编译生成的库名,去掉前缀lib和后缀so。
二、现在我们make project一下
会看到在我们的../app/build/intermediates/classes/debug
目录下生成了一个对应的.class文件
三、在app/build/intermediates/classes/debug
目录下执行如下代码javah -jni com.libin.factory.ndk.NDK
!!!这里说明一下:javah是生成头文件需要的工具,-d jni 在工程下生成jni目录,com.libin.factory.ndk.NDK刚才创建的类的全类名。
四、我们现在在 app/build/intermediates/classes/debug
目录下可以看到刚才生产的.h文件:
五、我们可以看一下我们的.h文件
关联.h和.java文件
当我们完成上面的步骤发现.java里面的方法是红色的没法点击,
如下图:
第一步:在main目录下创建jni文件夹将之前生成的.h文件拷贝进来。
第二步:在gradle里面配置
ndk { moduleName "MyJni" //生成的so名字 }
- 1
- 2
- 3
- 1
- 2
- 3
第三步:在gradle.properties中添加配置Android.useDeprecatedNdk=true
第四步:此时我们已经可以点击NDK里面的方法,已经可以和.h之间的方法互相跳转,实现了关联。
开始写我们的c++代码了
此时在刚才创建的jni目录下创建cpp文件,名字可以随意啦,我起的jnitest.c
我的cpp代码如下:
//// Created by libin on 2017/3/17.//#include "com_libin_factory_ndk_NDK.h"#include "jni.h"/* * Class: com_libin_factory_ndk_NDK * Method: getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_libin_factory_ndk_NDK_getStringFromNative (JNIEnv * env, jclass){ return (*env).NewStringUTF("ndk");}/* * Class: com_libin_factory_ndk_NDK * Method: getString_From_c * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_libin_factory_ndk_NDK_getString_1From_1c (JNIEnv * env, jclass){ return env->NewStringUTF("NDK 来自于C文件");}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
运行apk
成功啦 ! 我们已经完成了第一个NDK工程啦。
下面我们也可以看到生成的.so文件
文章转自:http://blog.csdn.net/github_33304260
- Android的JNI【实战教程】2⃣️--AS下NDK环境配置及第一个工程
- Android的JNI【实战教程】2⃣️--AS下NDK环境配置及第一个工程
- Android的JNI【实战教程】5⃣️---Android Studio 2.2 以上 NDK开发
- Android的环境配置及第一个Android程序的运行
- Android studio配置jni以及第一个jni程序
- android(NDK+JNI)---NDK开发 环境配置
- Android NDK 环境搭建以及第一个Demo
- Android NDK入门2015(环境搭建及第一个小demo)
- 关于NDK的配置以及第一个应用程序(android中java语言调用c/c++)
- Windows7 下Eclipse集成Cygwin配置Android NDK环境编译JNI库(2)
- Windows7 下Eclipse集成Cygwin配置Android NDK环境编译JNI库(2)
- JNI 之 Eclipse下NDK环境配置
- Android Studio JNI开发的环境配置 NDK
- Android Studio NDK环境配置与JNI简单的例子
- Android AS平台jni环境配置
- Android studio环境下的 NDK(jni)开发
- Android Studio 下的NDK环境搭建与JNI调用
- Android JNI 开发之NDK环境配置
- 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
- 009-第一个Dockfile
- android实现自定义相机效果
- Google的Vysor使用时出现黑屏解决
- 二分法和牛顿法求一个非负实数的根号
- Android的JNI【实战教程】2⃣️--AS下NDK环境配置及第一个工程
- 应用层协议------HTTP
- C++中placement new操作符
- git中ssh与https究竟有何不同
- 关于sed命令去除文本当中每个字段前后空格及tab效率低下的解决办法
- J-Link 与 SWD
- Stream API
- sendfile函数
- JavaScript实现键值对数组,类似Java语言中的Map