mac java jni_mac下NDK开发(java调用so文件)

本文介绍了在Mac上使用Eclipse进行Java JNI(Java Native Interface)开发的步骤,包括配置NDK路径,创建Android工程,生成so文件,编写Java调用本地C/C++代码,以及最终在MainActivity中调用JNI方法的详细过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eclipse下两种配置方式:

一种是右键工程选择properties->builders->new->program,然后再做相应的选择,因为这种方式我没有尝试过,网上也有例子,所以我就不做详细的说明。

另一种方式:先加载ndk路径:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

选择标题栏的Eclipse->Preferences->

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

然后选择NDK的路径即可。

接下来新建一个android工程:TestJNI

然后右键工程

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

然后左键点一下你的工程就发现

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

这个小锤子就可以使用了,这个工具就是用来生成so文件的

接下来就是java调用c/c++的过程了(睁大眼睛,不要走开)

0818b9ca8b590ca3270a3433284dd417.png

在这里我们新建一个JNIClient.java类用来调用本地相关文件

package com.example.wade;

publicclass JNIClient {

staticpublicnative String AddStr(String strA,String strB);

static publicnativeintAddInt(inta,intb);

}

然后我们使用mac的控制台terminal,cd到JNIClient.java的目录,然后javac JNIClient.java生成JNIClient.class文件

然后我们再cd到src目录javah com.example.wade.JNIClient,会在src目录下生成com.example.wade.JNIClient.h文件

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

把这个h文件放在jni目录下,同时新建一个c文件,mk文件里

LOCAL_SRC_FILES := com_example_wade_JNIClient.c

最后重写C文件

#include"com_example_wade_JNIClient.h"

#include

#include

#ifdef __cplusplus

extern"C"{

#endif

/*

* Class:     com_example_wade_JNIClient

* Method:    AddStr

* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_example_wade_JNIClient_AddStr(JNIEnv *env,

jclass arg, jstring a, jstring b) {

jstring str = (*env)->NewStringUTF(env,"HelloWorld from JNI !");

returnstr;

}

/*

* Class:     com_example_wade_JNIClient

* Method:    AddInt

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_com_example_wade_JNIClient_AddInt(JNIEnv *env, jclass arg,

jint a, jint b) {

returna + b;

}

#ifdef__cplusplus

}

#endif

终于到了激动人心的一步了(最后最后一步了)

publicclass MainActivityextends Activity {

static{

System.loadLibrary("wade");

}

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

String str = JNIClient.AddStr("","");

System.out.println(""+str);

int sum = JNIClient.AddInt(3, 4);

System.out.println("sum:"+sum);

}

@Override

publicboolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

returntrue;

}

}

在我们的主类里调用库文件,然后进行相应方法的调用即可。

这时候运行程序,会发现已经成功!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值