簡(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)行分割。



