把解压后的ndk放在自己想放的位置

环境变量:ndk根目录添加到PATH=$PATH:<ndk-root-path>

使用NDK:在自己工作目录(可以是随意位置)下创建<Test>目录,然后在<Test>目录下创建jni目录,在jni下面创建Android.mk文件和C程序文件。

下面是Android.mk文件内容(不是定的)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := CheckNetInfoJni  // 模块名,最后生成libCheckNetInfoJni.so
LOCAL_SRC_FILES := CheckNetInfo.c // C程序文件
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog  // 使用utils/log.h头文件

include $(BUILD_SHARED_LIBRARY)

关于C文件里面的JNI_OnLoad函数:

首先是额外的两个头文件需要加进来,android/Log.h文件后面再说

#include <jni.h>

#include "android/Log.h"

写JNINativeMethod数组:

static const JNINativeMethod gMethods[] = {
{"getNetInfoFromApnic","()Ljava/lang/String;",(void*)JNI_getNetInfoFromApnic},
};

函数签名是一个字符串:"(M)N",括号中的内容是函数的参数类型,括号后面表示函数的返回值。

具体的每一个字符的对应关系如下
字符  Java类型     C类型
V   void       void
Z   jboolean    boolean
I   jint        int
J   jlong      long
D   jdouble     double
F   jfloat       float
B   jbyte        byte
C   jchar        char
S   jshort       short

数组则以”["开始,用两个字符表示
[I   jintArray    int[]
[F   jfloatArray  float[]
[B   jbyteArray   byte[]
[C   jcharArray   char[]
[S   jshortArray  short[]
[D   jdoubleArray double[]
[J   jlongArray   long[]
[Z  jbooleanArray boolean[]

如果Java函数的参数是class,则以”L”开头,以”;”结尾,中间是用”/” 隔开的包及类名。而其对应的C函数名的参数则为jobject
    一个例外是String类,其对应的类为jstring
    Ljava/lang/String; String jstring
    Ljava/net/Socket; Socket jobject

--------------------------------------------------------------

static const JNINativeMethod gMethods[] = {
{"getNetInfoFromApnic","()Ljava/lang/String;",(void*)JNI_getNetInfoFromApnic},
};

static int regeisterMethods(JNIEnv * env){
jclass class;
static const char * const kClassName = "com/lml/jni/CheckNetInfoJni";
class = (*env)->FindClass(env,kClassName);
if(class==NULL){
return JNI_FALSE;
}
if((*env)->RegisterNatives(env,class,gMethods,sizeof(gMethods)/sizeof(gMethods[0]))!=JNI_OK){
return JNI_FALSE;
}
return JNI_TRUE;
}

jint JNI_OnLoad(JavaVM * vm, void * reserved){
JNIEnv * env = NULL;
jint result = -1;
if((*vm)->GetEnv(vm,(void**)&env,JNI_VERSION_1_4)!=JNI_OK){
goto fail;
}
assert(env!=NULL);
if(regeisterMethods(env)<0){
goto fail;
}
result = JNI_VERSION_1_4;
fail:
return result;
}

——————————————————————————————————————————————

关于androidlog.h

#include <android/log.h>

#ifndef LOG

#define LOG "PCSC JNI Debug Infor"

#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG, __VA_ARGS__) //定义LOGD类型
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG,__VA_ARGS__) //定义LOGI类型
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG, __VA_ARGS__) //定义lOGW类型
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG, __VA_ARGS__) //定义LOGE类型
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL, LOG, __VA_ARGS__) //定义LOGF类型

#endif

关于Android NDK的更多相关文章

  1. Android NDK debug 方法

    最近又频繁遇到 NDK 的错误,记录一下debug调试的一些经验,以备后续查看 一般来说,在Android Studio中的Monitor中将过滤器的 LOG TAG 设置为 "DEBUG& ...

  2. Android NDK开发Hello Word!

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  3. Android NDK开发初识

    神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...

  4. android NDK debug 遇到的问题与解决方法

    最近在研究android  NDK 的eclipse调试,遇到点问题,总结一下: 1.Unknown Application ABI :在application.mk里面添加APP_PLATFORM ...

  5. 初识Android NDK

    本文介绍Windows环境下搭建Android NDK开发环境,并创建一个简单的使用Native代码的Android Application. 一.环境搭建 二.JNI函数绑定 三.例子 一.环境搭建 ...

  6. Android SDK Android NDK Android Studio 官方下载地址

    2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...

  7. Android NDK之JNI陷阱

    背景: 最近一个月一直在做移植库的工作,将c代码到share library移植到Android平台.这就涉及到Android NDK(native develop kit)内容.这里只想记录下JNI ...

  8. Android NDK开发

    Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...

  9. Eclipse+CDT+GDB调试android NDK程序(转)

    Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...

  10. android NDK入门 windows下安装cygwin

    一.Android NDK环境简介 Android NDK 是运行于Android 平台上的Native Development Kit 的缩写. Android 应用开发者可以通过NDK 调用C 或 ...

随机推荐

  1. 数据库水平拆分和垂直拆分区别(以mysql为例)

    数据库水平拆分和垂直拆分区别(以mysql为例) 数据库水平拆分和垂直拆分区别(以mysql为例)   案例:     简单购物系统暂设涉及如下表: 1.产品表(数据量10w,稳定) 2.订单表(数据 ...

  2. 关于在WIN32调用一些Zw系列的文件操作函数

    转自:http://blog.csdn.net/cooblily/archive/2007/10/27/1848037.aspx 都好久沒上來写文章了,都不知道做什么好,結果还是学写了一下用Nativ ...

  3. JSONP跨域的原理解析(转)

    JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源策略). ...

  4. 【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 二)

    原文网址:http://www.cnblogs.com/ChinaKingKong/p/4964549.html 前言部分 part二部分主要讲解 iOS App IDs 的创建.概要文件的配置.以及 ...

  5. 【转】android获取屏幕宽度和高度

    原文网址:http://www.cnblogs.com/howlaa/p/4123186.html 1. WindowManager wm = (WindowManager) getContext() ...

  6. HDU-1241 Oil Deposits (DFS)

    Oil Deposits Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  7. 对 Linux 初级、中级、高级用户非常有用的 60 个命令

    对 Linux 初级.中级.高级用户非常有用的 60 个命令 初级篇: 你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现在我的世界里了. ...

  8. java开发功能代码汇总

    多文件上传 http://smotive.iteye.com/blog/1903606 java 常用代码 Struts2 前后台(Action ,jsp)传值.取值 Action public Li ...

  9. A*寻路算法的探寻与改良(三)

    A*寻路算法的探寻与改良(三) by:田宇轩                                        第三分:这部分内容基于树.查找算法等对A*算法的执行效率进行了改良,想了解细 ...

  10. 用户home目录下的.gitconfig 和 库文件夹目录下的 .gitignore 示例

    .gitconfig文件: [user] name = hzh email = @qq.com [core] editor = vi quotepath = false [merge] tool = ...