如何在Android Studio下進行NDK開發

如何在Android Studio下進行NDK開發

最近項目需要用到NDK的一些東西,所以就隨便看了看,雖然網上一大堆,但是誰叫我是一個愛學習的人呢?不做筆記就渾身不舒服,因此寫下一些筆記,給初學的人少走一些彎路吧!

好了言歸正傳,我手裡拿到一個eclipse開發的項目,轉移到AS各種報錯,心累,最後解決了大部分爆紅,突然發現出現了這麼幾個玩意(看下圖結構),以前沒接觸過,很尷尬,然後就找資料,然後就發現新大陸般成謎其中無可自拔!!!最後我也發現通過NDK可以幹另外一件很有意思的事情,如果你的公司對推送很重視的話(問:為啥不直接用第三方推送?答:用戶KILL App後不能收到推送。然後誰叫我們公司是創業公司呢?所有的東西能用程序寫出來的能不花錢就不花錢。),可以解決百分之七十左右KILL APP之後不能收到推送的問題。

如何在Android Studio下進行NDK開發

DNK

一:首先配置如上圖,NDK得下載,配置完這個如果出現這個錯誤(No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android)說明缺少文件哈附上NDK下載鏈接,下載完解壓,對比你本地這個toolchains的文件缺少啥就粘貼複製(一般缺少 mips64el-linux-android這個文件)。NDK下載

如何在Android Studio下進行NDK開發

配置NDK

如何在Android Studio下進行NDK開發

toolchains文件夾下

如何在Android Studio下進行NDK開發

配置SDK

配置完成以後就開始我們的開發了

二:首先聲明原生方法,必須加上native,告訴程序這是一個原生方法。在具體java代碼調用時,和調用java的其他方法一樣,直接調用就可以了。activity代碼:

如何在Android Studio下進行NDK開發

看到飄紅的就是我們申明的原生方法

System.loadLibrary("talk");這個就是加載庫,需要注意的是加載的庫名即編譯生成的庫名,去掉前綴lib和後綴so。

如何在Android Studio下進行NDK開發

這個地方我是自己建的jnilibs,一般你們都是直接放在libs下面的哈

然後我們make project一下,(不要告訴我你不知道make project在哪裡哈!!!),我們的目的就是編譯成對應的class文件。然後根據生成的class文件,利用javah生成對應的 .h頭文件。這個過程我相信大家很熟悉吧。哈哈!下面我們來點重頭戲,生成.h文件。

三:我們在AS的控制檯打開Terminal或者工具欄打開view ->ToolsWindows->Terminal

如何在Android Studio下進行NDK開發

執行命令cd app\src\main,然後我們進入src\main\目錄下;這個時候需要很細心了,因為我們馬上要執行一段很長的命令了,javah -d jni -(classpath這是你要生成頭文件java類的絕對路徑,可以直接把包名粘貼過來,然後把.上你的java類 )\Users\beijingnixun\smart_home.ihomephone.v700.Talk;

下面我們來講解一下:

<1>javah 是生成頭文件需要的工具。

<2>-d jni 是在你的工程下生成jni目錄,到時會在這個目錄下建JNI開始的C/C++源文件的。

四:然後剩下步驟按照下圖

如何在Android Studio下進行NDK開發

生成c/c++

如何在Android Studio下進行NDK開發

填寫名稱

如何在Android Studio下進行NDK開發

配置cpp文件

最後如果報錯可能這個地方未填寫

如何在Android Studio下進行NDK開發

五,生成.so文件

這一步最重要,前面的都是鋪墊,我們最主要的就是生成 .so文件然後放在jinlib裡面。

我們現在gradle裡面添加modulName以及添加支持cpu庫,寫到這裡突然想起來差兩個東西,這兩個東西也很重要就是.mk文件,這裡我們不講.mk文件哈,有興趣的自己去百度。我們講這兩個寫,首先在jni裡面建立兩個文件一個命名為Android.mk一個命名為Application.mk。看下圖:

如何在Android Studio下進行NDK開發

Application.mk

Application.mk

說一下里面的參數:APP_ABI這個是.so文件支持的庫。APP_PLATFORM這個是因為如果你報錯關於targetSDK之類的錯誤,你就加上這句話,然後android-1(這個1你要寫你studio下報錯裡面有一個minSdk版本號)

如何在Android Studio下進行NDK開發

Android.mk

Android.mk

Android.mk這個裡面你直接複製粘貼就好:

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

LOCAL_MODULE := talk //依賴項的名稱,跟你gradle裡面填寫的moduleName以及你talk.java文件裡面lib引用的名稱保持一致
LOCAL_SRC_FILES := jnitalk.c//在你jni裡面生成的.c文件名
include $(BUILD_SHARED_LIBRARY)

現在我們準備好了所有的工作,下一步我們就生成.so文件。反鍵選擇JNI文件夾--》Open in terminal。如下圖:

如何在Android Studio下進行NDK開發

在termoinal打開jni

進入jni文件在terminal

然後我們輸入命令ndk-build然後你就會看到你生成了.so文件,如果報錯找不到ndk那是你沒配置好ndk環境,這個希望你們自己去百度。好了,現在ndk流程基本完了。我們就剩下調用了。這個調用不用我教你吧,類名點方法。你就可以看到c層給你返回的消息了。本篇文章暫時介紹到這裡,下一章我打算更新一篇雙進程守護。謝謝各位同學花時間觀看,。


分享到:


相關文章: