android ndk hello,world!

来源:互联网 发布:python 3.5.2语法 编辑:程序博客网 时间:2024/05/16 17:54
java 层受限于虚拟机。有些操作可能需要用ndk来实现。下面我简单的写一个demo . 这个demo主要作用是  在C层提供一个方法   add(int i , int i ) . 实现两个数的相加。

一。  在Java层写一个类  ,这个类包含   native方法。  如下

    

package com.test.ndk_hello;public class NdkTools {public  native   int  add(int a , int b) ;static  {System.loadLibrary("ndktools");}}

       其中  static 中的语句   主要是加载 ndktools 这个库。   ndktools  是我们下面要实现的库名字。

  二 。 编写ndk层   ,实现 add 函数。

    1 . add.c  

#include <jni.h>jint  Java_com_test_ndk_NdkTools_add(JNIEnv *env, jobject obj, jint a, jint b){    return  a+b ;}

注意这个方法名 。它其实是 Java_  加上 包名 在加上类名方法名。  可以自己直接按照这种规则写。也可以先用javah   先得到头文件。具体做法如下

   C:/XX/bin/:
javah -classpath . -jni com.test.ndk.NdkTools然后 就会再classes目录下得到


这个头文件中就会有具体的方法名。



1.  Android.mk

   ndk的  makefile

LOCAL_PATH := $(call my-dir)MY_USE_SPEEX := 1include $(CLEAR_VARS)ANDROID_DEBUG :=1#Add target arm versionifeq ($(TARGET_ARCH_ABI),armeabi)MY_PJSIP_FLAGS := $(BASE_PJSIP_FLAGS) -DPJ_HAS_FLOATING_POINT=0elseMY_PJSIP_FLAGS := $(BASE_PJSIP_FLAGS) -DPJ_HAS_FLOATING_POINT=1endifLOCAL_CFLAGS := $(MY_PJSIP_FLAGS)APP_PLATFORM := android-9LOCAL_MODULE    := ndktoolsLOCAL_SRC_FILES := add.cLOCAL_LDLIBS :=   -lloginclude $(BUILD_SHARED_LIBRARY)
然后运行ndk-build   就会生成 ndktools.so .

然后把这个.so  copy到工程目录lib中  就可以用了。