========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
網站:www.qiujuer.net
開源庫:Genius-Android
轉載請註明出處:http://blog.csdn.net/qiujuer/article/details/42040963
========================================================
NDK 開發哪家強?XX XX 找 Blue Fly.
說到 NDK 開發,其實是爲了有些時候爲了項目需求需要調用底層的一些 C/C++ 的一些東西;另外就是爲了效率更加高些。
但是很多時候能不用就不用;這個是啥原因?個人感覺有些時候是覺得麻煩,首先要配置 NDK 還要 下載 Cygwin ,配置 Cygwin ,然後需要編譯生成,哎太麻煩了。如果你說使用 Eclipse,的確這樣在編譯上是能簡單很多,但是前期也是需要配置一大堆;哎,配置錯了還傷不起。
現在谷歌主力推動 Android Studio 這個是個不錯的工具,至少現在來看在 Eclipse 上能做到的 這邊都有,這邊有的Eclipse上不一定有。
下面來說說 在 Android Studio 中怎麼進行 NDK 的開發。
準備工作
Android Studio 環境搭建
在我的上一篇文章 [Android] 環境配置之正式版Android Studio 1.0 中有介紹了。
NDK 環境搭建
- 下載:http://developer.android.com/tools/sdk/ndk/index.html
- Windows32:android-ndk-r10d-windows-x86.exe
- Windows64:android-ndk-r10d-windows-x86_64.exe
- Mac OS X 32-bit:android-ndk-r10d-darwin-x86.bin
- Mac OS X 64-bit:android-ndk-r10d-darwin-x86_64.bin
- Linux 32-bit (x86):android-ndk-r10d-linux-x86.bin
- Linux 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_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)
{
}
設置項目
設置根目錄中的:local.properties
該設置不是必須,如果你設置了環境變量則可不用設置;如果沒有但是又沒有設置將會出現:
設置 APP 項目 build.gradle
該設置是爲了設置生成的Jni名稱爲:JniDemo。
主文件調用:
現在點擊運行:
可以看見是非常簡單的;這個調用可以說是我操作過最簡單的了;甚至於生成 .H 文件都可以編輯 .sh 文件來進行批處理(這個後面有時間再說).
更多
在平時的那些操作中我們不可避免的要建立:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := genius
LOCAL_SRC_FILES := net_qiujuer_imageblurring_jni_ImageBlur.cpp
LOCAL_LDLIBS := -lm -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all
APP_PLATFORM:= android-19
APP_OPTIM := release
而這裏這兩個文件都沒有建立,那麼是怎麼決定的呢?
我們可以在 ndk 的 modelName 上按住 Ctrl 進行點擊將會出現這個界面:
這些就是全部能夠設置的參數。分別對應:
ndk{
moduleName "JniDemo" // 設置生成的文件名
cFlags "-DANDROID_NDK -D_RELEASE" //這個對應的是生成模式
ldLibs "m", "log", "jnigraphics" //這個對應 LOCAL_LDLIBS 但是需要去掉前面的 “l”
abiFilters "all" //這個是對應的 APP_ABI
stl "stlport_shared" //這個對應的是 APP_STL
}
好了,就這些祝大家成功。項目打包上傳。
本次項目點擊這裏下載。
========================================================
作者:qiujuer
博客:blog.csdn.net/qiujuer
網站:www.qiujuer.net
開源庫:Genius-Android
轉載請註明出處:http://blog.csdn.net/qiujuer/article/details/42040963
========================================================