android_006.Android3.0调用C语言

JNI:Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。

                JNI可以这样与本地程序进行交互:
            1、你可以使用JNI来实现“本地方法”(native methods),并在JAVA程序中调用它们。

            2、JNI支持一个“调用接口”(invocation interface),它允许你把一个JVM嵌入到本地程序中。本地程序可以链接一个实现了JVM的本地库,然后使用“调用接口”执行JAVA语言编写的软件模块。例如,一个用C语言写的浏览器可以在一个嵌入式JVM上面执行从网上下载下来的applets。

NDK:native develop kits的缩写,android 本地开发工具集 ,可以把c/c++ ->编译成一个 linux下可以执行的二进制文件 java代码里面就可以通过jni 调用执行二进制的文件.。

默认文件

MainActivity.java

//用于在应用程序启动时加载“本机lib”库。
    static {
        System.loadLibrary("native-lib");
    }
//native标识符表示该方法的实现由非java语言实现
public native String stringFromJNI();//C++方法,返回stringFromJNI

native-lib.cpp

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring

JNICALL
Java_com_zzq_arcameratest_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

CMakeLists.txt

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )
使用自定义C语言

student.h

#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif
 /*
14  * Class:     Java_com_zzq_ctest_MainActivity
15  * Method:    getStringFromNative
16  * Signature: (I)I
17  */
 JNIEXPORT jstring JNICALL Java_com_zzq_ctest_MainActivity_getStringFromNative//类名+方法名
         (JNIEnv *env, jobject jObj);
#ifdef __cplusplus
 }
#endif //CTEST_STUDENT_H

student.cpp

#include "student.h"
JNIEXPORT jstring JNICALL Java_com_zzq_ctest_MainActivity_getStringFromNative
        (JNIEnv *env, jobject jObj){
    //return (*env)->NewStringUTF(env,"Hello From JNI!");
    jstring strRet = env->NewStringUTF("HelloWorld from zzq JNI !");
    return strRet;
}

cMakeLists.txt

add_library( # Sets the name of the library.
             student

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             src/main/cpp/student.cpp )

MainActivity.java

 // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("student");
    }

tv.setText(getStringFromNative());

public native String getStringFromNative();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值