当前位置: 首页> 汽车> 报价 > 安卓交叉编译——ndk

安卓交叉编译——ndk

时间:2025/7/23 5:37:06来源:https://blog.csdn.net/zcg1942/article/details/139674279 浏览次数: 0次

下载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 apkLOCAL_PACKAGE_NAME := helloinclude $(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. The adb 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博客
 

关键字:安卓交叉编译——ndk

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: