Android Java代码与JNI交互基础数据类型转换(三)

这篇具有很好参考价值的文章主要介绍了Android Java代码与JNI交互基础数据类型转换(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🔥 Android Studio 版本 🔥 

Android Java代码与JNI交互基础数据类型转换(三),AndroidNDK,java,NDK,jni

🔥 基础类型数据的转换 🔥

定义传递基础数据类型到Native的JNI接口函数
package com.cmake.ndk1.jni;

public class JNIBasicType{
    static{
        System.loadLibrary("native-lib");
    }

    public native int callNativeInt(int num);
    public native byte callNativeByte(byte b);
    public native char callNativeChar(char ch);
    public native short callNativeShort(short sh);
    public native long callNativeLong(long l);
    public native float callNativeFloat(float f);
    public native double callNativeDouble(double d);
    public native boolean callNativeBool(boolean  b);
};
Native层创建callNativeInt 提供给Java调用
#include <base.h>
#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jint  JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeInt(JNIEnv *env, jobject thiz, jint num) {
    LOGD("java int value is %d",num);
    int c_num = num * 2;
    return c_num;
}
CMakeLists.txt 文件下配置动态库名称

Android Java代码与JNI交互基础数据类型转换(三),AndroidNDK,java,NDK,jni

 添加 target_link_libraries 配置
target_link_libraries( # Specifies the target library.
        ndk1
        person-lib
        dynamic-lib
        basic-type-lib
        # Links the target library to the log library
        # included in the NDK. )
        )
target_link_libraries( # Specifies the target library.
        basic-type-lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})
Java调用Native层函数 
package com.cmake.ndk1;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.cmake.ndk1.jni.JNIBasicType;

public class MainActivity2 extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        JNIBasicType jniBasicType=new JNIBasicType();
        final TextView textView=findViewById(R.id.sample_text);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int nativeInt=jniBasicType.callNativeInt(2);
                textView.setText(String.valueOf(nativeInt));
            }
        });
    }
}

Android Java代码与JNI交互基础数据类型转换(三),AndroidNDK,java,NDK,jni

 运行打印日志

Android Java代码与JNI交互基础数据类型转换(三),AndroidNDK,java,NDK,jni

Java调用Native分别打印基础类型数据

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

extern "C"
JNIEXPORT jint  JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeInt(JNIEnv *env, jobject thiz, jint num) {
    LOGD("java int value is %d",num);
    int c_num = num * 2;
    return c_num;
}

extern "C"
JNIEXPORT jbyte JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeByte(JNIEnv *env, jobject thiz, jbyte b) {
    // TODO: implement callNativeByte()
    LOGD("java byte value is %d",b);
    jbyte c_byte=b+(jbyte)10;
    return c_byte;
}

extern "C"
JNIEXPORT jchar JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeChar(JNIEnv *env, jobject thiz, jchar ch) {
    // TODO: implement callNativeChar()
    LOGD("java char value is %c",ch);
    jchar c_char=ch+(jchar)3;
    return c_char;
}

extern "C"
JNIEXPORT jshort JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeShort(JNIEnv *env, jobject thiz, jshort sh) {
    // TODO: implement callNativeShort()
    LOGD("java short value is %d",sh);
    jshort c_short=sh+(jshort)1000;
    return c_short;
}

extern "C"
JNIEXPORT jlong JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeLong(JNIEnv *env, jobject thiz, jlong l) {
    // TODO: implement callNativeLong()
    LOGD("java long value is %d",l);
    jlong c_long=l+(jlong)1000;
    return c_long;
}

extern "C"
JNIEXPORT jfloat JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeFloat(JNIEnv *env, jobject thiz, jfloat f) {
    // TODO: implement callNativeFloat()
    LOGD("java float value is %f",f);
    jfloat c_float=f+(jfloat)10.1;
    return c_float;
}

extern "C"
JNIEXPORT jdouble JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeDouble(JNIEnv *env, jobject thiz, jdouble d) {
    // TODO: implement callNativeDouble()
    LOGD("java double value is %f",d);
    jdouble c_double=d+(jdouble)10.1;
    return c_double;
}

extern "C"
JNIEXPORT jboolean JNICALL
Java_com_cmake_ndk1_jni_JNIBasicType_callNativeBool(JNIEnv *env, jobject thiz, jboolean b) {
    // TODO: implement callNativeBool()
    LOGD("java boolean value is %d",b);
    jboolean c_boolean=(jboolean)b;
    return c_boolean;
}
package com.cmake.ndk1;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.cmake.ndk1.jni.JNIBasicType;

