android studio配置ndk開發
網上很多資料都比較舊,我查了一些資料,並且試了一下,總結了一個最簡單的配置ndk開發的方法,步驟如下:
1. 在SDK Tools中勾選安裝CMake、LLDB、NDK
2. 配置External Tools,省去了自己敲命令
引數講解
javah 用於生成標頭檔案
Program:$JDKPath$/bin/javah
Parameters:-d ../jni -jni $FileClass$
Working directory:$SourcepathEntry$\..\java
ndk-build 用於構建so包
注意:MAC/Linux用ndk-build,沒有.cmd字尾
Program:D:\adt\sdk\ndk-bundle\ndk-build.cmd
Parameters:什麼都不用填
Working directory:$ModuleFileDir$\src\main
我的javah配置是
Program:/usr/bin/javah
Parameters:-d ../jni -jni $FileClass$
Working directory:$SourcepathEntry$/../java
我的ndk-build配置是
Program:$ANDROID_HOME/ndk-bundle/ndk-build
Working directory:$ModuleFileDir$/src/main
3. 在工程的local.properties檔案中配置NDK的目錄
ndk.dir=/Users/user/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/user/Library/Android/sdk
4. 建立CMakeLists.txt
#定義cmake支援的最小版本號
cmake_minimum_required(VERSION 3.4.1)
add_library( # 設定生成so庫的檔名稱,例如此處生成的so庫檔名稱應該為:native-lib.so
native-lib
# 設定生成的so庫型別,型別只包含兩種:
# STATIC:靜態庫,為目標檔案的歸檔檔案,在連結其他目標的時候使用
# SHARED:動態庫,會被動態連結,在執行時被載入
SHARED
# 設定原始檔的位置,可以是很多個原始檔,都要新增進來,注意相對位置
src/main/jni/hello.cpp )
# 從系統裡查詢依賴庫,可新增多個
find_library( # 例如查詢系統中的log庫liblog.so
log-lib
# liblog.so庫指定的名稱即為log,如同上面指定生成的libnative-lib.so庫名稱為native-lib一樣
log )
# 配置目標庫的連結,即相互依賴關係
target_link_libraries( # 目標庫(最終生成的庫)
native-lib
# 依賴於log庫,一般情況下,如果依賴的是系統中的庫,需要加 ${} 進行引用,
# 如果是第三方庫,可以直接引用庫名,例如:
# 引用第三方庫libthird.a,引用時直接寫成third;注意,引用時,每一行只能引用一個庫
${log-lib} )
檔案中的native-lib
是我生成的so檔案的名字,src/main/jni/hello.cpp
是我實現的native方法所在的類,注意路徑不要寫錯,我的檔案所在路徑是這樣的
5. 在模組的build.gradle檔案中新增
android {
compileSdkVersion 26
buildToolsVersion "26.0.0"
defaultConfig {
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
6. 建立native方法
package com.test;
public class NativeHelper {
static {
System.loadLibrary("native-lib");
}
public native String stringFromJNI();
}
7. 編寫cpp檔案
#include "stdio.h"
#include "jni.h"
#include "string"
extern "C"
JNIEXPORT jstring JNICALL Java_com_test_NativeHelper_stringFromJNI
(JNIEnv *env,
jobject jobject1){
return env->NewStringUTF("hello world from cpp");
}
然後專案就可以執行了
參考連結:https://www.jianshu.com/p/1e14dcc81c3c
參考連結的文章不太詳細,我改了改,寫了上文
相關文章
- Android Studio NDK開發-環境配置Android
- Android Studio NDK開發:環境配置Android
- Android Studio3.0 NDK配置與開發Android
- Android Studio中NDK開發Android
- Android Studio搭建ndk開發流程Android
- Android Studio NDK開發:自定義庫Android
- Android Studio NDK開發-JNI呼叫Java方法AndroidJava
- Mac之Android Studio開發NDK入門MacAndroid
- Android Studio ndk-Jni開發詳解Android
- Andorid Studio NDK開發-使用NDK庫
- Android Studio NDK開發:JNI呼叫Java函式AndroidJava函式
- Android NDK學習(2)Windows下NDK開發環境配置AndroidWindows開發環境
- Andorid Studio NDK 開發 – NDK 開發利器 gradle-experimentalGradle
- Andorid Studio NDK 開發 - NDK 開發利器 gradle-experimentalGradle
- Android NDK開發之旅15 NDK Eclipse下NDK開發流程AndroidEclipse
- Andorid Studio NDK開發-Hello World
- Andorid Studio NDK 開發 - Hello World
- Andorid Studio NDK開發:Experimental PluginPlugin
- Andorid Studio NDK開發:使用庫
- Andorid Studio NDK開發:Hello World
- Ndk 初步開發 In AndroidAndroid
- Android Studio配置開發環境Android開發環境
- Android NDK開發(二) 使用ndk-build構建工具進行NDK開發AndroidUI
- Andorid Studio NDK開發-LLDB除錯LLDB除錯
- Andorid Studio NDK開發:LLDB除錯LLDB除錯
- Android Studio ndk-Jni開發詳細入門,Aes加密demoAndroid加密
- Android -- NDK開發入門Android
- Android Studio NDK:三、打包SOAndroid
- [Android開發]Mac下NDK開發(JNI)AndroidMac
- Android NDK開發之旅29 NDK FFmpeg視訊播放Android
- android 開發淺談(JDK && NDK)AndroidJDK
- Android Studio 已有專案新增NDK支援(mac/ndk-build)AndroidMacUI
- Andorid Studio NDK 開發 – 編譯 OpenSSL 類庫編譯
- Andorid Studio NDK開發-編譯OpenSSL類庫編譯
- Android Studio使用新的Gradle構建工具配置NDK環境AndroidGradle
- Android NDK開發之JNI基礎Android
- Android NDK開發Crash錯誤定位Android
- Android NDK開發之旅26 C++ STLAndroidC++