美文网首页
android studio 3.4 JNI引入c++方法

android studio 3.4 JNI引入c++方法

作者: yunie | 来源:发表于2019-06-12 10:30 被阅读0次

Mac系统下JNI实现native方法(Java调用C++语言的实现)

  1. 在java类里声明需要使用的方法
  2. 使用JNI命令生成c++的方法声明.h文件
  3. 根据生成的.h文件制作c++实现文件native2C.cpp
  4. 创建CMakeLists.txt文件
  5. 在build.gradle添加扩展bundle声明
  6. 编译使用
  • 1.在java类里声明需要使用的方法

public class TestNativeCode {
    public native void sayHello();
    public native String tellMe();
}
  • 2.使用JNI命令生成c++的方法声明.h文件

注意生成的文件路径必须在java包名外

# com.example.surfaceviewdemo是包名
# TestNativeCode是java文件名,不含.java
javah -jni com.example.surfaceviewdemo.TestNativeCode;
  • 3.根据生成的.h文件制作c++实现文件native2C.cpp

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

extern "C" JNIEXPORT void JNICALL
Java_com_example_surfaceviewdemo_TestNativeCode_sayHello(JNIEnv *, jobject) {
    printf("Hello world from cpp");
}

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_surfaceviewdemo_TestNativeCode_tellMe(JNIEnv * env, jobject ) {
    std::string str = "Hello from c++";
    return env->NewStringUTF(str.c_str());
}

此时,可以删除第二步生成的.h文件(.h文件主要是为了自动转换方法名)

  • 4.创建CMakeLists.txt文件

cmake_minimum_required(VERSION 3.4.1)

add_library(
    nativeCode
    SHARED
    ../../../native2C.cpp
)
find_library(
    log-lib
    log
)
target_link_libraries(
    nativeCode
    ${log-lib}
)
  • 5. 在build.gradle添加扩展bundle声明

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.surfaceviewdemo"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
# 此处为添加的部分
    externalNativeBuild {
        cmake {
            path "src/main/java/com/example/surfaceviewdemo/CMakeLists.txt"
            version "3.6.0"
        }

    }
}
  • 6. 编译使用

#加载lib
System.loadLibrary("nativeCode");
TestNativeCode testNativeCode = new TestNativeCode();
testNativeCode.sayHello();
String hello = testNativeCode.tellMe();
System.out.println(hello);

相关文章

网友评论

      本文标题:android studio 3.4 JNI引入c++方法

      本文链接:https://www.haomeiwen.com/subject/jhrkfctx.html