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

Android Java代碼與JNI交互 JNI訪問Java類方法 (七)

這篇具有很好參考價值的文章主要介紹了Android Java代碼與JNI交互 JNI訪問Java類方法 (七)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?? Android Studio 版本 ????

Android Java代碼與JNI交互 JNI訪問Java類方法 (七),AndroidNDK,java,jni,ndk,c,c++

??? 創(chuàng)建包含JNI的類 JNIAccessMethod.java ??

package com.cmake.ndk1.jni;

import com.cmake.ndk1.model.Animal;

public class JNIAccessMethod {
    static {
        System.loadLibrary("access-method-lib");
    }

    public native void accessInstanceMethod(Animal animal);

    public native void accessStaticMethod(Animal animal);
}

??? Java方法對應Native層方法名稱 ??

 * |Java                   |JNI                   |
 * |String fun()           |()Ljva/lang/String;   |
 * |long f(int i,Class c); |(ILjava/lang/Class;)J |
 * |String(byte[] bytes);  |([B)V                 |

?? 配置動態(tài)庫名稱 ???

add_library(
        #動態(tài)庫名稱 access-method-lib
        access-method-lib

        SHARED

        jni/jni_access_method.cpp
)

?? 生成可關聯(lián)的庫鏈接 ???

為了讓Java能夠調(diào)用?access-method-lib 庫中的函數(shù),您需要使用 CMake 構建腳本中的?target_link_libraries()?命令來關聯(lián)?access-method-lib 庫

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

??? 提供給 jni 調(diào)用的日志庫鏈接 ??

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

??? Native層實現(xiàn) JNIAccessMethod 類下面的JNI接口 ??

實現(xiàn)調(diào)用 callInstanceMethod() 函數(shù)

extern "C"
JNIEXPORT void JNICALL
Java_com_cmake_ndk1_jni_JNIAccessMethod_accessInstanceMethod(JNIEnv *env,jobject instance, jobject animal) {
    jclass cls = env->GetObjectClass(animal);
    //查找Animal對象中的callInstanceMethod()函數(shù),函數(shù)需要傳遞的參數(shù)是int類型對應I,
    //返回返回為void對應V
    jmethodID mid = env->GetMethodID(cls,"callInstanceMethod","(I)V");

    env->CallVoidMethod(animal,mid,2);
}

?實現(xiàn)調(diào)用Animal中 callStaticMethod() 函數(shù)并傳遞字符串參數(shù)

extern "C"
JNIEXPORT void JNICALL
Java_com_cmake_ndk1_jni_JNIAccessMethod_accessStaticMethod(JNIEnv *env,jobject instance, jobject animal) {
    jclass cls = env->GetObjectClass(animal);
    //查找Animal對象中的callStaticMethod()函數(shù),函數(shù)需要傳遞的參數(shù)是int類型對應I,
    //返回返回為void對應V
    jmethodID mid = env->GetStaticMethodID(cls,"callStaticMethod",
                                     "(Ljava/lang/String;)Ljava/lang/String;");

    //構造一個調(diào)用callStaticMethod()函數(shù)需要傳遞的參數(shù)
    jstring  parJString=env->NewStringUTF("jstrinig");
    env->CallStaticObjectMethod(cls,mid,parJString);
}

?實現(xiàn)調(diào)用Animal中 callStaticMethod() 函數(shù)并?傳遞集合和集合長度到參數(shù)

extern "C"
JNIEXPORT void JNICALL
Java_com_cmake_ndk1_jni_JNIAccessMethod_accessStaticMethod(JNIEnv *env,jobject instance, jobject animal) {
    jclass cls = env->GetObjectClass(animal);
    //查找Animal對象中的callStaticMethod()函數(shù),函數(shù)需要傳遞的參數(shù)是int類型對應I,
    //返回返回為void對應V
    jmethodID mid = env->GetStaticMethodID(cls,"callStaticMethod",
                                     "(Ljava/lang/String;)Ljava/lang/String;");

    //構造一個調(diào)用callStaticMethod()函數(shù)需要傳遞的參數(shù)
    jstring  parJString=env->NewStringUTF("jstrinig");
    env->CallStaticObjectMethod(cls,mid,parJString);

    mid = env->GetStaticMethodID(cls,"callStaticMethod",
                                 "([Ljava/lang/String;I)Ljava/lang/String;");
    //在Native構建Java的字符串數(shù)組
    jclass strClass = env->FindClass("java/lang/String");
    int size=2;
    jobjectArray strArray = env->NewObjectArray(size,strClass, nullptr);
    jstring strItem;
    //循環(huán)添加字符串到strArray集合中
    for (int i = 0; i < size; ++i) {
        strItem = env->NewStringUTF("string in native");
        env->SetObjectArrayElement(strArray,i,strItem);
    }
    //調(diào)用靜態(tài)方法
    env->CallStaticObjectMethod(cls,mid,strArray,size);
}

??? 調(diào)用Native層函數(shù)操作Animal 中的函數(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.JNIAccessField;
import com.cmake.ndk1.jni.JNIAccessMethod;
import com.cmake.ndk1.model.Animal;

public class MainActivity7 extends AppCompatActivity {


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        JNIAccessMethod jniAccessMethod=new JNIAccessMethod();
        Animal animal=new Animal("animal");

        final TextView textView=findViewById(R.id.sample_text);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                jniAccessMethod.accessInstanceMethod(animal);
                jniAccessMethod.accessStaticMethod(animal);
            }
        });
    }
}
D/Animal: call instance method and num is 2
D/Animal: call static method with jstrinig
D/Animal: call static method with string array
D/Animal: str in array is string in native
D/Animal: str in array is string in native

