將C文件通過(guò)NDK編譯生成SO庫(kù)

NDK開(kāi)發(fā)流程

1.安裝NDK

Paste_Image.png

下載完成后

Paste_Image.png

2.配置
然后你會(huì)在local.properties文件中看到(或者自己添加):

Paste_Image.png

還有g(shù)radle.porperties里必須添加

android.useDeprecatedNdk=true

2.Java本地調(diào)用

public class NativeUtils {
static { System.loadLibrary("hello");
}
//java調(diào)C中的方法都需要用native聲明且方法名必須和c的方法名一樣
public native String getStringFromNative();}

繼續(xù)如下 Make Project編譯成class文件:


Paste_Image.png

然后我們?cè)诖?/p>

Paste_Image.png

然后我們開(kāi)始生成.h文件,通過(guò)Terminal終端或者直接ALT+F12

Paste_Image.png

然后在命令行中;

先進(jìn)入工程main目錄下
輸入自己的Native.class文件的絕對(duì)路徑
javah -d jni -classpath class路徑 包名+類名

例如:
javah -d jni -classpath D:\StudioSpace\JNITest\app\build\intermediates\classes\debug demo.pingkoko.cn.jnitest.NativeUtils

注意debug后面要留空格

Paste_Image.png

成功之后會(huì)在main目錄下自動(dòng)創(chuàng)建jni文件夾以及生成的.h文件,.h文件不需要修改

Paste_Image.png

接著我們要?jiǎng)?chuàng)建一個(gè).c文件,命名必須和loadLibrary()里面參數(shù)一樣 如下圖:

Paste_Image.png

c文件添加,必須要導(dǎo)入頭文件.h

include <demo_pingkoko_cn_jnitest_NativeUtils.h>

JNIEXPORT jstring JNICALL Java_demo_pingkoko_cn_jnitest_NativeUtils_getStringFromNative
(JNIEnv , jobject){
return (
env)->newStringUTF(env,"這是我測(cè)試的");
}

Paste_Image.png

最后在build.gradle defaultConfig里面添加NDK配置:

//ndk編譯生成.so文件
ndk { moduleName "test"
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}

根目錄下添加so庫(kù)目錄:

sourceSets {
main {
//你的源碼目錄
jniLibs.srcDirs 'src/main/libs'
jni.srcDirs = [] }
}

如圖:

Paste_Image.png

我們來(lái)運(yùn)行看下;

Paste_Image.png
Paste_Image.png

so庫(kù)所在的路徑:


Paste_Image.png

最后:C文件里面的返回類型是根據(jù)Native里面的返回值,如果java返回int,那么c里面就是jint具體可以自行搜索JNI語(yǔ)法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容