java|android通过jni接口与c、c++互调

都知道java和c的互相调用是通过jni接口,这里我也来说一下在andorid里面如果调用c和c++代码。
废话不多说这里我们的任务是在ADT里面能编译c/c++的源文件为.so的链接库。
工欲善其事必先利其器:
这里我们需要的器就是:
1:ndk 下载地址 http://developer.android.com/tools/sdk/ndk/index.html
2:ADT 就是android开发的eclipse开发环境
3: 安装一下CDT这样看c和c++的代码感觉舒服点
好了就这几个就够了,以前很多质料上面都说要用到cygwin但是我没有用到.
第一步:
下载好ndk解压到任何的一个地方。

第二步:
然后用ADT新建一个andorid工程我这里随便新建一个就叫androidndktest
第三部:
进入解压的ndk目录找到E:\android-ndk-r9c\samples\hello-jni这里面的jni东西拷贝到ADT的工程目录里面现在的样子一般就是这样java|android通过jni接口与c、c++互调
文章图片

java|android通过jni接口与c、c++互调
文章图片


好了我们继续:打开jni里面的hello-jni.c文件修改如下

#include #include /* This is a trivial JNI example where we use a native method * to return a new VM String. See the corresponding Java source * file located at: * *apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java */ jstring Java_com_example_ndktest_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz ) {return (*env)->NewStringUTF(env, "Hello from JNI !Compiled with ABI "); }


这里我有必要解释一下,这个是我们的c代码,它的函数名字可能有点长,但是没关系,其实这是jni规定的最开始的Java反正你照着写就对了com_example_ndktest 这一串就是包名字了,后面的就是java的哪个类要调用它还有它的名字就这么简单,返回的是一个String的字符串,然后我们来看看在java里面怎么调用它
//声明c的接口 public native String stringFromJNI(); static { System.loadLibrary("hello-jni"); }


最总要的就是这两句话 第一句是声明,第二句是加载编译好的so库,但是现在我们还没有编译,这里我们来配置好所有东西然后跑起来看看效果
在项目上右键properties然后出现这个界面选择builders新建一个然后看图配置java|android通过jni接口与c、c++互调
文章图片
java|android通过jni接口与c、c++互调
文章图片



java|android通过jni接口与c、c++互调
文章图片
java|android通过jni接口与c、c++互调
文章图片


java|android通过jni接口与c、c++互调
文章图片


java|android通过jni接口与c、c++互调
文章图片


配置完毕过后编译器就会自动编译了,编译完成过后点击run这样就可以在android上跑起来了。java|android通过jni接口与c、c++互调
文章图片

java|android通过jni接口与c、c++互调
文章图片


这里是我的java代码
public class MainActivity extends Activity { //声明c的接口 public native String stringFromJNI(); static { System.loadLibrary("hello-jni"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView = (TextView) findViewById(R.id.hello); textView.setText(stringFromJNI()); }}


【java|android通过jni接口与c、c++互调】

    推荐阅读