windows环境下生成 Android 可执行程序/算法库

  • 前言
  • 一、MinGW和NDK工具安装和环境配置
  • 二、生成Android可执行程序/库
  • 1.Android.mk 和Application.mk脚本配置
  • 2.ndk-build编库
  • 三、调试ADB工具,在Android平台运行
  • 1.ADB工具安装
  • 2.windows连接Android平台,运行
  • 四、原创不易,顺手点个赞吧~



前言


一、MinGW和NDK工具安装和环境配置

在讲MinGW和NDK之前,我们先要了解一下如何在linux环境下编译Android平台可执行程序/算法库。
linux环境下编译Android平台可执行程序/算法库需要用到gcc编译器和NDK工具。
Linux一般自带gcc编译器,不需要额外在下载安装,可以通过gcc –v查看其版本号。
NDK (原生开发套件) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码。
下载地址:https://developer.android.google.cn/ndk/downloads/index.html?hl=zh-cn 最新版本android-ndk-r23b-linux.zip

OK,那在windows环境下,需要用到MinGW和NDK工具。
MinGW(Minimalist GNU for Windows)提供了一套简单的再windows环境下基于gcc的开发环境。是将GCC编译器和GNU Binutils移植到windows平台下的产物,包括一系列头文件、库和可执行文件。在windows平台模拟了linux平台gcc的开发环境。
下载地址:https://osdn.net/projects/mingw/NDK工具实现的功能相同:使您能够在 Android 应用中使用 C 和 C++ 代码。
下载地址:https://developer.android.google.cn/ndk/downloads/index.html?hl=zh-cn 最新版本android-ndk-r23b-windows.zip

MinGW和NDK工具安装好之后,需要在系统环境变量 PATH 中添加:
C:\…\MinGW\bin
C:\…\ndk\android-ndk-r16b

二、生成Android可执行程序/库

生成Android可执行程序/库可以选择通过 ndk-build(Android.mk /Application.mk)的方式或者CMake(CMakeLists.txt)的方式。本文重点讲述一下ndk-build方式,CMake是Android Studio 编译原生库的默认构建工具,CMake官方文档

1.Android.mk 和Application.mk脚本配置

在刚才安装的NDK目录 C:\…\ndk\android-ndk-r16b\ 下创建一个jni文件夹。并将C/C++代码复制到该路径下,并在该路径下创建Android.mk 和Application.mk文件。
这两个文件的编写规则下期再讲。先展示一个样例:

Android.mk:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

INCLUDE_PATH := $(LOCAL_PATH)/src
SRC_PATH := $(LOCAL_PATH)/src

LOCAL_MODULE_CLASS := STATIC_LIBRARIES    # 将用于决定编译时的中间文件存放的位置
LOCAL_MODULE := test                      # 编译生成的目标名
LOCAL_MODULE_TAGS := optional             # 该模块在所有版本下都编译

ifeq ($(TARGET_ARCH), arm)
	LOCAL_ARM_MODE := thumb
	LOCAL_CFLAGS += -mthumb
endif

ifeq ($(TARGET_ARCH_ABI), $(filter arm64-v8a armeabi-v7a, $(TARGET_ARCH_ABI)))
    LOCAL_CFLAGS += -D__ARCH_ARM__
endif

LOCAL_C_INCLUDES := \
	$(INCLUDE_PATH)/A/ \
    $(INCLUDE_PATH)/B/ \

MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/main.c)
MY_CPP_LIST += $(wildcard $(SRC_PATH)/A/*.c)   #/**/
MY_CPP_LIST += $(wildcard $(SRC_PATH)/A/*.cpp) #/**/
MY_CPP_LIST += $(wildcard $(SRC_PATH)/B/*.c)   #/**/
MY_CPP_LIST += $(wildcard $(SRC_PATH)/B/*.cpp) #/**/

LOCAL_SRC_FILES := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)  # 编译该模块需要的源文件

ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
	LOCAL_CFLAGS += -D__ARMV7__
	LOCAL_ARM_MODE := arm
else
	LOCAL_ARM_MODE := arm
endif

LOCAL_CFLAGS += -DHAVE_CONFIG_H -D__ARM_NEON -DNR_NEON     # 宏定义 -DXXX  
LOCAL_CFLAGS += -mfloat-abi=softfp -mfpu=neon              # 使能neon指令集  

LOCAL_CFLAGS += -fPIE -fPIC     # 兼容 5.0+
LOCAL_LDFLAGS += -fPIE -pie

LOCAL_CPPFLAGS := -std=c++11    # 支持 c++ 11标准  需要在Application.mk中加入:APP_STL := gnustl_static
#LOCAL_CPPFLAGS += -std=c++1y   # 支持 c++ 14标准

include $(BUILD_EXECUTABLE)     # 编译可执行文件
#include $(BUILD_STATIC_LIBRARY) #表示编译成静态库
#include $(BUILD_SHARED_LIBRARY) #表示编译成动态库。

Application.mk:

APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
APP_STL := gnustl_static

2.ndk-build编库

在刚才创建的jni路径下,打开cmd,执行 ndk-build命令。
一般情况下不会一次build成功的,耐心看error报的错误信息,可能是代码本身的问题或者是编译选项的配置问题。
编译成功后会有如下提示,库的位置和名称(Android.mk中自己配置的)

[armeabi-v7a] Install        : test => libs/armeabi-v7a/test

提示:多次编译error之后,再次编译之前可能需要ndk-build clean.

三、调试ADB工具,在Android平台运行

1.ADB工具安装

ADB,Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。

下载地址:https://dl.google.com/android/repository/platform-tools_r31.0.3-windows.zip 环境变量PATH添加:
C:\…\platform-tools_r31.0.3-windows\platform-tools

然后输入adb version 查看版本 可以看出是否安装成功,如下就已经成功了。

C:\Users\Administrator>adb version
Android Debug Bridge version 1.0.41
Version 31.0.3-7562133
Installed as C:\platform-tools_r31.0.3-windows\platform-tools\adb.exe

2.windows连接Android平台,运行

最常用的Android平台设备是Android系统的手机。
打开手机“开发者模式”和“开发者选项”中的“USB调试”,此时,在cmd窗口输入adb devices可以查找到连接电脑的手机设备了。
在执行下面工作之前,需要获得手机root权限。保证$->#

① 将可执行程序/库 push到手机中
adb push <电脑上的文件路径> <设备里的路径>
②adb shell 进入手机
③cd 到可执行程序的路径下
④chmod 777 <可执行程序名称>
⑤./<可执行程序名称> 运行

四、原创不易,顺手点个赞吧~