ubuntu搭建Android NDK環境與Android Studio簡單使用NDK
NDK下載、安裝
解壓縮下載得到的壓縮包,移動到想要放置的位置。
我放在home/Android資料夾下
開啟終端,輸入gedit ~/.bashrc
開啟配置檔案,新增如下環境變數
export NDK_HOME=/home/sxy/Android/android-ndk-r13b
export PATH=$PATH:${NDK_HOME}
儲存退出,輸入source ~/.bashrc
使之生效。
在Android Studio中使用NDK
在android studio中新建工程NDKDemo,然後在工程下新建一個module作為ndk庫檔案。我這裡取名ndklibrary
在ndklibrary的src/main/java下新建java檔案JNIUtils,並新增程式碼
package com.sxy.ndklibrary;
/**
* Created by sxy on 17-3-4.
*/
public class JNIUtils {
static {
System.loadLibrary("NDKLibrary");
}
public static native String getStringFromNative();
}
點選Build –> Make Module ‘ndklibrary’
編譯成功後會在ndklibrary/build/classes/debug/com/sxy/ndklibrary下生成JNIUtils.class檔案。
點選View –> Tool Windows –> Terminal,開啟Android Studio中的Terminal 命令列工具。
把路徑跳轉至ndklibrary/src/main目錄下。使用javah命令生成.h標頭檔案。
sxy@sxy-ThinkPad-E560:~/AndroidStudioProjects/NDKDemo$ cd ndklibrary/src/main
sxy@sxy-ThinkPad-E560:~/AndroidStudioProjects/NDKDemo/ndklibrary/src/main$ javah -d jni -classpath ../../build/intermediates/classes/debug com.sxy.ndklibrary.JNIUtils
命令執行成功後會在main資料夾下生產jni資料夾,裡面有生成的標頭檔案com_sxy_ndklibrary_JNIUtils.h
在jni資料夾下新建com_sxy_ndklibrary_JNIUtils.c檔案,用來實現native方法
#include "com_sxy_ndklibrary_JNIUtils.h"
/*
* Class: com_sxy_ndklibrary_JNIUtils
* Method: getStringFromNative
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_sxy_ndklibrary_JNIUtils_getStringFromNative
(JNIEnv *env, jclass jobj){
return (*env)->NewStringUTF(env,"this is my JNI!!!!");}
配置NDK
開啟專案中的local.properties檔案新增NDK路徑
ndk.dir=/home/sxy/Android/android-ndk-r13b
開啟ndklibrary中的build.gradle,在defaultConfig中新增
ndk {
moduleName "NDKLibrary"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
注意:這裡的moduleName須跟JNIUtils中System.loadLibrary("NDKLibrary");
裡的名稱相同。
此時編譯專案遇到 Error: Your project contains C++ files but it is not using a supported native build system錯誤,參考http://blog.csdn.net/lanuage/article/details/53072303
在工程目錄下的gradle.properties檔案的末尾加上一句:Android.useDeprecatedNdk=true 。得以解決。
然後重新編譯專案,得到.so檔案
開啟app的build.gradle檔案,在dependencies中寫入compile project(':ndklibrary')
新增依賴關係。
最後即可在MainActivity中呼叫native方法。
執行專案即可看到效果