一.Hello World
1. 定义函数原型

native关键字定义的函数即为jni函数


2.生成头文件

切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录)
javah -jni 包名.类名

在根目录下生成:
org_bing_testjni_MainActivity.h


3. 工程中添加jni代码
工程右键->添加native code->输入名字->finish

多了如下文


新建一个Application.mk,配置相关选项(详细查看ndk有关Application的说明)
APP_ABI := x86
APP_PLATFORM := android-14
APP_STL := stlport_static
APP_CPPFLAGS += -fexceptions

APP_CPPFLAGS += -frtti 


同时把刚刚生成的.h文件拷贝到jni目录


4. 实现native函数
函数的声明已经在头文件生成了


在CPP实现上述函数:
#include "org_bing_testjni_MainActivity.h"
#include <stdio.h>
#include <string>
using namespace std;
jstring JNICALL Java_org_bing_testjni_MainActivity_sayHello
(JNIEnv* env, jobject obj, jstring name)
{
    const char* pname = env->GetStringUTFChars(name, NULL);
    string str_info = "Hello World:";
    str_info += pname;
    jstring ret_str = env->NewStringUTF(str_info.c_str());
    // C文件使用(*env)->Fun(env,xxx,...)的方式传递
    // (*env)->NewStringUTF(env, "Hello World");
    return ret_str;
}
JNIEXPORT jint JNICALL Java_org_bing_testjni_MainActivity_Add
  (JNIEnv *env, jobject obj, jint a, jint b)
{
    return a + b;
}

编译在libs目录生成libTestJni.so,打包APK会自动将上述函数打包到APK

5. 在Java中使用
loadLibrary
static
{
    System.loadLibrary("TestJni");

}  


然后直接调用即可:
Log.d("__BING__", sayHello("bing"));

Log.d("__BING__", "5 + 3=" + Add(5,3));  


运行效果:
























ndk学习17: jni之Java调用C&C++的更多相关文章

  1. ndk学习20: jni之OnLoad动态注册函数

    一.原理 当在系统中调用System.loadLibrary函数时,该函数会找到对应的动态库, 然后首先试图找到"JNI_OnLoad"函数,如果该函数存在,则调用它 JNI_On ...

  2. Android JNI之JAVA调用C/C++层

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5929996.html 一.java调用本地函数的开发步骤: 1.编写本地方法的类(可以说是用来叙述本地方法的类 ...

  3. Android JNI和NDK学习(09)--JNI实例二 传递类对象

    1 应用层代码 NdkParam.java是JNI函数的调用类,它的代码如下:   package com.skywang.ndk; import android.app.Activity; impo ...

  4. Android JNI和NDK学习(06)--JNI的数据类型(转)

    本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3094037.html 本文介绍JNI的数据类型.NDK中关于JNI数据类型的 ...

  5. JNI之JAVA调用C++接口

    1.JNI定义(来自百度百科) JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java1.1开始,Java Native Interface(JNI)标准成为ja ...

  6. NDK学习笔记-JNI数据类型和属性方法的访问

    JNI实现了C/C++与Java的相互访问,那么这篇文章就从C/C++访问Java开始说起 native函数说明 每个native函数,都至少有两个参数(JNIEnv *和jclass或jobject ...

  7. NDK学习笔记-JNI开发流程

    JNI(Java Native Interface)Java本地化接口,Java调用C/C++,C/C++调用Java的一套API接口 实现步骤 在Java源文件中编写native方法 public ...

  8. 通过JNI实现java调用C代码和C代码调用java的代码

    一.java调用C代码 1)java中需要声明调用的函数,也就是native方法,并通过System.LoadLibrary来调用dll或者so(C代码).实例代码如下: public class H ...

  9. ndk学习18: JNI之C&C++调用Java

    一.Java反射机制 先了解Java反射机制原理 例子网上很多,反射很灵活 二. 在JNI层调Java 用途: Java层逆向比较容易,增加逆向门槛,把调用都写到JNI层,  让Java层无调用关系 ...

随机推荐

  1. 在Nginx服务器中设置多个站点

    这里以配置1个站点(1个域名)为例,n 个站点可以相应增加调整, 假设:IP地址: 127.0.0.1域名1 phpmyadmin.zhengwen.cn 放在 /www/phpmyadmin.zhe ...

  2. ecshop后台,listtable.js使用

    1.先载入listtable.js 2.html代码 a.  <a href="javascript:listTable.sort('goods_number'); "> ...

  3. macbook 放flash发烫,转html5

    http://zythum.sinaapp.com/youkuhtml5playerbookmark/

  4. 在 Mac OS X 终端里使用 Solarized 配色方案

    MacOS X 终端solarized配色 相信长期浸泡在终端和代码的小伙伴们都有一套自己喜爱的配色方案.以前一直在用简单.适合阅读的 Terminal.app 配色方案,换到 MacBook Pro ...

  5. MyEclipse for linux 破解方法

    1.安装MyEclipse: uu@pc:~/desktop$ chmod +x myeclipse-pro-2014-GA-offline-installer-linux.run uu@pc:~/d ...

  6. AOP PostSharp

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using PostShar ...

  7. vim tab 中设置title

    在.bashrc添加 export PROMPT_COMMAND='echo -ne "\033]0;your wanted title\007"'

  8. mysql数据表分表策略2(转)

    mysql分表方法: 方法一. 做数据库集群! 主从数据库 双向热备份(或一对多的数据库实时备份策略),这样可将数据库查询分摊到几个服务器去(可跟服务器负载均衡结合起来架构) 优点:扩展性好,没有多个 ...

  9. Cornerstone详细操作

    1.⾸首先打开Cornerstone 2.然后如下图所⽰示: 3.选择对应的仓库,如下图所⽰示   4.然后Import完成之后,就把本地的⽂文件提交到SVN服务器上了,如下图所⽰示,另外如果你想要使 ...

  10. a标签的target指向iframe

    <html> <head> <meta charset="utf-8" /> </head> <body> <ta ...