安卓应用开发通过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 实现微信登录详解

    Android 实现微信登录详解

    本文主要介绍Android 微信登录分享朋友圈,这里给大家详细介绍了Android微信登录的详细流程,有需要的小伙伴可以参考下
    2016-07-07
  • Android中GridView插件的使用方法

    Android中GridView插件的使用方法

    今天小编就为大家分享一篇关于Android中GridView插件的使用方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 深入android Unable to resolve target ''android-XX''详解

    深入android Unable to resolve target ''android-XX''详解

    本篇文章是对android Unable to resolve target 'android-XX'错误的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Android库项目中的资源ID冲突的解决方法

    Android库项目中的资源ID冲突的解决方法

    本篇文章主要介绍了Android库项目中的资源ID冲突的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Android利用RenderScript实现毛玻璃模糊效果示例

    Android利用RenderScript实现毛玻璃模糊效果示例

    毛玻璃效果(亦称磨砂效果),近两年在移动端的UI设计上越来越流行,下面这篇文章主要介绍了Android利用RenderScript实现毛玻璃模糊效果的相关资料,文中给出了详细的示例代码,需要的朋友可以参考学习,下面来一起看看吧。
    2017-03-03
  • Android实现自定义轮播图片控件详解

    Android实现自定义轮播图片控件详解

    这篇文章给大家主要介绍了Android实现自定义轮播图片控件的详细过程,文中通过实例代码介绍的很详细,相信会对大家的理解和学习很有帮助,感兴趣的朋友们下面来一起看看吧。
    2016-10-10
  • Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果

    Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果

    这篇文章主要介绍了Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果即QQ好友动态页面效果,本文通过实例代码给大家介绍的非常详细,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • 如何正确理解和使用Activity的4种启动模式

    如何正确理解和使用Activity的4种启动模式

    本文主要介绍了如何正确理解和使用Activity的4种启动模式。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Kotlin开发笔记之委托属性与区间(译)

    Kotlin开发笔记之委托属性与区间(译)

    最近在学习kotlin,发现了一些比较重要的知识点,所以下面这篇文章主要给大家介绍了关于Kotlin开发笔记之委托属性与区间的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • Android App开发中ViewPager组件的入门使用教程

    Android App开发中ViewPager组件的入门使用教程

    这篇文章主要介绍了Android App开发中ViewPager组件的入门使用教程,ViewPager主要用来实现通过滑动来切换页面的效果,需要的朋友可以参考下
    2016-03-03

最新评论