一、搭建Android-NDK開發環境

目標:在android app中調用自己的c代碼,這個c代碼會以動態庫的形式存在,並且爲了表示更廣泛的使用場景,我們的c程序會使用第三方庫(openssl),這也是我們開發中經常用的方式。

功能:c代碼就是將openssl中的MD5直接封裝,並以字符串形式輸出MD5值。android代碼調用jni接口,並將MD5值輸出到手機屏幕。

對象:新手入門,可以通過本教程一步一步完成整個過程,但是可能會遇到文章中沒有提到的問題,這個也是正常的,因爲版本和環境原因,遇到問題可以留言討論。

 

基礎概念

NDK 是Native Develop Kit的含義,從含義很容易理解,本地開發。Android NDK 就是一套工具集合,允許你使用C/C++語言來實現應用程序的部分功能。一般情況,是用NDK工具把C/C++編譯爲.so文件,然後在Java中調用。

該圖非常清晰的表示了上層通過JNI來調用NDK層的。

JNI,全稱爲Java Native Interface,即Java本地接口,JNI是Java調用Native 語言的一種特性。通過JNI可以使得Java與C/C++機型交互。即可以在Java代碼中調用C/C++等語言的代碼或者在C/C++代碼中調用Java代碼。

步驟

1、下載NDK

在網站https://developer.android.google.cn/ndk/downloads下載

我下載的是當時最新穩定版 (r21) android-ndk-r21-linux-x86_64.zip

2、創建工作目錄

創建NDK工具目錄

mkdir AndroidWorkSpace/NDK_Tools -p

cd AndroidWorkSpace/NDK_Tools

3、拷貝並解壓ndk工具

將android-ndk-r21-linux-x86_64.zip拷貝到該目錄下
unzip android-ndk-r21-linux-x86_64.zip 
解壓後的文件夾是:android-ndk-r21

4、配置環境變量

進入andorid-ndk-r21
cd android-ndk-r21
查看當前路徑:pwd
/home/rtp/android/AndroidWorkSpace/NDK_Tools/android-ndk-r21
這是我的路徑
vim ~/.bashrc
在文件末尾添加下面兩行代碼,將上面的路徑添加到PATH環境變量中
export ANDROID_NDK=/home/rtp/android/AndroidWorkSpace/NDK_Tools/android-ndk-r21
export PATH=$ANDROID_NDK:$PATH
保存退出

5、測試

關閉當前Terminal並打開一個新的Terminal

通過: ndk-build -v 指令測試是否成功安裝

GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

6、編譯測試

嘗試用ndk-build 命令編譯sample目錄下的jni工程:
sample在r10b中提供,可以用來進行測試

cd AndroidWorkSpace/NDK_Tools/android-ndk-r10b/samples/hello-jni
ndk-build

Android NDK: Found platform level in ./default.properties. Setting APP_PLATFORM to android-3.    
Android NDK: android-3 is unsupported. Using minimum supported version android-16.    
Android NDK: WARNING: APP_PLATFORM android-16 is higher than android:minSdkVersion 3 in ./AndroidManifest.xml. NDK binaries will *not* be compatible with devices older than android-16. See https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md for more information.    
[arm64-v8a] Gdbserver      : [aarch64-linux-android] libs/arm64-v8a/gdbserver
[arm64-v8a] Gdbsetup       : libs/arm64-v8a/gdb.setup
[x86_64] Gdbserver      : [x86_64-linux-android] libs/x86_64/gdbserver
[x86_64] Gdbsetup       : libs/x86_64/gdb.setup
[armeabi-v7a] Gdbserver      : [arm-linux-androideabi] libs/armeabi-v7a/gdbserver
[armeabi-v7a] Gdbsetup       : libs/armeabi-v7a/gdb.setup
[x86] Gdbserver      : [i686-linux-android] libs/x86/gdbserver
[x86] Gdbsetup       : libs/x86/gdb.setup
[arm64-v8a] Compile        : hello-jni <= hello-jni.c
[arm64-v8a] SharedLibrary  : libhello-jni.so
[arm64-v8a] Install        : libhello-jni.so => libs/arm64-v8a/libhello-jni.so
[x86_64] Compile        : hello-jni <= hello-jni.c
[x86_64] SharedLibrary  : libhello-jni.so
[x86_64] Install        : libhello-jni.so => libs/x86_64/libhello-jni.so
[armeabi-v7a] Compile thumb  : hello-jni <= hello-jni.c
[armeabi-v7a] SharedLibrary  : libhello-jni.so
[armeabi-v7a] Install        : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so
[x86] Compile        : hello-jni <= hello-jni.c
[x86] SharedLibrary  : libhello-jni.so
[x86] Install        : libhello-jni.so => libs/x86/libhello-jni.so

 

以上我們的環境搭建完成了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章