安卓交叉编译——ndk

下载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. 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博客
 

相关推荐

  1. 交叉编译——ndk

    2024-06-19 09:32:02       9 阅读
  2. native编程

    2024-06-19 09:32:02       23 阅读
  3. Ubuntu16.04 CUPS安装与Andoird ndk交叉编译CUPS(待续...)

    2024-06-19 09:32:02       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-19 09:32:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-19 09:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-19 09:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-19 09:32:02       18 阅读

热门阅读

  1. Swarm 集群管理

    2024-06-19 09:32:02       11 阅读
  2. PostgreSQL源码分析——创建用户

    2024-06-19 09:32:02       10 阅读
  3. Linux 上的 TTY 是什么?

    2024-06-19 09:32:02       9 阅读
  4. USB 端点停止

    2024-06-19 09:32:02       7 阅读
  5. 通信基础知识

    2024-06-19 09:32:02       7 阅读
  6. 如何给vue开发的网站做seo?

    2024-06-19 09:32:02       7 阅读
  7. redis雪崩问题怎么解决

    2024-06-19 09:32:02       8 阅读
  8. Elasticsearch优化

    2024-06-19 09:32:02       6 阅读
  9. HTML5 Web Workers: 异步编程的强大力量

    2024-06-19 09:32:02       7 阅读