android开发环境搭建以及交叉编译

标题 android开发环境搭建以及交叉编译

1. 配置java+android studio+android sdk+ndk+cmake开发环境

1.1. Windows下配置android环境的步骤:

  1. 安装jdk,配置系统环境
  2. 安装android studio
  3. 在android studio中下载安装sdk、ndk和cmake,配置系统环境

1.2. JNI概述

JNI 是 Java Native Interface 的缩写,译为 Java 本地接口。它允许 Java 代码和其他语言编写的代码进行交互。在android 中提供 JNI 的方式,让 Java 程序可以调用 C/C++语言程序。 android 中很多 Java 类都具有 native 接口,这些接口由本地实现,然后注册到系统中。在android系统中实现JNI库需要连接.so共享库,如:lib<文件名>.so。

1.3. NDK概述

Android NDK是一个工具集,让你的Android应用程序里可以内嵌使用本地代码(C/C++)的组件。Android应用程序运行在Dalvik虚拟机中。NDK可以让你使用C/C++这样的本地代码语言来实现你的应用程序中某些部分。这对某类程序是有帮助的,比如需要重用已有的C代码,或者为了提高运行速度。
NDK 提供:
1). 编译文件和工具集,用来将你的C/C++源文件编译成本地库。
2). 提供一种方式,将对应的本地库内嵌到应用程序包文件(.apk)中,最终发布到Android设备中。
3). 本地系统头文件和库,这些头文件和库从Android1.5开始往后都是被支持的。但使用本地活动(native activity)的程序只能运行在Android 2.3或更高的系统中。
4). 文档、示例、指南。

2. 交叉编译

2.1. 概述

交叉编译(Cross-Compilation)是指在一台主机上编译生成在另一种不同的目标平台上运行的可执行文件。这个主机通常被称为“主机系统”或“开发主机”,而目标平台则被称为“目标系统”。
在交叉编译过程中,开发主机和目标系统具有不同的体系结构、处理器架构或操作系统。例如,您可以在 x86 电脑上使用 GCC 编译器将 C/C++ 代码交叉编译成 ARM 架构的可执行文件,以在 ARM 设备上运行。

2.2. 一般流程:

  1. 准备交叉工具链:交叉工具链包括针对目标系统的交叉编译器、链接器和库文件等。这些工具用于在开发主机上生成适合目标系统的二进制文件。
  2. 配置编译环境:设置环境变量和路径,以便编译器和链接器能够正确找到所需的头文件、库文件和工具链。
  3. 编写源代码:根据目标系统的要求,编写适当的源代码,包括应用程序或库的功能实现。
  4. 配置编译选项:通过编译选项指定目标系统的体系结构、处理器类型、操作系统版本等参数。这些选项通常包括指定目标架构、ABI(Application Binary Interface)、优化级别等。
  5. 进行交叉编译:使用交叉工具链进行编译和链接操作,生成适合目标系统的可执行文件或库文件。
  6. 部署和运行:将生成的可执行文件或库文件部署到目标系统上,并在目标环境中运行测试。

2.3. 示例

Linux下交叉编译在安卓平台运行的可执行文件的两种方法(都是使用NDK自带的工具链)如下:

  1. 使用CMake + NDK
    CMakeLists.txt文件代码如下:
cmake_minimum_required(VERSION 3.0)
project(ndk_test)

add_definitions("-Wall -g")

add_executable(${PROJECT_NAME} ./Example/ndk_test.cpp )

install(TARGETS ${PROJECT_NAME}
  RUNTIME DESTINATION ${PROJECT_SOURCE_DIR})

编译CMakeLists.txt的SHELL脚本代码如下:

rm -r build
mkdir build && cd build 

cmake -DCMAKE_TOOLCHAIN_FILE=$NDKROOT/build/cmake/android.toolchain.cmake \
	-DANDROID_ABI="armeabi-v7a" \
	-DANDROID_NDK=$NDKROOT \
	-DANDROID_PLATFORM=android-22 \
	..

make && make install

cd ..
  1. 单独使用NDK的ndk-build指令
    Android.mk文件代码如下:
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:= mmc.c mmc_cmds.c lsmmc.c
LOCAL_SRC_FILES += 3rdparty/hmac_sha/sha2.c 3rdparty/hmac_sha/hmac_sha2.c
LOCAL_MODULE := mmc_utils
LOCAL_LDLIBS += -lc
LOCAL_C_INCLUDES+= $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/mmc-utils
include $(BUILD_EXECUTABLE)

编译Android.mk的SHELL脚本代码如下:

ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk

参考文献

  1. https://developer.android.google.cn/studio/projects/configure-cmake?hl=zh-cn#kotlin
  2. 利用NDK进行Android的交叉编译(附实例)
  3. (NDK编译)详解使用Android.mk编译的C/C++程序过程
  4. NDK官网下载地址
  • 32
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值