下载NDK
The Native Development Kit (NDK)特指Android NDK,是为了服务安卓开发的。通过ndk,安卓也可以使用java之外的native code,如c,c++,甚至c和c++对应的library也可以得以复用,这就大大减少了重复开发。
The Native Development Kit (NDK) is a set of tools that allows you to use C and C++ code with Android, and provides platform libraries you can use to manage native activities and access physical device components, such as sensors and touch input.https://developer.android.com/ndk/guides
java通过 Java Native Interface (JNI)调用native library中的函数。
使用 CMake作为build tool ,也可以使用ndk-build。前者需要CMakeLists.txt来说明如何构建,包括需要链接哪些库,后者则需要Android.mk 等makefile文件。
Android.mk
在jni中,有两个mk文件。其中Android.mk是makefile文件。
makefile的作用之一就是指定编译结果,编译生成(exe,so,a,jar,apk)
编译apk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# 生成hello apk
LOCAL_PACKAGE_NAME := hello
include $(BUILD_PACKAGE)
引入静态库
LOCAL_STATIC_LIBRARIES += libxxxxx
引入动态库
LOCAL_SHARED_LIBRARIES += libxxxxx
头文件
LOCAL_C_INCLUDES = $(INCLUDES)
每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。
#call 是调用一个系统提供的宏函数
# $() 是取值
#:= 是赋值
LOCAL_PATH := $(call my-dir) #宏my-dir 则由Build System提供。返回包含Android.mk的目录路径(即包含Android.mk file文件的目录)。
Application.mk
Application.mk是jni文件夹中的另外一个不可或缺的mk文件。它更为简单,作用是指定编译的平台。
APP_ABI := armeabi
// 最常用的APP_ABI字段:指定需要基于哪些CPU平台的.so文件
// 常见的平台有armeabi x86 mips,其中移动设备主要是armeabi平台
// 默认情况下,Android平台会生成所有平台的.so文件,即同APP_ABI := armeabi x86 mips
// 指定CPU平台类型后,就只会生成该平台的.so文件,即上述语句只会生成armeabi平台的.so文件
安装Cygwin
Cygwin is:Cygwin
- a large collection of GNU and Open Source tools which provide functionality similar to a Linux distribution on Windows.
因为NDK只能在Linux环境下运行,所以如果windows需要使用ndk的话就需要安装Cygwin。但是默认可能很多工具是没有安装的,所以需要在安装的过程中指定一下,安装好make,vim等。
https://zhuanlan.zhihu.com/p/474242350
如果安装成功,双击桌面的快捷方式,会弹出一个终端,输入make -v可以看到make的版本。
在这个终端输入:cd /cygdrive && ls,可以看到主机的几个磁盘盘符,包括挂载的。
d)配置NDK路径
1、 首先找到cygwin的安装目录,找到一个home\<你的用户名>\.bash_profile文件,我的是:C:\cygwin\home\Administrator\.bash_profile
2、 打开bash_profile文件,添加NDK=/cygdrive/<你的盘符>/ 我的是:NDK=/cygdrive/d/android-ndk-r9b export NDK,并保存
3、重新打开cygwin,输入cd $NDK,如果输出上面配置的/cygdrive/d/android-ndk-r9b信息,则表明环境变量设置成功了
配置环境变量成功之后,继续在这个终端借助cygdrive切换到代码工程的jni目录下,执行:
$NDK/ndk-build.cmd
即可编译完成。编译结果一般是可执行文件,在jni同级的obj目录下。
下载Android Debug Bridge (adb)
在编译出安卓可执行文件之后,为了方便在电脑端把文件push到手机,并进行调用,就需要用到adb。
Android Debug Bridge (
adb
) is a versatile command-line tool that lets you communicate with a device. Theadb
command facilitates a variety of device actions, such as installing and debugging apps.adb
provides access to a Unix shell that you can use to run a variety of commands on a device.Android 调试桥 (adb) | Android Studio | Android Developers
下载地址SDK 平台工具版本说明 | Android Studio | Android Developers,得到一个文件夹,里面有adb.exe,fastboot.exe.
为了使用adb命令,还需要把adb.exe所在文件夹添加到环境变量中,否则会报错:
‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
reference:
解决‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。_android_weixin_38648367-GitCode 开源社区
Windows下NDK开发环境搭建_windows系统安装ndk-CSDN博客
Windows下Android NDK安装配置-CSDN博客
[转]Android:JNI 与 NDK到底是什么?(含实例教学)_jni ndk-CSDN博客
Android.mk 文件使用解析-CSDN博客