Android NDK JNI 简单调试 demo
来源:互联网 发布:资海网络集团电话 编辑:程序博客网 时间:2024/06/02 02:08
由于Android的应用层的类都是以Java写的,这些Java类编译为Dex型式的Bytecode之后,必须靠Dalvik虚拟机(VM: Virtual Machine)来执行。VM在Android平台里,扮演很重要的角色。
1.先建一个NdkJniDemo的工程
2.新建JniUtils类实现native方法
public class JniUtils { public static native String getStringFormC();}
3.如图操作:
4.然后 clean project 在 rebuild project 生成 class 文件;这时候打开如下图的文件夹看是否生成了 classes 文件夹,没有生成请重新来过。如下图:
5.再打开 Terminal 输入指令(其实在 Terminal 我命令没有执行成功,我是直接在 dos 中去执行的命令。)
cd app/build/intermediates/classes/debug
然后在输入指令
javah -jni com.wobiancao.ndkjnidemo.ndk.JniUtils
注意 这里的 javah -jni 后面跟的是 JniUtils 类的全路径,如果 javah 报不存在之类的,是你的 java 环境没有配置好。( 也可以在 dos 命令窗口来执行上面的命令)
6.这时候打开 classes/debug 下面的文件发现多了一个文件
com_wobiancao_ndkjnidemo_ndk_JniUtils.h
然后在 src/main 下新建文件夹 jni,把生成的 .h 文件复制或者剪切到 jni 文件夹下面去,新建一个 c 类随便取一个名字,添加代码如下:
//// Created by XY on 16/1/4.//#include "com_wobiancao_ndkjnidemo_ndk_JniUtils.h"/* * Class: Java_com_wobiancao_ndkjnidemo_ndk_JniUtils * Method: getStringFormC * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_wobiancao_ndkjnidemo_ndk_JniUtils_getStringFormC (JNIEnv *env, jobject obj){ return (*env)->NewStringUTF(env,"这里是来自c的string"); 注意这里的方法名要求和第二步中类的方法名一直,不然会报错
这里发现头文件 #include<jni.h>报红色,是因为咱们还没有配置 ndk 环境,打开 file->project structure 选择你所下载的 ndk 环境路径,如果没有 ndk 这里有个地址大家可以去下载 一个安卓工具集合的网站:http://androiddevtools.cn/
7.我们要在 jni 目录下创建 Android.mk 和 Application.mk 文件
Android.mk文件内容为
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := appLOCAL_SRC_FILES := jnitest.cinclude $(BUILD_SHARED_LIBRARY)
Application.mk内容为(这个配置是为了生成所有平台的so库,若不配置只会生成armeabi目录下的)
APP_ABI := all
8.配置 Gradle
在defaultConfig下,配置ndk:
ndk { moduleName "app" // 生成的so名字 }
在android标签内配置sourceSets:
注意:这里也有坑
若此处没设置会报[Execution failed for task ':app:compileDebugNdk']这个错误
sourceSets.main { jni.srcDirs = ['libs']}
9.生成的 so 文件都在 src/main/libs 目录下:
在 Terminal 下执行 ndk-build
(其实 Terminal 中我命令没有成功,可以到 dos 窗口中去执行命令是一样的。但是需要到下图的文件路径下去执行 ndk-build)
11.截止到目前我们的.so库就全部生成了----------------------------------------分割线--------------------------------------
下面就是对我们的so的使用了
1、在main文件中创建jniLibs 将我们的libs下的so文件拷贝到下面去
2、在JniUtils类中添加代码块
static { System.loadLibrary("app"); //defaultConfig.ndk.moduleName}
3、运行的我们的程序就能看到开始图上的结果了
----------------------------------------分割线--------------------------------------
在加上 NDK 环境变量的配置和验证:
1、首先是要配置NDK(若是已经配置过NDK请略过此步骤)
官网下载NDK地址(此地址下载需要翻墙)
若是你翻不了墙请移步至
一个强大的下载网站(Androiddevtools你值得拥有)
下载好之后是个压缩包,应该做什么你应该知道了,然后下面进行第二步
2、配置环境变量
创建NDK_HOME
(我按照下图步骤对 ndk 的环境变量进行了配置,但是不行。最后我直接在 path 路径中添加 ndk 的路径 D:\android-ndk-r13b-windows-x86_64\android-ndk-r13b ,却可以执行命令)
再将配置好的NDK_HOME添加到PATH环境变量中
配置好之后可以测试是否配置正确 ,打开cmd在里面输入ndk-build
出现上述结果就说明ndk环境变量已经设置成功了,提示信息是因为没有定义NDK_PROJECT_PATH变量,此处用不到,我们暂不处理
----------------------------------------分割线--------------------------------------
上面方法步骤主要是参照这两篇博客:
http://www.open-open.com/lib/view/open1451917048573.html
http://www.jianshu.com/p/5fc674ee4810;然后在集合自己踩过的坑进行了补充修改。
- Android NDK JNI 简单调试 demo
- android NDK/JNI demo
- Android JNI/NDK 简单使用
- Android Studio NDK-Jni开发小Demo
- Android使用ndk-gdb调试jni程序
- android jni ndk-gdb调试笔记
- Android ndk jni log 输出 打印 调试
- android(NDK+JNI)---Eclipse+CDT+gdb调试android ndk程序
- android JNI 简单demo(2)之JNI demo 编写
- Android JNI和NDK学习(04)--NDK调试方法
- Android JNI和NDK学习(05)--JNI真机调试
- JNI for Android, Android Studio NDK 入门 实例 demo
- Android SDK、NDK、JNI的简单介绍
- Android SDK、NDK、JNI的简单介绍
- Android NDK JNI 的简单使用
- Android NDK JNI 简单例子2
- android studio JNI/NDK的简单使用
- Android JNI 开发 Demo by NDK (native develop kit)
- 菜鸟学习DBus之学习资料推荐
- ROS实践(1)-环境搭建
- 从0开始学习 GitHub 系列之「01.初识 GitHub」
- HTML基础标签
- Android中,xml代码注释注意事项
- Android NDK JNI 简单调试 demo
- 分区(partitioning)概述
- Allegro出图1-钻孔文件
- UVA 11729
- GCD....使用
- android 打造真正的下拉刷新上拉加载recyclerview(四):自动加载和其他封装
- eclipse安装或者更新svn插件
- Posix匿名信号量与fork
- 网络编程常用字符串转换函数