NDK的简单使用

首先:Android NDK的使用环境需要配置ndk 和adt是适配的,我使用的ADT版本是23.0.6,ndk为:android-ndk-r12b-windows-x86_64(文章末尾会贴出资源,下载地址可能要翻墙一下:https://developer.android.com/ndk/downloads/index.html);ndk是等下生成so文件的关键。

1.当环境变量等准备工作都做好了后,就可以开始编程了,一般有的人是直接写.C文件,但有时候我们的方法命名格式不一定对。所以我今天要使用的是自己生成一个.h文件,然后中间会有.c文件的方法名格式(对于记不住东西的我,我感觉这个方法是极好的)。

2新建项目,在类中申明方法  例:

public native static String getMessage();
public native static String getMessageforshelf(String msg);

这里我申明了两个方法一个带参,一个不带,然后在主目录下新建一个jni文件夹,打开cmd:进入当前文件目录:D:\myTeam\Review>javah -classpath bin/classes;D:\tools\android.jar -d jni com.lu
osu.review.NdkActivity, 这句命令的作用就是:会在jni目录下生成一个.h文件,这个.h文件中会含有生成的方法格式。


JNIEXPORT jstring JNICALL Java_com_luosu_review_NdkActivity_getMessage
  (JNIEnv *, jclass);


/*
 * Class:     com_luosu_review_NdkActivity
 * Method:    getMessageforshelf
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_luosu_review_NdkActivity_getMessageforshelf
  (JNIEnv *, jclass, jstring);


我们只需新建一个.c文件讲两个方法复制过去,例如:

#include <stdio.h>
#include <stdlib.h>
#include "com_luosu_review_NdkActivity.h"


JNIEXPORT jstring JNICALL Java_com_luosu_review_NdkActivity_getMessage
  (JNIEnv * env, jclass jclass){

//这句话的意思就是生成一个新的字符串
return (*env)->NewStringUTF(env, "hello my world");
}


JNIEXPORT jstring JNICALL Java_com_luosu_review_NdkActivity_getMessageforshelf
  (JNIEnv * env, jclass jclass, jstring str){
return str;
}

3,当.c文件写好了以后,我们需要在jni文件夹下建立一个Android.mk用于配置一些信息:

LOCAL_PATH := $(call my-dir)  
  
include $(CLEAR_VARS)  
#LOCAL_MODULE表示生成的库的名字,前面的lib和后缀名不用写  
LOCAL_MODULE    := myndk
LOCAL_SRC_FILES := myndk.c 
  
include $(BUILD_SHARED_LIBRARY)  


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


LOCAL_MODULE 的意思就是 生产so包的名字  ,前面不需要加lib 系统会自动帮我们生产,

有时还可以建立一个Application.mk文件,可以指定一下我们需要适配的系统级环境,如果不指定也可以生成所有的so包;

APP_ABI :=armeabi,x86

3.打开cmd,在当前目录下调用一下ndk-build就会在你的项目中生产一个obj文件夹,里面有你的so包,

到此:生产so包的过程已经结束

4.调用:

在我们的类中建静态代码块,进行加载我们生成ndk: static{

System.loadLibrary("myndk");
}

由于我们先前已经什么了方法,所以可以直接调用了:

tv.setText(getMessage());
tvshelf.setText(getMessageforshelf("你好,我的世界"));


DEMO的下载地址:


http://download.csdn.net/detail/android_luosu/9662987


 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值