public class MainActivity3 extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        JNIBasicType jniBasicType=new JNIBasicType();
        final TextView textView=findViewById(R.id.sample_text);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeInt(2)));
                Log.d("MainActivity3",String.valueOf( jniBasicType.callNativeByte((byte) 4)));
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeChar('A')));
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeShort((short) 6)));
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeLong(8)));
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeFloat(2.1f)));
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeDouble(2.10)));
                Log.d("MainActivity3",String.valueOf(jniBasicType.callNativeBool(true)));
            }
        });
    }
}
D/LOG_JNI: java int value is 2
D/MainActivity3: 4
D/LOG_JNI: java byte value is 4
D/MainActivity3: 14
D/LOG_JNI: java char value is A
D/MainActivity3: D
D/LOG_JNI: java short value is 6
D/MainActivity3: 1006
D/LOG_JNI: java long value is 8
D/MainActivity3: 1008
D/LOG_JNI: java float value is 2.100000
D/MainActivity3: 12.200001
D/LOG_JNI: java double value is 2.100000
D/MainActivity3: 12.2
D/LOG_JNI: java boolean value is 1
D/MainActivity3: true

 下载案例文章来源地址https://www.toymoban.com/news/detail-548206.html

到了这里,关于Android Java代码与JNI交互基础数据类型转换(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Java代码与JNI交互 JNI访问Java构造方法(九)

    🔥 Android Studio 版本 🔥    🔥 创建包含JNI相关函数类 JNIConstructorClass.java 🔥  🔥 配置动态库名称 🔥   🔥 生成可关联的库链接 🔥  为了让Java能够调用 constructor-class-lib 库中的函数,您需要使用 CMake 构建脚本中的 target_link_libraries() 命令来关联constructor-class-lib 库  🔥

    2024年02月15日
    浏览(40)
  • Android Java代码与JNI交互 JNI子线程访问Java方法 (八)

    🔥 Android Studio 版本 🔥   🔥 创建包含JNI相关函数类 JNIInvokeMethod.java 🔥  🔥 配置动态库名称 🔥  🔥 生成可关联的库链接 🔥  为了让Java能够调用 invoke-method-lib 库中的函数,您需要使用 CMake 构建脚本中的 target_link_libraries() 命令来关联 invoke-method-lib 库  🔥 提供给N

    2024年02月16日
    浏览(48)
  • Android和JNI交互 : 常见的图像格式转换 : NV21、RGBA、Bitmap等

    最近在使用 OpenCV 处理图片的时候,经常会遇到需要转换图像的情况,网上相关资料比较少,也不全,有时候得费劲老半天才能搞定。 自己踩了坑后,在这里记录下,都是我在项目中遇到的图像转化操作,是一些常用的图像格式转换操作。 具体包括: nv21、rgba、rgb 转换 OpenC

    2024年02月05日
    浏览(46)
  • Android JNI和原生交互,常见的图像格式转换 : NV21、RGBA、Bitmap等

    最近在使用 OpenCV 处理图片的时候,经常会遇到需要转换图像的情况,网上相关资料比较少,也不全,有时候得费劲老半天才能搞定。 自己踩了坑后,在这里记录下,都是我在项目中遇到的图像转化操作,是一些常用的图像格式转换操作。 具体包括: nv21、rgba、rgb 转换 OpenC

    2024年02月06日
    浏览(45)
  • Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

    1.首先认识一下NDK。 (1)什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,

    2024年02月11日
    浏览(49)
  • 〔002〕Java 基础之语法、数据类型、进制转换、运算符

    注释: 是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的 注释分为 单行注释 和 多行注释 ,注释的内容并不会被编译,所以 不会影响 代码的运行 单行注释通过 // 进行标注,只能注释一行 多行注释通过 /* 注释内容 */ 进行标注,可以注释多

    2024年02月05日
    浏览(79)
  • Java基础篇_1.2——保留关键字、基本数据类型、基本数据类型之间的转换

    目录 一、保留 二、Java的基本数据类型 三、引用数据类型  四、基本数据类型间的转换  隐含强制类型转换 数值之间的合法转换 Java该语言是用 Unicode 字符集编写的。 Java是预先定义的具有特别意义的标识符,也被称为Java保留字,Java不能用作变量名、方

    2024年02月14日
    浏览(54)
  • Android:JNI实战,理论详解、Java与Jni数据调用

    上一篇博文《Android:JNI实战,加载三方库、编译C/C++》讲解了如何搭建一个可以加载和链接第三方库、编译 C/C++ 文件的 Jni Demo App。 这篇博文在这个 Jni Demo App 的基础上,从实战出发详细讲解  Jni  开发语法。 接下来,先用一小节将 Jni 开发比较重要的理论知识点过一下,然

    2024年01月23日
    浏览(48)
  • 前端和后端交互数据类型转换

    页面是男/女 后端pojo类以及数据库中是Integer 0/1  怎么样很方便地转化? ----枚举转化-- 在web开发中有时会使用枚举作为参数,而前端在调接口时就会出现传错或者传空导致后端拿不到枚举类型。在这里就使用反序列化@JsonDeserialize 这里是对枚举进行反序列化,所以首先编写一个

    2024年03月26日
    浏览(57)
  • 【Java 基础篇】Java 类型转换

    在Java编程中,类型转换是一种将一个数据类型转换为另一个数据类型的操作。类型转换可以发生在原始数据类型之间,也可以在引用数据类型之间进行。本篇博客将详细介绍Java中的类型转换,包括隐式类型转换和显式类型转换,并提供相关的代码示例。 隐式类型转换是指在

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包