美文网首页
NDK<第七篇>:Application.mk

NDK<第七篇>:Application.mk

作者: NoBugException | 来源:发表于2022-10-23 21:41 被阅读0次

    Application.mk中定义一些全局(整个项目)的配置,配置相对较少,比较简单。

    下面是基本配置:

    # 确定CPU架构
    APP_ABI := armeabi-v7a
    
    # 支持所有CPU架构:armeabi-v7a arm64-v8a x86_64 等等
    # APP_ABI := all
    
    # 一般对应Android SDK的最低版本
    APP_PLATFORM := android-21
    
    # c++_static 静态链接
    # c++_shared 动态链接
    # system 系统默认
    # 如果生成的so库包含静态.a文件,这个属性要写成c++_static,否则可以不用写
    APP_STL := c++_shared
    
    # 用来指定C++功能
    APP_CPP_FEATURES += exceptions rtti
    
    ifdef APP_DEBUG
       ifeq ($(APP_DEBUG),true)
          CFLAGS+=  -O0 -g
          LOCAL_CFLAGS+=    -D_DEBUG
          APP_OPTIM := debug
       else
          CFLAGS+=  -O2 -g
          LOCAL_CFLAGS+=    -DNDEBUG
          APP_OPTIM := release
      endif
    endif
    

    【1】APP_OPTIM

    将此可选变量定义为 `release` 或 `debug`。
    在构建应用的模块时可使用它来更改优化级别。
    发行模式是默认模式,可生成高度优化的二进制文件。调试模式会生成未优化的二进制文件,更容易调试。
    

    【2】APP_DEBUG

    可以在AS中手动设置 Build Variants 改变的值。

    image.png
    如果选择 debug,APP_DEBUG等于true;
    如果选择 release,APP_DEBUG等于false;
    

    【2】APP_CFLAGS

    为任何模块编译任何 C 或 C++ 源代码时传递到编译器的一组 C 编译器标志
    

    【3】APP_CPPFLAGS

    构建 C++ 源文件时传递到编译器的一组 C++ 编译器标志。
    

    【4】APP_ABI

    需要生成的cpu架构。
    
    现在手机主要是armeabi-v7a。查看手机cpu架构的方法是:
    
    adb shell cat /proc/cpuinfo
    adb shell getprop ro.product.cpu.abi
    
    apk在安装的时候,如果手机是armeabi-v7a的,则会首先查看apk中是否存在armeabi-v7a目录,
    如果没有就会查找armeabi。
    
    如果目标是armeabi-v7a,但是拥有一个armeabi的,也可以把它放到armeabi-v7a目录下。
    但是反过来不行。
    
    ABI(横 so)/CPU(竖 手机) armeabi armeabi-v7a arm64-v8a x86 x86_64
    ARMV5 支持
    ARMV7 支持 支持
    ARMV8 支持 支持 支持
    X86 支持
    X86_64 支持 支持

    【5】APP_PLATFORM

    与app最小SDK版本对应即可。
    
    image.png

    【6】APP_STL

    默认情况下,NDK 构建系统为 Android 系统提供的最小 C++ 运行时库 (`system/lib/libstdc++.so`) 
    提供 C++ 功能。 
    
    名称 说明> 功能
    libstdc++(默认) 默认最小系统 C++ 运行时库。 不适用
    gabi++_static GAbi++ 运行时(静态)。 C++ 异常和 RTTI
    gabi++_shared GAbi++ 运行时(共享)。 C++ 异常和 RTTI
    stlport_static STLport 运行时(静态)。 C++ 异常和 RTTI;标准库
    stlport_shared STLport 运行时(共享)。 C++ 异常和 RTTI;标准库
    gnustl_static GNU STL(静态)。 C++ 异常和 RTTI;标准库
    gnustl_shared GNU STL(共享)。 C++ 异常和 RTTI;标准库
    c++_static LLVM libc++ 运行时(静态)。 C++ 异常和 RTTI;标准库
    c++_shared LLVM libc++ 运行时(共享)。 C++ 异常和 RTTI;标准库

    一般情况下,如果设置的配置不符合当前版本,会有明显的错误提示:

    image.png

    【7】在 build.gradle 中配置全局参数

    全局参数不仅可以在Application.mk中配置,还可以在 build.gradle 中配置。

            externalNativeBuild {
                ndkBuild {
                    arguments "APP_STL=c++_static", "APP_PLATFORM := android-21"
                    abiFilters 'armeabi-v7a'
                }
            }
    

    多个配置以逗号隔开。

    [本章完...]

    相关文章

      网友评论

          本文标题:NDK<第七篇>:Application.mk

          本文链接:https://www.haomeiwen.com/subject/mocwzrtx.html