NDK開發(fā)(八)--自動(dòng)生成JNI頭文件

簡(jiǎn)介

在使用NDK開發(fā)過程中,對(duì)于我們聲明的native方法,都是需要進(jìn)行靜態(tài)注冊(cè)的,實(shí)現(xiàn)的方法可以是根據(jù)類型簽名的規(guī)范進(jìn)行實(shí)現(xiàn),也可以使用javah來幫我們自動(dòng)生成。自己手寫的方式,很容易一不小心就寫錯(cuò)了,所以一般都是使用javah的方式,我們之前在使用的時(shí)候,步驟都是這樣子的,

javac com/example/Test.java
javah com.example.Test

然后將在當(dāng)前目錄生成的頭文件拷貝到對(duì)應(yīng)的位置,雖然也能夠減小出錯(cuò)的概率,但是流程上還是比較繁瑣復(fù)雜。
其實(shí)AS為我們提供了更加快捷方便,不易出錯(cuò)的實(shí)現(xiàn)方式,只需簡(jiǎn)單配置即可。

例子

譬如下面的例子,我們?cè)贘niData聲明了我們需要使用到的兩個(gè)jni方法,中間就是自動(dòng)生成的頭文件。那這個(gè)文件是怎樣生成的呢?

-w1552

配置

快捷鍵commend + ,調(diào)出設(shè)置界面,選擇Tool--External Tools,選擇 “+”進(jìn)行新增,

-w1202

根據(jù)自己的喜好填寫 Name、Group、Description參數(shù),另外幾個(gè)重要的參數(shù),需要按照規(guī)范來。

  • 1、Program

填寫javah即可,表示使用javah命令

  • 2、Arguments

我這里填寫的是-v -jni -d $ModuleFileDir$/src/main/cpp/head $FileClass$,表示在main里面的cpp路徑下創(chuàng)建head文件夾,并存放生成的頭文件。

-w444

各個(gè)參數(shù)的含義如圖,其中-cp 和-classpath 其實(shí)是同個(gè)配置,只不過前者是后者的縮寫而已,ModuleFileDir表達(dá)當(dāng)前的工程目錄。

  • 3、Working dirctory

工作目錄,填寫$SourcepathEntry$即可,表示你的源碼目錄位置。

使用

選中需要生成頭文件的類,右鍵選擇ExternalTools,選擇我們添加的javah,之后就可以看到在對(duì)應(yīng)的目錄已經(jīng)生成所需要的頭文件了。

-w820

其他

在使用的過程中,當(dāng)jni里面遇到用了一個(gè)Android里面的類,會(huì)出現(xiàn)報(bào)錯(cuò),找不到類的情況。這是因?yàn)槲覀儧]有配置classpath到Arguments里面,只需要新增對(duì)應(yīng)的環(huán)境變量即可。

-classpath "$Classpath$:$ModuleFileDir$/src/main/java" -v -jni -d $ModuleFileDir$/src/main/cpp/head $FileClass$

如上,路徑使用""包括起來,如果有多個(gè)路徑的情況,需要以:進(jìn)行分割。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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