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

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


前言

交叉编译的应用场景:
例如:neon优化硬仿一致性验证等。


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

在讲MinGW和NDK之前,我们先要了解一下如何在linux环境下编译Android平台可执行程序/算法库。
linux环境下编译Android平台可执行程序/算法库需要用到gcc工具和NDK工具。
其中,gcc已经集成在linux系统中,不需要额外在下载安装。
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)/srcSRC_PATH := $(LOCAL_PATH)/srcLOCAL_MODULE_CLASS := STATIC_LIBRARIES    # 将用于决定编译时的中间文件存放的位置LOCAL_MODULE := test                      # 编译生成的目标名LOCAL_MODULE_TAGS := optional             # 该模块在所有版本下都编译ifeq ($(TARGET_ARCH), arm)LOCAL_ARM_MODE := thumbLOCAL_CFLAGS += -mthumbendififeq ($(TARGET_ARCH_ABI), $(filter arm64-v8a armeabi-v7a, $(TARGET_ARCH_ABI)))    LOCAL_CFLAGS += -D__ARCH_ARM__endifLOCAL_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 := armelseLOCAL_ARM_MODE := armendifLOCAL_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 -pieLOCAL_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-v7aAPP_PLATFORM := android-14APP_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 versionAndroid Debug Bridge version 1.0.41Version 31.0.3-7562133Installed 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 <可执行程序名称>
⑤./<可执行程序名称> 运行

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


更多相关文章

  1. 【Android】在开发项目的时候,利用AndroidStudio开发工具,突然一直
  2. 1、Android(安卓)Studio的安装及环境配置
  3. Android提示:使用或覆盖了已过时的 API
  4. 获取apk信息工具(android SDK的aapt工具)
  5. Android开发人员必备的10 个开发工具
  6. android中的sqlite数据库加密
  7. Android四款系统架构工具
  8. Android(安卓)4.1源码编译找不到资源文件解决办法
  9. 十大Android(安卓)IDE工具和应用

随机推荐

  1. Android蓝牙开发(一)
  2. 八一八android与Linux的关系
  3. android设置图片为圆角
  4. 【Qt for Android】第一个安卓程序
  5. 阿里巴巴Android开发手册
  6. Egret打包Android
  7. Android源码解析Handler系列第(三)篇---深
  8. 安卓航班Android开发经典教程大总结2----
  9. Android(安卓)Service的生命周期及使用!
  10. Android(安卓)Handle,Looper,Message消息