日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android JNI调用(Android Studio 3.0.1)(转)

發布時間:2023/11/29 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android JNI调用(Android Studio 3.0.1)(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近回頭復習了一下android 的jni調用,卻發現按以前的方法調用失敗,一怒之下就重新摸索,碰了幾次壁,發現網上好多教程都不能成功調用,于是記錄一下現在AS版本成功好用的調用方法。

這里設定你的ndk已經下載并且設置沒問題.源碼鏈接:http://download.csdn.net/download/yeyuehei/10149844

當前android studio 版本3.0.1,步驟如下:

1.設置jni -h 和ndk -build的快捷方式

2.java代碼寫c回調的方法,及grade的配置

3.快捷鍵jni -h生成頭文件.h

4.建立c資源文件和mk文件及c函數的調用

5.快捷鍵ndk-build生成三種.so庫文件

以上是步驟,具體如下:

1.置jni -h 和ndk -build的快捷方式

新建項目,成功后點擊File,然后找到Settings...點擊找到External Tools,然后如下圖添加java -jni快捷鍵

Tool settings中三行可以直接copy上去:
$JDKPath$\bin\javah.exe
-classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$
$ModuleFileDir$\src\main\java

?

添加ndk-build快捷鍵如下圖:

Tool settings 的兩行:

F:\software\androidstudio\sdk\ndk-bundle\ndk-build.cmd(根據自己的ndk目錄設置這個路徑)

$ModuleFileDir$\src\main(直接copy)

?

添加成功后隨便右鍵點擊一個文件找到External Tools就會發現剛才添加的快捷鍵

?

2.java代碼寫c回調的方法,及grade的配置

新建一個class 名稱隨便,這里是JniKet,如下

?

打開build.gradle 添加ndk和 sourceSets如下圖

注意:

1.ndk中的moduleName要和上圖中的libName一致

2.sourceSets中的兩行都要加上缺一不可

3.圖中紅框的代碼會在圖下面出現。。。

?

ndk {moduleName "JniDemo"abiFilters "armeabi", "armeabi-v7a", "x86"//cpu的類型 }sourceSets {main {jniLibs.srcDirs 'src/main/libsjni.srcDirs = []} }

?

以上配置就夠了,其他都不需要

?

3.快捷鍵jni -h生成頭文件.h,建立c資源文件和mk文件及c函數的調用

選中剛才建的class(這里是JniKet),右鍵找到External Tools,選中jni -h,然后會在main下成jni文件夾,里面包含生成的頭文件,名稱格式:包名+類名.h

打開.h文件如下圖:

?

右鍵->new->c/c++ source file->type選.c(名稱隨便,這里是TestJni),然后copy上圖紅框中的兩個函數到新建的.c文件

為了驗證 能調用c方法,再建立一個c方法的頭文件和資源文件(同一個文件夾下):

test.h:

?

#include <string.h>#include <jni.h>int addValue(int x, int y);

test.c

#include "test.h" int addValue(int x, int y){return x*10+y*10; }

?

?

最后將test.c引入剛才建立的jni資源文件中(這里是TestJni))最后TestJni如下:

?

#include "lifaair_edifier_com_myjni_JniKet.h" #include "test.c"JNIEXPORT jstring JNICALL Java_lifaair_edifier_com_myjni_JniKet_testJni(JNIEnv *env, jclass jc){return (*env)->NewStringUTF(env,"fuck your father,langfei laozi's time");} JNIEXPORT jint JNICALL Java_lifaair_edifier_com_myjni_JniKet_getValue(JNIEnv *env, jclass js ){return addValue(10, 8);}

?

?

當然別忘了mk文件兩個:

名稱:Android.mk

內容:

?

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := JniDemo LOCAL_C_INCLUDES := lifaair_edifier_com_myjni_JniKet.h LOCAL_SRC_FILES := TestJni.cLOCAL_LDLIBS := -llog include $(BUILD_SHARED_LIBRARY)

?

?

名稱:Application.mk

內容:

APP_ABI := armeabi armeabi-v7a x86

?

?

5.快捷鍵ndk-build生成三種.so庫文件

右鍵點擊Jniket(步驟2中生成的 java class),右鍵找到External Tools,選中ndk-build,就會生成三種.so文件如下圖:

?

當然還有最重要的調用:

?

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv_hello = findViewById(R.id.tv_hello);tv_hello.setText("this message from jni,its value is:\n"+JniKet.testJni()+"\n getValue():"+JniKet.getValue()); }}

編譯運行,成功運行如下圖:

?

?

轉自:https://blog.csdn.net/yeyuehei/article/details/78741753

總結

以上是生活随笔為你收集整理的android JNI调用(Android Studio 3.0.1)(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。