?下載案例文章來源地址http://www.zghlxwxcb.cn/news/detail-600770.html

到了這里,關于Android Java代碼與JNI交互 JNI訪問Java類方法 (七)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Android Java代碼與JNI交互字符串轉(zhuǎn)換(四)

    Android Java代碼與JNI交互字符串轉(zhuǎn)換(四)

    ?? Android Studio 版本 ??? ?? 創(chuàng)建JNIString.java ?? ??? Native層實現(xiàn) JNI的callNativeString函數(shù) ?? ?? 配置動態(tài)庫名稱 ??? 編輯CMakeLists.txt 根據(jù)j ni/jni_string.cpp 配置動態(tài)庫名稱 ??? 生成可關聯(lián)的庫鏈接 ?? 為了讓Java能夠調(diào)用?string-lib庫中的函數(shù),您需要使用 CMake 構建腳本中的?

    2024年02月13日
    瀏覽(24)
  • Android Java代碼與JNI交互基礎數(shù)據(jù)類型轉(zhuǎn)換(三)

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

    ?? Android Studio 版本 ??? ?? 基礎類型數(shù)據(jù)的轉(zhuǎn)換 ?? 定義傳遞基礎數(shù)據(jù)類型到Native的JNI接口函數(shù) Native層創(chuàng)建callNativeInt 提供給Java調(diào)用 CMakeLists.txt 文件下配置動態(tài)庫名稱 ?添加 target_link_libraries 配置 Java調(diào)用Native層函數(shù)? ?運行打印日志 Java調(diào)用Native分別打印基礎類型數(shù)據(jù) ?下

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

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

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

    2024年02月11日
    瀏覽(35)
  • Android JNI復雜用法,回調(diào),C++中調(diào)用Java方法

    Android JNI的 普通用法估計很多人都會,但是C++中調(diào)用Java方法很多人不熟悉,并且網(wǎng)上很多介紹都是片段的。 雖然C/C++調(diào)用Java不常用,但是掌握多一點還是有好處的。 Android JNI的基礎知識介紹,之前已經(jīng)有介紹,不熟悉的可以先看看: Android Jni的介紹和簡單Demo實現(xiàn): https://

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

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

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

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

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

    2024年02月10日
    瀏覽(20)
  • Android藍牙使能流程圖(Android Bluetooth enable) -- java & jni層

    Android藍牙使能流程圖(Android Bluetooth enable) -- java & jni層

    在介紹Android enable流程之前,我們首先來看下Android的流程圖 以上圖示是android8以上的,主要跟Android8之前的架構在于Bluetooth stack跟vendor層之間增加一層HIDL,主要是抽象硬件層的作用 OK,回歸主題,我們來看下Android的enable流程,首先上一張架構圖 另外聲明下:我們做了一些列

    2024年02月09日
    瀏覽(20)
  • Android JNI開發(fā)從0到1,java調(diào)C,C調(diào)Java,保姆級教程詳解

    Android JNI開發(fā)從0到1,java調(diào)C,C調(diào)Java,保姆級教程詳解

    前些天發(fā)現(xiàn)了一個蠻有意思的人工智能學習網(wǎng)站,8個字形容一下\\\"通俗易懂,風趣幽默\\\",感覺非常有意思,忍不住分享一下給大家。 ??點擊跳轉(zhuǎn)到教程 第一步首先配置Android studio的NDK開發(fā)環(huán)境,首先在Android studio中下載NDK包 第二步在local.properties文件中,配置對應的NDK路徑 第三

    2024年02月12日
    瀏覽(18)
  • Java生成jni.h頭文件,java調(diào)用C方法 圖文詳解

    Java生成jni.h頭文件,java調(diào)用C方法 圖文詳解

    環(huán)境搭建 1. android studio2021.2.1 2. JDK版本1.8 File —— New —— New Project —— Empty Activity 創(chuàng)建后如下圖所示 大概需求:①java傳兩個整數(shù)給C ? ? ? ? ? ? ? ? ? ②C接收到來自java的兩個整數(shù),并且相加 ? ? ? ? ? ? ? ? ? ③C把兩個數(shù)之和的結果返回給java (1)AS打開Terminal窗口

    2024年02月05日
    瀏覽(19)
  • C++通過JNI調(diào)用JAVA方法返回ArrayList對象

    C++通過JNI調(diào)用JAVA方法返回ArrayList對象

    運行效果: ? JAVA實現(xiàn): 獲取系統(tǒng)已安裝應用列表并返回ListString對象 C++ JNI實現(xiàn):

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包