安卓应用开发通过java调用c++ jni的图文使用方法

 更新时间:2013年11月25日 11:25:01   作者:  
这篇文章主要介绍了

首先建议一个工程 HelloJni如下图:

按照默认的配置下一步,直到完成 。

 

 

如下图操作,点击windows菜单-》Prefrence菜单:

 

弹出如下图:选择Andriod ->NDK:

配置完成以后,点击工程属性菜单:

做这一步的目的是,增加对c++代码的支持,他会自动生成一些东西,你会看到多一个jni的文件夹。

这个名字可以默认,就用工程的名字,实际上就是产生的c++代码生成.so文件的名称(windows上的dll文件).

完成以后。可以看代码,生成一个HelloJni的.cpp文件。

 

我们可以在这个cpp中写c++代码了,当然你也可以增加其他的cpp,.h文件等。

假设我们要实现一个函数返回一个一个字符串的功能,那么我们首先要在java中定义一个类。点击红圈的按钮会弹出添加类的对话框,

我起的名字叫HelloJni.

 

package com.example.hellojni;public class HelloJni {//!增加一个函数 ,如下,public native String getString();}

  其实在java中要调用 c++,我们就做一个类,这个类用c++实现。实现代码不是写在java中的,而是写在c++中的。

下面我们需要生成下.\

可以不运行,然后到生成类的目录去:

 

我们在进入 就可以看到生成的.class文件了,如下图:但是我们需要回到classes目录:

通过cmd命令行打开命令行窗口 :写如下命令:

在这个文件夹下,你可以看到生成一个 .h文件。

 

这个就是上面的HelloJni 类生成的对应的c++的函数原型,我们接下来要实现这个函数。将这个头文件copy到jni下:

复制代码 代码如下:

#include <jni.h>

#include "com_example_hellojni_HelloJni.h"
 

#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_example_hellojni_HelloJni
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_getString
  (JNIEnv *env, jobject)
{
  return env->NewStringUTF("Hello from JNI !");
}
#ifdef __cplusplus
}
#endif

在MainActivity.java中调用HelloJni类的方法:

代码如下:

复制代码 代码如下:

package com.example.hellojni;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

      
HelloJni jni = new HelloJni();
        String sss = jni.getString();
        sss = "aaa";

       
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

相关文章

  • Android自定义TabLayout效果

    Android自定义TabLayout效果

    这篇文章主要为大家详细介绍了Android自定义TabLayout效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Flutter实现仿京东商品详情底部操作栏

    Flutter实现仿京东商品详情底部操作栏

    这篇文章主要为大家详细介绍了Flutter如何仿京东实现商品详情底部操作栏,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Android中判断网络连接是否可用及监控网络状态

    Android中判断网络连接是否可用及监控网络状态

    获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下
    2012-12-12
  • Android 文件选择器详解及实例代码

    Android 文件选择器详解及实例代码

    这篇文章主要介绍了Android 文件选择器详解的相关资料,并附实例代码,需要的朋友可以参考下
    2016-10-10
  • Android 实例代码带你掌握FrameLayout

    Android 实例代码带你掌握FrameLayout

    FrameLayout是Android开发中非常常见的布局组件,并且它不单单是一个帧布局组件,可以用它实现多种功能,感兴趣的朋友一起来看看吧
    2022-03-03
  • android判断相机图片朝向的简单方法

    android判断相机图片朝向的简单方法

    下面小编就为大家带来一篇android判断相机图片朝向的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • android通过okhttpClient下载网页内容的实例代码

    android通过okhttpClient下载网页内容的实例代码

    本篇文章主要介绍了android通过okhttpClient下载网页内容的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Android访问assets本地json文件的方法

    Android访问assets本地json文件的方法

    这篇文章主要介绍了Android访问assets本地json文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Android实现边录边播功能

    Android实现边录边播功能

    这篇文章主要为大家详细介绍了Android实现边录边播功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Android上传文件到服务端并显示进度条

    Android上传文件到服务端并显示进度条

    这篇文章主要为大家详细介绍了Android上传文件到服务端,并显示进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11

最新评论