1. 程式人生 > >ubuntu搭建Android NDK環境與Android Studio簡單使用NDK

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方法。
這裡寫圖片描述
執行專案即可看到效果
這裡寫圖片描述