1. 程式人生 > >AndroidStudio環境下的jni呼叫(NDK)的方法

AndroidStudio環境下的jni呼叫(NDK)的方法

Step: 1. 新增native介面注意寫好native介面和System.loadLibrary()即可了,並無特別之處。

Step: 2.執行Build->Make Project
生成了.class檔案..class檔案的生成路徑是在 app_path/build/intermediates/classes/debug下的. 這個在android studio裡面看不到, 到檔案管理器裡面翻到的, 裡面還有好多東西。

Step: 3.javah生成c標頭檔案
點選"View->Tool Windows->Terminal",即在Studio中進行終端命令列工具.執行如下命令生成c語言標頭檔案。

這 裡需要注意的是要進入 <Project>

Step: 1. 新增native介面注意寫好native介面和System.loadLibrary()即可了,並無特別之處。

Step: 2.執行Build->Make Project
生成了.class檔案..class檔案的生成路徑是在 app_path/build/intermediates/classes/debug下的. 這個在android studio裡面看不到, 到檔案管理器裡面翻到的, 裡面還有好多東西。

Step: 3.javah生成c標頭檔案
點選"View->Tool Windows->Terminal",即在Studio中進行終端命令列工具.執行如下命令生成c語言標頭檔案。

這 裡需要注意的是要進入 <Project>\app\src\main的目錄下執行javah命令,為的是生成的 .h 檔案同樣是在<Project>\app\src\main路徑下(jni下面),可以在Studio的工程結構中直接看到。

操作命令:

..>cd app\src\main

main>javah -d jni -classpath <SDK_android.jar>;<APP_classes> <class>

javah -d jni -classpath c:\Users\Ximei\AppData\Local\Android\sdk1\platforms\android-21\android.jar;..\..\build\intermediates\classes\debug com.example.jnitest


只要什麼錯誤都不提示說明執行成功!! 這時就可以去檢視main目錄下是不是多了一個jni資料夾,裡面就是生成的標頭檔案了。

看到<project>\app\src\main\jni\com_example_jnitest.h出現了. 

Step: 4.編輯c檔案

在<project>\app\src\main\jni\com_example_jnitest.c檔案中實現標頭檔案中的函式。

編寫C原始檔com_example_jnitest.c。注意這裡的函式名稱一定要從之前生成的h檔案裡面複製過來,以免出錯。 

Step: 5.配置NDK

這一步包括兩個動作:

指明ndk路徑
在local.properties中新增ndk目錄, ndk目錄中不可包含空格.
ndk.dir=C\:\\android-ndk-r10d

Step: 6.生成os檔案。 
8.1、Build->Make Project生成so檔案,這時如果只有一個c檔案,就會報錯,這是一個bug,解決辦法很簡單,隨便新建一個空的c檔案就行了。

檢視  工程目錄\app\build\intermediates\ndk\debug\lib目錄裡面各有一個os檔案

Step: 7. 修改build.gradle配置

工程中共有兩個build.gradle配置檔案,我們要修改的是在<Project>\app\build.gradle這個檔案。

為其在defaultConfig分支中增加上
    ndk {
       moduleName "jnitest"         //生成的so名字

abiFilters "armeabi", "armeabi-v7a", "x86"

    }
 
Step: 8. 配置ndk路徑。開啟local.properties,加入NDK的路徑(ndk需要單獨下載,我在網上下載ndk後放在了和sdk相同的路徑下) 
 
 
Step: 9. 呼叫jni,執行。