android:mac本 JNI的编译及调用

一. 项目使用

1.配置环境变量

打开 /Users/md313 下的文件 .bash_profile,设置路径 export PATH=/Users/md313/Documents/androidspace/android-ndk-r8c:$PATH

2.项目里编译(配置好的)

cd /Users/md313/

source .bash_profile 

cd 项目目录 

ndk-build 

编译完成

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

二. 一个简单的JNI例子

下面用一个简单的例子介绍怎么生成一个.so文件以及在Android项目中怎么调用.so文件。

①  首先,用Eclipse建立一个ANDROID的工程,命名为JNITest,建议一个jni调用的类封装native method

package jni.sam.you;

 

public class MyJNI

{

    public native int numPlus(int a,int b);

static{

System.loadLibrary("hellojni");

 }

}

打开终端,cd命令到eclipse工程目录下bin目录,我的是E:\androidworkspace\JNITest\bin\classes

键入javah -jni jni.sam.you.MyJNI 来编译eclipse生成的.class文件

可以生成jni_sam_you_MyJNI.h这个文件的主要作用就是生成函数名,把这个函数名拷出来这个文件就可以删了。

jni_sam_you_MyJNI.h

/* DO NOT EDIT THIS FILE - it is machinegenerated */

#include <jni.h>

/* Header for class jni_sam_you_MyJNI */

 

#ifndef _Included_jni_sam_you_MyJNI

#define _Included_jni_sam_you_MyJNI

#ifdef __cplusplus

extern "C" {

#endif

/*

 *Class:     jni_sam_you_MyJNI

 *Method:    numPlus

 *Signature: (II)I

 */

JNIEXPORT jint JNICALLJava_jni_sam_you_MyJNI_numPlus

 (JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus

}

#endif

#endif

然后将这个函数名拷贝出来实现他的函数体

jni_sam_you_MyJNI.c

/* DO NOT EDIT THIS FILE - it is machinegenerated */

#include <jni.h>

/*

 *Class:     jni_sam_you_MyJNI

 *Method:    numPlus

 *Signature: (II)I

 */

JNIEXPORT jint JNICALLJava_jni_sam_you_MyJNI_numPlus

 (JNIEnv *env, jobject jj, jint a, jint b)

{

        returna+b;

}

注意:参数名一定要补全,不然编译不通过

在项目根目录新建jni文件夹,把 .h 和.c文件考入,然后新建Android.mk和application.mk文件,(直接拷贝),打开application.mk文件查看,打开Android.mk文件,设置好编译路径等,

cd到项目目录,执行ndk-build命令,编译完毕后, 进入eclipse,在项目工程上右键Refresh,多出了 lib和obj文件夹,在入口activity load编译好的库

System.loadLibrary("rtmp"); 之后调用即可。


在主activity里调用native  method

package jni.sam.you;

 

import android.app.Activity;

import android.os.Bundle;

 

public class Main extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

   

    static

   {

        System.loadLibrary("hellojni");

    }

   

    @Override

    protected void onResume() {

    super.onResume();

    System.out.println("###########");

    System.out.println(newMyJNI().numPlus(2, 3));

   

}

}

从logcat里即可看到对应结果





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值