把解压后的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. Spring 使用外部部署文件

    1.导入属性文件: <context:property-placeholder location="classpath:db.properties"/> 2.使用外部化 ...

  2. 创建虚拟桌面的代码(重启桌面进程)(使用GetThreadDesktop,CreateDesktop,SetThreadDesktop等函数)

    在upk 里挖坟得来,有兴趣查查这几个函数... #include "windows.h" #pragma comment(lib,"user32.lib") ...

  3. 例说C#深拷贝与浅拷贝

    一开始,先对C#深拷贝与浅拷贝知识做个简单的总结. 无论是浅拷贝与深拷贝,C#都将源对象中的所有字段复制到新的对象中.不过,对于值类型字段,引用类型字段以及字符串类型字段的处理,两种拷贝方式存在一定的 ...

  4. android Button隐藏

    两种方式: xml方式 和 java代码方式: 可见(visible) XML文件:android:visibility="visible" Java代码:view.setVisi ...

  5. xmanager远程登录

  6. 汉企C#面向对象——继承Practice

    class Dianqi //创建电器类:父类 { private string _Dianqimingzi; public string Dianqimingzi { get { return _D ...

  7. BZOJ_3196_二逼平衡树_(树套树,线段树+Treap)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3196 可以处理区间问题的平衡树. 3196: Tyvj 1730 二逼平衡树 Time Lim ...

  8. WordPress RokNewsPager插件‘thumb.php’多个安全漏洞

    漏洞名称: WordPress RokNewsPager插件‘thumb.php’多个安全漏洞 CNNVD编号: CNNVD-201309-369 发布时间: 2013-09-24 更新时间: 201 ...

  9. WebView loadData出错(奇怪的设计)

    今天遇到一个奇怪的问题. 我使用WebView加载一个网页.  方法1. 直接使用 loadUrl() 方法,没有问题.完全可以.方法2. 使用loadData()方法,出现问题,无法显示.方法3. ...

  10. ADO.NET 代码示例

    转自:http://msdn.microsoft.com/zh-cn/library/dw70f090 本主题中的代码列表演示如何使用下面的 ADO.NET 技术从数据库中检索数据: ADO.NET ...