Android Studio NDK編程-環境搭建及Hello!

一,下載 安裝android-ndk開發包 

NDK各個版本連接 
二,新建項目NDKDemo,選擇空Activity就能夠;
注:Android studio 2.2,可經過SDK Tools 添加LLDB,CMake,更方便的開發jni程序了

三,按F12,配置項目NDK路徑: java



四,在MainActivity中添加以下代碼: android

static {
    System.loadLibrary("MyJni");//導入生成的連接庫文件
}
public native String getStringFromNative();//本地方法
public native String getString_From_c(); c++

 

 

紅色代碼是本地方法!不知是否Android studio對ndk支持不太好所致,但不影響開發JNI程序 架構

在最新的Android Studio2.2 能很好的支持ndk了,再也不出現紅色!
五,Make Project一下,生成class文件! app


使用Android studio2.2 就是這錘子圖標! 工具

六,經過class文件生成頭文件! gradle


(1)經過Terminal 中的命令來生成: ui

輸入javah -d jni -classpath ../../build/intermediates/classes/debug com.it5.ndkdemo
(注意先後有英文的;號隔開的哈)! spa

注:../後面的就是class文件的目錄!! .net

 

你們看了,是否是有點暈圈啊,雖然能夠複製路徑,但若是每次都這樣就太不方便了!!

另能夠在工具中配置命令的快捷鍵,來完成!

(2)Settings -> External tools中配置javah,ndk-build快捷方式!!

javah(生成頭文件),ndk-build(編譯)

打開External Tools 點加號添加javah:以下圖:

 

 

參數配置:
Program: $JDKPath$\bin\javah.exe 
Parameters: -classpath . -jni -o $ModuleFileDir$/src/main/jni/$Prompt$ $FileClass$ 
Working directory: $ModuleFileDir$\src\main\Java 
Parameters的另一種寫法 -classpath . -jni -d $ModuleFileDir$/src/main/jni $FileClass$

 

按上圖依次填好,就行了!!

添加ndk-build配置以下:

Program: D:\Android_NDK\android-ndk-r11b\ndk-build.cmd 

Working directory: $ProjectFileDir$\app\src\main 
這樣配置後,之後只要把須要運行的類上右鍵 --> External Tools-->javah/ndk-build!

就可完成頭文件及編譯的工做!
哈哈!! 爽歪歪!

 

(3)用命令生成頭文件!!

選中須要執行javah命令的類,而後右擊,按照下圖選擇命令便可。
注:生成 .h頭文件,因此通常是在含有 native字樣的本地方法的類!

本地方法寫在MainActivity.java 中,就右擊該類生成!

 

 

這樣就會在main文件下建立jni文件夾並生成 .h頭文件成功!

 

 

如今ok了,快捷就是爽啊!!!

接下來,就是編寫C/C++的代碼了!

在jni目錄編寫C代碼

 

 

注:

項目結構切換成 Android狀態時,jni文件夾顯示成 cpp名字! 

當切換成project時就顯示成jni文件夾!!

以下圖:

 

 

 

 

添加以下代碼:

 

 

 

八,Gradle文件添加配置

(1)在module中的build.gradle中defaultConfig{}標誌裏添加!

   ndk{
        moduleName "MyJni"
        ldLibs "log"
        abiFilters "armeabi","armeabi-v7a","x86"
}

編譯會根據配置生成不一樣的目錄來存放 .so文件!

參數配置:

在defaultConfig中添加一個ndk{}

ndk{}可添加的屬性以下:

moduleName "xxx" :        編譯後so庫的名字

ldLibs "xxx" "xxx" :     鏈接的庫,能夠有多個

abiFilters "xxx" "xxx" :

  so庫運行的cpu架構,有armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64這些,經常使用的是armeabi和armeabi-v7a

stl "xxx" :                       C++ runtime support library,共有九種

cFlags "xxx" "xxx" :     編譯選項

例如  :

要使工具自動識別C++提示只要以下語句:

stl "gnustl_shared"
cFlags "-IE:/Android_NDK/android-ndk-r11b/sources/cxx-stl/gnu-libstdc++/4.9/include"

 

 

注:Android.mk文件 Android Studio會自動生成!與Eclipse不一樣!

如圖:

 

注:

把Android.mk文件拷貝到 main/jni文件夾下

右鍵--->External Tools -->ndk-build  生成 .so文件!!

如作以下配置 .so 就會生成在指定的目錄下:

sourceSets.main{      jni.srcDirs = []          jniLibs.srcDir "src/main/libs"     }

 

(2)在項目的gradle.properties 文件中添加

android.useDeprecatedNdk=true

如圖:

 

 

最後,運行成功OK!

 

 

這是以前的配置方法,有個不方便的地方就是沒法DEBUG jni,要另添加插件,對寫C/C++代碼提示功能也不盡人意!

不過本篇是以Android Studio 2.2來配置滴!!在2.2版本,對NDK支持也愈來愈完善了,能夠在

SDK Tool 中添加 CMake,LLDB來建立ndk項目並支持調試,自動編譯,對C/C++的代碼提示功能也加強了!



相關文章
相關標籤/搜索