一、搭建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

 

以上我们的环境搭建完成了。

 

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页