如何優雅地使用安卓NDK

來源:互聯網
上載者:User

標籤:基礎   參數   關於   示範   return   工程項目   gradle   files   news   

在Android Studio上使用了一段時間的NDK,感覺官方的外掛程式com.android.tools.build.gradle-experimental還是不夠穩定,存在一定問題,不過Google也聲明了這個外掛程式是在實驗性階段。幸好官方在Android Studio上提供了另一種方式使用NDK,這篇部落格就講講這種到目前為止我覺得非常贊的方法。

開發環境
基礎的安卓開發環境:Android Studio、SDK、JDK
下載好NDK,自己手動下載或者用SDK工具下載都可以
我使用的版本:Android Studio 1.5.1

配置常用命令
NDK開發比較常用的命令就是產生標頭檔、構建so包,在android studio上我們可以先配置好命令,使用起來就很方便了,這是我感覺最贊的地方。

如所示,我添加了三個命令,按加號添加

NDK

其中一個命令的配置詳情如:

javah

命令配置參數:

javah用於產生標頭檔
Program:$JDKPath$/bin/javah
Parameters: -encoding UTF-8 -d ../jni -jni $FileClass$
注意:這個命令我加上了-encoding UTF-8指定編碼,你可以改成你工程的編碼。
Working directory: $SourcepathEntry$..\java

ndk-build用於構建so包
Program: 你的NDK目錄\build\ndk-build.cmd
注意:windows用ndk-build.cmd,MAC/Linux用ndk-build
Parameters: 什麼都不用填
Working directory:$ModuleFileDir$\src\main

ndk-build clean清除so包
Program: 你的NDK目錄\build\ndk-build.cmd
注意:windows用ndk-build.cmd,MAC/Linux用ndk-build
Parameters: clean
Working directory:$ModuleFileDir$\src\main

配置完三個命令之後,你就可以在右鍵菜單中找到這幾個命令,可以直接使用。如示範了產生NdkTest類的標頭檔

javah

配置工程
讓工程項目使用NDK,需要做一些配置工作
在local.properties檔案中填寫使用的NDK目錄:

1
ndk.dir=你的NDK目錄的絕對路徑
在gradle.properties檔案中添加如下代碼

1
android.useDeprecatedNdk = true
在module的build.gradle添加如下代碼:

android {

defaultConfig {    ndk {        moduleName "NdkTest"//定義NDKlibrary的名字        //ldLibs "log" 添加log庫,看自己需求    }}//這裡設定目錄,預設就這樣寫就可以了sourceSets {    main {        jni.srcDir "src/main/jni"        jniLibs.srcDir "src/main/libs"    }}

}
Hello word
按上面的步驟全都配置完之後就可以在Android Studio上享受NDK了。
下面寫一個簡單的返回Hello word字串的程式。

首先在java中聲明一個本地方法,並載入本地庫,如下:

public class NdkTest
{
static {
System.loadLibrary("NdkTest");
}
public static native String getString();
}
產生它的標頭檔(自動產生的名字是包名+類名me_majiajie_ndktest_NdkTest.h),並且建立c/c++檔案(NdkTest.cpp),如下:

#include "me_majiajie_ndktest_NdkTest.h"

JNIEXPORT jstring JNICALL Java_me_majiajie_ndktest_NdkTest_getString
(JNIEnv *env, jclass jc)
{
return env->NewStringUTF("Hello word !!!");
}
在jni目錄建立一個檔案命名為Android.mk,填入以下內容

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := NdkTest
LOCAL_SRC_FILES := NdkTest.cpp
include $(BUILD_SHARED_LIBRARY)
然後在jni目錄建立一個檔案命名為Application.mk,填入以下內容

APP_MODULES := NdkTest

APP_ABI := all
注意:Android.mk和Application.mk都是NDK預設的設定檔,關於這兩個檔案的詳細介紹可以看官網。

最後產生so包就可以了,記住每次修改C檔案都需要重建so包:

如何優雅地使用安卓NDK

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.