国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三)

這篇具有很好參考價(jià)值的文章主要介紹了Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?? Android Studio 版本 ???

Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三),AndroidNDK,java,NDK,jni

?? 基礎(chǔ)類(lèi)型數(shù)據(jù)的轉(zhuǎn)換 ??

定義傳遞基礎(chǔ)數(shù)據(jù)類(lèi)型到Native的JNI接口函數(shù)
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層創(chuàng)建callNativeInt 提供給Java調(diào)用
#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 文件下配置動(dòng)態(tài)庫(kù)名稱(chēng)

Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三),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調(diào)用Native層函數(shù)?
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交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三),AndroidNDK,java,NDK,jni

?運(yùn)行打印日志

Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三),AndroidNDK,java,NDK,jni

Java調(diào)用Native分別打印基礎(chǔ)類(lèi)型數(shù)據(jù)

#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

?下載案例文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-548206.html

到了這里,關(guān)于Android Java代碼與JNI交互基礎(chǔ)數(shù)據(jù)類(lèi)型轉(zhuǎn)換(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android Java代碼與JNI交互 JNI訪問(wèn)Java類(lèi)方法 (七)

    Android Java代碼與JNI交互 JNI訪問(wèn)Java類(lèi)方法 (七)

    ?? Android Studio 版本 ???? ??? 創(chuàng)建包含JNI的類(lèi) JNIAccessMethod.java ?? ??? Java方法對(duì)應(yīng)Native層方法名稱(chēng) ?? ?? 配置動(dòng)態(tài)庫(kù)名稱(chēng) ??? ?? 生成可關(guān)聯(lián)的庫(kù)鏈接 ??? 為了讓Java能夠調(diào)用?access-method-lib 庫(kù)中的函數(shù),您需要使用 CMake 構(gòu)建腳本中的?target_link_libraries()?命令來(lái)關(guān)聯(lián)?

    2024年02月16日
    瀏覽(23)
  • Android Java代碼與JNI交互 JNI子線程訪問(wèn)Java方法 (八)

    Android Java代碼與JNI交互 JNI子線程訪問(wèn)Java方法 (八)

    ?? Android Studio 版本 ???? ?? 創(chuàng)建包含JNI相關(guān)函數(shù)類(lèi) JNIInvokeMethod.java ?? ??? 配置動(dòng)態(tài)庫(kù)名稱(chēng) ??? ?? 生成可關(guān)聯(lián)的庫(kù)鏈接 ??? 為了讓Java能夠調(diào)用?invoke-method-lib 庫(kù)中的函數(shù),您需要使用 CMake 構(gòu)建腳本中的?target_link_libraries()?命令來(lái)關(guān)聯(lián)?invoke-method-lib 庫(kù) ??? 提供給N

    2024年02月16日
    瀏覽(25)
  • Android和JNI交互 : 常見(jiàn)的圖像格式轉(zhuǎn)換 : NV21、RGBA、Bitmap等

    Android和JNI交互 : 常見(jiàn)的圖像格式轉(zhuǎn)換 : NV21、RGBA、Bitmap等

    最近在使用 OpenCV 處理圖片的時(shí)候,經(jīng)常會(huì)遇到需要轉(zhuǎn)換圖像的情況,網(wǎng)上相關(guān)資料比較少,也不全,有時(shí)候得費(fèi)勁老半天才能搞定。 自己踩了坑后,在這里記錄下,都是我在項(xiàng)目中遇到的圖像轉(zhuǎn)化操作,是一些常用的圖像格式轉(zhuǎn)換操作。 具體包括: nv21、rgba、rgb 轉(zhuǎn)換 OpenC

    2024年02月05日
    瀏覽(28)
  • Android JNI和原生交互,常見(jiàn)的圖像格式轉(zhuǎn)換 : NV21、RGBA、Bitmap等

    Android JNI和原生交互,常見(jiàn)的圖像格式轉(zhuǎn)換 : NV21、RGBA、Bitmap等

    最近在使用 OpenCV 處理圖片的時(shí)候,經(jīng)常會(huì)遇到需要轉(zhuǎn)換圖像的情況,網(wǎng)上相關(guān)資料比較少,也不全,有時(shí)候得費(fèi)勁老半天才能搞定。 自己踩了坑后,在這里記錄下,都是我在項(xiàng)目中遇到的圖像轉(zhuǎn)化操作,是一些常用的圖像格式轉(zhuǎn)換操作。 具體包括: nv21、rgba、rgb 轉(zhuǎn)換 OpenC

    2024年02月06日
    瀏覽(24)
  • Android Studio 進(jìn)行NDK開(kāi)發(fā),實(shí)現(xiàn)JNI,以及編寫(xiě)C++與Java交互(Java調(diào)用本地函數(shù))并編譯出本地so動(dòng)態(tài)庫(kù)

    Android Studio 進(jìn)行NDK開(kāi)發(fā),實(shí)現(xiàn)JNI,以及編寫(xiě)C++與Java交互(Java調(diào)用本地函數(shù))并編譯出本地so動(dòng)態(tài)庫(kù)

    1.首先認(rèn)識(shí)一下NDK。 (1)什么是NDK? NDK全稱(chēng)是Native Development Kit,NDK提供了一系列的工具,幫助開(kāi)發(fā)者快速開(kāi)發(fā)C/C++的動(dòng)態(tài)庫(kù),并能自動(dòng)將so和java應(yīng)用一起打包成apk。NDK集成了交叉編譯器(交叉編譯器需要UNIX或LINUX系統(tǒng)環(huán)境),并提供了相應(yīng)的mk文件隔離CPU、平臺(tái)、ABI等差異,

    2024年02月11日
    瀏覽(35)
  • 〔002〕Java 基礎(chǔ)之語(yǔ)法、數(shù)據(jù)類(lèi)型、進(jìn)制轉(zhuǎn)換、運(yùn)算符

    〔002〕Java 基礎(chǔ)之語(yǔ)法、數(shù)據(jù)類(lèi)型、進(jìn)制轉(zhuǎn)換、運(yùn)算符

    注釋?zhuān)?是寫(xiě)在程序中對(duì)代碼進(jìn)行解釋說(shuō)明的文字,方便自己和其他人查看,以便理解程序的 注釋分為 單行注釋 和 多行注釋 ,注釋的內(nèi)容并不會(huì)被編譯,所以 不會(huì)影響 代碼的運(yùn)行 單行注釋通過(guò) // 進(jìn)行標(biāo)注,只能注釋一行 多行注釋通過(guò) /* 注釋內(nèi)容 */ 進(jìn)行標(biāo)注,可以注釋多

    2024年02月05日
    瀏覽(60)
  • Java基礎(chǔ)篇_1.2——保留關(guān)鍵字、基本數(shù)據(jù)類(lèi)型、基本數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換

    Java基礎(chǔ)篇_1.2——保留關(guān)鍵字、基本數(shù)據(jù)類(lèi)型、基本數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換

    目錄 一、保留 二、Java的基本數(shù)據(jù)類(lèi)型 三、引用數(shù)據(jù)類(lèi)型 ?四、基本數(shù)據(jù)類(lèi)型間的轉(zhuǎn)換 ?隱含強(qiáng)制類(lèi)型轉(zhuǎn)換 數(shù)值之間的合法轉(zhuǎn)換 Java該語(yǔ)言是用 Unicode 字符集編寫(xiě)的。 Java是預(yù)先定義的具有特別意義的標(biāo)識(shí)符,也被稱(chēng)為Java保留字,Java不能用作變量名、方

    2024年02月14日
    瀏覽(29)
  • Android:JNI實(shí)戰(zhàn),理論詳解、Java與Jni數(shù)據(jù)調(diào)用

    Android:JNI實(shí)戰(zhàn),理論詳解、Java與Jni數(shù)據(jù)調(diào)用

    上一篇博文《Android:JNI實(shí)戰(zhàn),加載三方庫(kù)、編譯C/C++》講解了如何搭建一個(gè)可以加載和鏈接第三方庫(kù)、編譯 C/C++ 文件的 Jni Demo?App。 這篇博文在這個(gè) Jni Demo App 的基礎(chǔ)上,從實(shí)戰(zhàn)出發(fā)詳細(xì)講解? Jni? 開(kāi)發(fā)語(yǔ)法。 接下來(lái),先用一小節(jié)將 Jni 開(kāi)發(fā)比較重要的理論知識(shí)點(diǎn)過(guò)一下,然

    2024年01月23日
    瀏覽(24)
  • 前端和后端交互數(shù)據(jù)類(lèi)型轉(zhuǎn)換

    前端和后端交互數(shù)據(jù)類(lèi)型轉(zhuǎn)換

    頁(yè)面是男/女 后端pojo類(lèi)以及數(shù)據(jù)庫(kù)中是Integer 0/1? 怎么樣很方便地轉(zhuǎn)化? ----枚舉轉(zhuǎn)化-- 在web開(kāi)發(fā)中有時(shí)會(huì)使用枚舉作為參數(shù),而前端在調(diào)接口時(shí)就會(huì)出現(xiàn)傳錯(cuò)或者傳空導(dǎo)致后端拿不到枚舉類(lèi)型。在這里就使用反序列化@JsonDeserialize 這里是對(duì)枚舉進(jìn)行反序列化,所以首先編寫(xiě)一個(gè)

    2024年03月26日
    瀏覽(18)
  • 【Java 基礎(chǔ)篇】Java 類(lèi)型轉(zhuǎn)換

    在Java編程中,類(lèi)型轉(zhuǎn)換是一種將一個(gè)數(shù)據(jù)類(lèi)型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類(lèi)型的操作。類(lèi)型轉(zhuǎn)換可以發(fā)生在原始數(shù)據(jù)類(lèi)型之間,也可以在引用數(shù)據(jù)類(lèi)型之間進(jìn)行。本篇博客將詳細(xì)介紹Java中的類(lèi)型轉(zhuǎn)換,包括隱式類(lèi)型轉(zhuǎn)換和顯式類(lèi)型轉(zhuǎn)換,并提供相關(guān)的代碼示例。 隱式類(lèi)型轉(zhuǎn)換是指在

    2024年02月07日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包