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

Android Java代碼與JNI交互 引用類(lèi)型轉(zhuǎn)換(五)

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

?? Android Studio 版本 ???

Android Java代碼與JNI交互 引用類(lèi)型轉(zhuǎn)換(五),AndroidNDK,jni,ndk,java,c

??? Java中基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)應(yīng)Native的數(shù)據(jù)類(lèi)型 ??

 * Java中基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型
 * |Java    |Native   |
 * |boolean |jboolean |
 * |byte    |jbyte    |
 * |short   |jshort   |
 * |int     |jint     |
 * |long    |jlong    |
 * |float   |jfloat   |
 * |double  |jdouble  |

?? Java中引用數(shù)據(jù)類(lèi)型 對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型 ???

 * Java中引用數(shù)據(jù)類(lèi)型 對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型
 * |Java Reference       |Native        |Java Reference  |Native      |
 * |All objects          |jobject       |c(diǎn)har[]          |jcharArray  |
 * |java.lang.Class      |jclass        |short[]         |jshortArray |
 * |java.lang.String     |jstring       |int[]           |jintArray   |
 * |Object[]             |jobjectArray  |long[]          |jlongArray  |
 * |boolean[]            |jbooleanArray |float[]         |jfloatArray |
 * |byte[]               |jbyteArray    |double[]        |doubleArray |
 * |java.lang.Throwable  |jthrowable

??? 創(chuàng)建? JNIReferenceType ??

package com.cmake.ndk1.jni;

public class JNIReferenceType {
    static {
        System.loadLibrary("reference-type-lib");
    }
    public native String callNativeStringArray(String[] strArray);
}

?? 生成可關(guān)聯(lián)的庫(kù)鏈接 ??

為了讓Java能夠調(diào)用reference-type-lib庫(kù)中的函數(shù),您需要使用 CMake 構(gòu)建腳本中的?target_link_libraries()?命令來(lái)關(guān)聯(lián)reference-type-lib 庫(kù)


target_link_libraries( # Specifies the target library.
        ndk1
        person-lib
        dynamic-lib
        basic-type-lib
        string-lib
        reference-type-lib
        # Links the target library to the log library
        # included in the NDK. )
        )

??? 提供給 Natvie層 調(diào)用的日志庫(kù)鏈接 ??

target_link_libraries( # Specifies the target library.
        reference-type-lib
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

??? Native層 實(shí)現(xiàn) callNativeStringArray 函數(shù) ??

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

/**
 * Java中基礎(chǔ)數(shù)據(jù)類(lèi)型對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型
 * |Java    |Native   |
 * |boolean |jboolean |
 * |byte    |jbyte    |
 * |short   |jshort   |
 * |int     |jint     |
 * |long    |jlong    |
 * |float   |jfloat   |
 * |double  |jdouble  |
 */

/**
 * Java中引用數(shù)據(jù)類(lèi)型 對(duì)應(yīng)Native中的數(shù)據(jù)類(lèi)型
 * |Java Reference       |Native        |Java Reference  |Native      |
 * |All objects          |jobject       |c(diǎn)har[]          |jcharArray  |
 * |java.lang.Class      |jclass        |short[]         |jshortArray |
 * |java.lang.String     |jstring       |int[]           |jintArray   |
 * |Object[]             |jobjectArray  |long[]          |jlongArray  |
 * |boolean[]            |jbooleanArray |float[]         |jfloatArray |
 * |byte[]               |jbyteArray    |double[]        |doubleArray |
 * |java.lang.Throwable  |jthrowable
 */

extern "C"
JNIEXPORT jstring

JNICALL
Java_com_cmake_ndk1_jni_JNIReferenceType_callNativeStringArray(JNIEnv *env, jobject thiz,
                                                               jobjectArray str_array) {
    //獲取數(shù)組長(zhǎng)度
    int len = env->GetArrayLength(str_array);

    //打印長(zhǎng)度
    LOGD("len is %d", len);

    //獲取對(duì)象數(shù)組的某一個(gè)元素(首元素)
    //獲取其他數(shù)組類(lèi)型的某一個(gè)元素可以使用類(lèi)似的方式
    jstring jStringValue = static_cast<jstring>(env->GetObjectArrayElement(str_array, 0));

    //  打印jStringValue需要通過(guò) GetStringUTFChars 轉(zhuǎn)換,再打印
    const char *str = env->GetStringUTFChars(jStringValue, 0);
    LOGD("string value is %s", str);

    //釋放掉jStringValue的內(nèi)存空間
    env->ReleaseStringUTFChars(jStringValue,str);

    //將str返回給應(yīng)用層
    return env->NewStringUTF(str);
}

?? 調(diào)用Native層相關(guān)函數(shù)????

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.JNIReferenceType;
import com.cmake.ndk1.jni.JNIString;

public class MainActivity5 extends AppCompatActivity {

    private String[] stringArrays={"字符串1","字符串2","字符串3"};
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        JNIReferenceType referenceType=new JNIReferenceType();
        final TextView textView=findViewById(R.id.sample_text);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String str=referenceType.callNativeStringArray(stringArrays);
                Log.d("MainActivity5",String.valueOf(str));
            }
        });
    }
}

