如何配置ndk
『壹』 andorid studio 怎麼添加ndk配置
1、新建一個Android工程,這一步就不多說了;
2、在AndroidStudio中配置NDK路徑,方法是:
(1)先下載NDK並安裝(這句基本是廢話);
(2)點菜單欄的File->ProjectStructure…->在打開的窗口中左側選中SDKLocation->在右側Android NDK Location中填入NDK目錄所在路徑
3、編譯生成.class文件,方法是:
點菜單欄的Build->Make Project
這時,在工程的app/build/intermediates下就會生成classes文件夾,打開classes目錄下的debug目錄就會看到以你的包名命名的各級文件夾,最里邊文件夾下有你的java類對應的.class文件;
4、確定你要引用本地方法的類:
其實你也可以先生成jni目錄,再去創建這個類,但是先Google顯然建議先創建要引用C代碼的Java類,因為AndroidStudio可以根據你在java類中定義的native方法的名稱來自動生成.h頭文件。
比如你想在MainActivity中引用本地方法,那麼你先用
static {
System.loadLibrary("myNativeLib");
}
來聲明本地代碼庫,然後定義幾個natvie方法,比如
public native String getStringFromNative();
5、使用javah命令行生成jni目錄及對應的頭文件:
我用的是AndroidStudio 2.1.1,在主界面最下邊就能找到Terminal,點一下就能打開系統的命令行工具,並且已經為你自動cd到當前工程所在目錄
6、配置build.gradle文件
這里的build.gradle是指app模塊下的build.gradle,不是整個工程的build.gradle文件。在模塊的build.gradle的defaultConfig下加入以下idk配置:
ndk {
moleName"myNativeLib"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
7、配置local.properties文件
打開工程目錄下的local.properties,感覺這一步是自動配置的,或者說在你一開始在AndroidStudio中指定NDK目錄時已經自動生成了。我的AndroidStudio在打開local.properties已經有了
ndk.dir=/Develop/Android/android-ndk-r10e
這一行,所以就不用配了;
8、配置gradle.properties
打開工程目錄下的gradle.properties文件(注意不是build.gradle,而是gradle.properties),在文件的最後一行加入
android.useDeprecatedNdk=true
這句的作用是允許我們使用已經過時的NDK版本,不知道AndroidStudio要求使用哪個版本的NDK才不會報錯,總之只要配置了這一句就可以使用比較舊的NDK版本了,我用的r10;
至此我們在AndroidStudio中就完成了NDK環境的配置,接下來就可以寫Native代碼了;
9、寫一個.c文件測試一下是否運行正常
(1)在我們之前生成src/main/jni目錄下新建一個.c文件,方法是在jni文件夾上點滑鼠右鍵,選擇New->C/C++ Source File,然後在彈出的對話框中填入.c或.cpp文件的文件名就可以了,比如說mail.c
『貳』 android studio ndk-build怎麼配置環境
第一步:下載Android NDK。
第二步:為project設置ndk路徑,在local.properties中,添加ndk.dir=<path-to-ndk>。
第三步:修改build.gradle文件。
第四步:創建jni文件。
第五步:創建測試類文件。
第六步:創建.h文件。創建.cpp文件。
第七步:進行測試
『叄』 如何設置NDK的編譯選項
1. 概述
首先回顧一下 Android NDK 開發中,Android.mk 和Application.mk 各自的職責。
Android.mk,負責配置如下內容:
(1) 模塊名(LOCAL_MODULE)
(2) 需要編譯的源文件(LOCAL_SRC_FILES)
(3) 依賴的第三方庫(LOCAL_STATIC_LIBRARIES,LOCAL_SHARED_LIBRARIES)
(4) 編譯/鏈接選項(LOCAL_LDLIBS、LOCAL_CFLAGS)
Application.mk,負責配置如下內容:
(1) 目標平台的ABI類型(默認值:armeabi)(APP_ABI)
(2) Toolchains(默認值:GCC 4.8)
(3) C++標准庫類型(默認值:system)(APP_STL)
(4) release/debug模式(默認值:release)
由此我們可以看到,本文所涉及的編譯選項在Android.mk和Application.mk中均有出現,下面我們將一個個詳細介紹。
2. APP_ABI
ABI全稱是:Application binary interface,即:應用程序二進制介面,它定義了一套規則,允許編譯好的二進制目標代碼在所有兼容該ABI的操作系統和硬體平台中無需改動就能運行。(具體的定義請參考網路或者維基網路)
由上述定義可以判斷,ABI定義了規則,而具體的實現則是由編譯器、CPU、操作系統共同來完成的。不同的CPU晶元(如:ARM、Intel x86、MIPS)支持不同的ABI架構,常見的ABI類型包括:armeabi,armeabi-v7a,x86,x86_64,mips,mips64,arm64-v8a等。
這就是為什麼我們編譯出來的可以運行於Windows的二進製程序不能運行於Mac OS/linux/Android平台了,因為CPU晶元和操作系統均不相同,支持的ABI類型也不一樣,因此無法識別對方的二進製程序。
而我們所說的「交叉編譯」的核心原理也跟這些密切相關,交叉編譯,就是使用交叉編譯工具,在一個平台上編譯生成另一個平台上的二進制可執行程序,為什麼可以做到?因為交叉編譯工具實現了另一個平台所定義的ABI規則。我們在Windows/Linux平台使用Android NDK交叉編譯工具來編譯出Android平台的庫也是這個道理。
這里給出最新 Android NDK 所支持的ABI類型及區別:
下面是我總結的一些常用的CFLAGS編譯選項:
(1)通用的編譯選項
-O2 編譯優化選項,一般選擇O2,兼顧了優化程度與目標大小
-Wall 打開所有編譯過程中的Warning
-fPIC 編譯位置無關的代碼,一般用於編譯動態庫
-shared 編譯動態庫
-fopenmp 打開多核並行計算,
-Idir 配置頭文件搜索路徑,如果有多個-I選項,則路徑的搜索先後順序是從左到右的,即在前面的路徑會被選搜索
-nostdinc 該選項指示不要標准路徑下的搜索頭文件,而只搜索-I選項指定的路徑和當前路徑。
--sysroot=dir 用dir作為頭文件和庫文件的邏輯根目錄,例如,正常情況下,如果編譯器在/usr/include搜索頭文件,在/usr/lib下搜索庫文件,它將用dir/usr/include和dir/usr/lib替代原來的相應路徑。
-llibrary 查找名為library的庫進行鏈接
-Ldir 增加-l選項指定的庫文件的搜索路徑,即編譯器會到dir路徑下搜索-l指定的庫文件。
-nostdlib 該選項指示鏈接的時候不要使用標准路徑下的庫文件
(2) ARM平台相關的編譯選項
-marm -mthumb 二選一,指定編譯thumb指令集還是arm指令集
-march=name 指定特定的ARM架構,常用的包括:-march=armv6, -march=armv7-a
-mfpu=name 給出目標平台的浮點運算處理器類型,常用的包括:-mfpu=neon,-mfpu=vfpv3-d16
-mfloat-abi=name 給出目標平台的浮點預算ABI,支持的參數包括:「soft」, 「softfp」 and 「hard」
『肆』 android如何配置ndk
NDK全稱:Native Development Kit。
1、NDK是一系列工具的集合。
* NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。
* NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。
* NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。
2、NDK提供了一份穩定、功能有限的API頭文件聲明。
Google明確聲明該API是穩定的,在後續所有版本中都穩定支持當前發布的API。從該版本的NDK中看出,這些API支持的功能非常有限,包含有:C標准庫(libc)、標准數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。
『伍』 android ndk怎麼配置
、下載NDK工具(也在這個網站):http://www.androiddevtools.cn/,我使用的是最新的android-ndk-r10e-windows-x86.exe,下載完後點擊解壓縮。
4、Eclipse -> Window -> Preferences -> Android -> NDK,設置NDK為剛剛解壓縮的工具包路徑。
注意:做到這里時,控制台報出了一個錯誤:「Unable to launch cygpath. Is Cygwin on the path」,因為ndk r7之前編譯採用的是Cygwin模擬出linux 環境,使用ndk-build命令,而ndk r7之後集成了編譯環境,能夠在windows環境下就可以編譯了,使用的命令試是ndk-build.cmd。解決如文章後面的(問題四)所寫的方法:
5、NDK環境基本上已經搭建好,新建一個普通Android項目測試NDK支持。項目右鍵->Android Tools->Add Native Support...,輸入.so庫名字(如 hello )後點擊Finish ;(注意:若項目已經是一個Jni項目,例如NDK example裡面的HelloJni,這一步中.so庫名字不用填)
『陸』 android studio怎麼配置ndk
① windwos上的android ndk環境搭建(附視頻,同時包括xp,vasta,win7,win8,win8.1,win10等主流的windows版本);
② linux下的android ndk環境搭建(附視頻,同時包括 mac系統,ubuntu系統,debian,紅帽,麒麟等 unix和linux的主流操作系統);
『柒』 android studio怎樣配置ndk環境
項目右鍵-Project Structure-SDK Location-Android NDK location
『捌』 android studio怎麼配置ndk路徑
AndroidStudio沒有像Eclipse那樣的一鍵add native support,相對來說比較麻煩,下面就介紹在AndroidStudio中如何實現類似於Eclipse的add native support功能(也就是進行NDK開發的步驟)。
http://blog.csdn.net/aplixy/article/details/51429305
『玖』 如何配置ndk andriod studio
准備工作
Android Studio 環境搭建
在我的上一篇文章 [Android] 環境配置之正式版Android Studio 1.0 中有介紹了。
NDK 環境搭建
下載:http://developer.android.com/tools/sdk/ndk/index.htmlWindows32:android-ndk-r10d-windows-x86.exeWindows64:android-ndk-r10d-windows-x86_64.exeMac OS X 32-bit:android-ndk-r10d-darwin-x86.binMac OS X 64-bit:android-ndk-r10d-darwin-x86_64.binLinux 32-bit (x86):android-ndk-r10d-linux-x86.binLinux 64-bit (x86):android-ndk-r10d-linux-x86_64.bin
都是可執行文件,下載後點擊即可解壓到當前文件夾;當然你可以使用命令行來進行跨文件夾解壓的。
建立一個項目 NDKDemo:
建立對應的類,在 MathKit 中我們實現計算 INT 值的平方數。
public class MathKit { public static native int square(int num); static { System.loadLibrary(JniDemo); }}
StringKit 這個就是充數用的:
public class StringKit { public static native void setNull(String str); static { System.loadLibrary(JniDemo); }}
准備 .h 文件
進入Java目錄;CMD 進入該目錄進行 javah 操作:
這個想必大家並不陌生吧,該文件就是 java 類對應的 頭文件,當然如果你比較厲害的話可以不用這樣生成,自己敲代碼完成也行;反正我是不行。
如下,建立文件夾:
拷貝之前的文件進去:
分別實現:
net_qiujuer_ndkdemo_jni_MathKit.cpp
#include<net_qiujuer_ndkdemo_jni_mathkit.h>JNIEXPORT jint JNICALL Java_net_qiujuer_ndkdemo_jni_MathKit_square (JNIEnv *env, jclass cls, jint num) { return num*num; }</net_qiujuer_ndkdemo_jni_mathkit.h>
net_qiujuer_ndkdemo_jni_StringKit.cpp
#include<net_qiujuer_ndkdemo_jni_stringkit.h>JNIEXPORT void JNICALL Java_net_qiujuer_ndkdemo_jni_StringKit_setNull (JNIEnv *env, jclass obj, jstring str) { }</net_qiujuer_ndkdemo_jni_stringkit.h>
設置項目
設置根目錄中的:local.properties
該設置不是必須,如果你設置了環境變數則可不用設置;如果沒有但是又沒有設置將會出現:
設置 APP 項目 build.gradle
該設置是為了設置生成的Jni名稱為:JniDemo。
主文件調用:
現在點擊運行:
可以看見是非常簡單的;這個調用可以說是我操作過最簡單的了;甚至於生成 .H 文件都可以編輯 .sh 文件來進行批處理(這個後面有時間再說).
更多
在平時的那些操作中我們不可避免的要建立:
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := geniusLOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cppLOCAL_LDLIBS := -lm -llog -ljnigraphicsinclude $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := allAPP_PLATFORM.:= android-19APP_OPTIM := release
而這里這兩個文件都沒有建立,那麼是怎麼決定的呢?
我們可以在 ndk 的 modelName 上按住 Ctrl 進行點擊將會出現這個界面:
這些就是全部能夠設置的參數。分別對應:
ndk{ moleName JniDemo // 設置生成的文件名 cFlags -DANDROID_NDK -D_RELEASE //這個對應的是生成模式 ldLibs m, log, jnigraphics //這個對應 LOCAL_LDLIBS 但是需要去掉前面的 「l」 abiFilters all //這個是對應的 APP_ABI stl stlport_shared //這個對應的是 APP_STL }
好了,就這些祝大家成功。項目打包上傳。
『拾』 如何設置android sdk ndk
android sdk 更新到 r23 時,eclipse 自帶 adt版,裡面並沒有設置ndk的路徑,從而導致了在ndk配置方面的難度。本文主要適合:
① 使用 android sdk r23 20140702 的朋友
② 使用 android ndk r10d 的朋友
③ 想知道andorid adt自帶eclipse無法設置ndk路徑的解決方法
④ 不知道如何使用代理ip的朋友
⑤ 不知道如何下載 android sdk, android ndk的朋友
http://jingyan..com/article/3ea51489e7a9bd52e61bbac7.html