Android studio 使用NDK工具实现JNI编程
前言:
Android開發中常常會使用到第三方的.so庫。在使用.so庫的時候就要用到JNI編程。JNI是Java Native Interface的縮寫。它提供了若干的API實現了Java和其它語言的通信(主要是C&C++)。開發中一般都用第三方的庫,非常多時候也可能我們自己來編寫C或者C++來實現JNI編程,這篇博客主要是介紹Android studio 使用NDK工具來開發JNI編程。
環境配置
JNI編程須要滿足例如以下前提:
我的ndk版本號為 android-ndk-r10e。
除此之外,你還得新建一個CLASSPATH環境變量,變量名:CLASSPATH;變量值為 .;%HOME_PATH%\lib; 一開始的 . 和;和最后的;都是須要的。
假設沒有gradle.progerties文件,請直接在當前project下新建該文件就可以。
JNI編程
1.新建JniUtils類。用來調用jni方法。代碼例如以下:
package com.example.xjp.myjnidmoe;public class JniUtils { //載入靜態庫static {System.loadLibrary("Test");//此處載入的是對應的模塊庫,名稱必須和 ndk的moduleName名一樣。} //定義本地方法public native String getValue(); }2.Build 編譯當前project,最后會在build文件夾下生成例如以下文件
該文件夾下生成了 JniUtils.class文件。
然后打開AS的Terminal終端,跳到debug文件夾下:
然后運行 javah -jni *(此處為你的目標文件路徑。即JniUtils路徑)
最后會在debug文件夾以下生成 com_example_xjp_myjnidmoe_JniUtils.h 頭文件。代碼例如以下:
以上代碼是自己主動生成的,無需開發人員去改動。
3.在你的main文件夾下新建jni子文件夾。例如以下:
將剛才生成的 .h頭文件拷貝到該jni文件夾下。然后新建一個 test.c文件,test.c文件代碼例如以下:
因為jni編程對方法的名稱有一定規則要求。開頭須要Java_ 后面依次是jni方法的java類路徑。以“_”切割。
開發人員為了不寫錯,能夠直接將剛才的.h頭文件中的方法 copy下來直接實現就可以。
4.配置Gradle文件
首先你得配置當前project的 build.gradle文件,事實上配置非常easy,直接在原來的build.gradle文件中加入 ndk的配置就可以。
是不是非常easy。不過定義了 ndk 的moduleName的名稱而已。
其次是為當前project配置指定的ndk,配置方法例如以下:右鍵當前project名。選擇Open Module Settings。彈出例如以下窗體。
如圖。1:sdk路徑;2:jdk路徑。3:ndk路徑;點擊ok之后。
會在local.properties文件下配置指定的sdk和ndk路徑:
#Tue Apr 26 18:36:18 CST 2016 ndk.dir=F\:\\Android\\SDK1\\android2\\android-ndk-r10e sdk.dir=F\:\\Android\\SDK1\\android2\\sdk如此,全部的準備工作都已經完畢。如今能夠在你的代碼中使用Test庫了,調用代碼例如以下:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = (TextView) findViewById(R.id.text);//start=====JniUtils jniUtils = new JniUtils();String content = jniUtils.getValue();//end=====textView.setText(content);}結果例如以下:
可能會有人問。代碼生成的libTest.so庫在哪里呢?事實上生成的libTest.so庫已經打包到apk中去了,那么假如我要把這個so庫給別人使用怎么辦?非常easy,在你編譯的過程事實上已經生成了libTest.so,在哪里呢?文件夾例如以下:bulid/intermediates/ndk文件夾下。該文件夾是編譯成功之后生成的。
看到沒?生成了不同平臺下的libTest.so庫。
總結
該博客主要是記錄Android studio 下使用NDK工具實現JNI編程和生成so庫的整個過程。以便開發人員了解JNI編程的一個完整的過程。
轉載于:https://www.cnblogs.com/lytwajue/p/7338966.html
總結
以上是生活随笔為你收集整理的Android studio 使用NDK工具实现JNI编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu系统安装和配置
- 下一篇: hadoop大数据分析与挖掘实战(读书笔