運(yùn)行結(jié)果 :?

D/LOG_JNI: len is 3
D/LOG_JNI: string value is 字符串1
D/MainActivity5: 字符串1

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

到了這里,關(guān)于Android Java代碼與JNI交互 引用類(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)用戶(hù)投稿,該文觀(guān)點(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訪(fǎng)問(wèn)Java類(lèi)方法 (七)

    Android Java代碼與JNI交互 JNI訪(fǎng)問(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子線(xiàn)程訪(fǎng)問(wèn)Java方法 (八)

    Android Java代碼與JNI交互 JNI子線(xiàn)程訪(fǎng)問(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)
  • 【GiraKoo】Java Native Interface(JNI)的空間(引用)管理

    Java是通過(guò)垃圾回收機(jī)制回收內(nèi)存,C/C++是通過(guò)malloc,free,new,delete手動(dòng)管理空間。那么在JNI層,同時(shí)存在Java和C/C++的空間時(shí),該如何進(jìn)行空間的管理呢?本文參考Oracle的官方文檔,對(duì)JNI層中空間的管理進(jìn)行說(shuō)明。明確哪些內(nèi)容需要手動(dòng)調(diào)用Delete,哪些不需要手動(dòng)調(diào)用。 全局

    2024年02月05日
    瀏覽(14)
  • 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日
    瀏覽(25)
  • 前端和后端交互數(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)
  • Android studio配置OpenCV的JNI接口,實(shí)現(xiàn)C++代碼編程

    Android studio配置OpenCV的JNI接口,實(shí)現(xiàn)C++代碼編程

    目錄 一、下載OpenCV-android-sdk 二、新建項(xiàng)目 三、導(dǎo)入OpenCV包 ?四、配置OpenCV的JNI接口,拷貝OpenCV所需的頭文件和庫(kù)文件 五、修改Cmake文件 ?六、配置app的build.gradle文件 ?七、測(cè)試 OpenCV官網(wǎng)地址:https://opencv.org/? 點(diǎn)擊Library--Releases,下載Android版本,解壓得到?OpenCV-android-sdk文件

    2024年02月10日
    瀏覽(24)
  • Android基于JNI的Java與C++互調(diào)

    java調(diào)用C++: //導(dǎo)出c函數(shù)格式 extern \\\"C\\\" JNIEXPORT //供JNI調(diào)用? JNICALL 函數(shù)名格式 Java_包名_類(lèi)名_函數(shù)名(包名.替換為_(kāi)) Java_com_example_getapplist_MainActivity_stringFromJNI ? ?包名:com_example_getapplist? ?類(lèi)名:MainActivity.? ? ? 函數(shù)名:stringFromJNI C++ Jni? CMakeList.txt??

    2024年02月10日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包