资讯专栏INFORMATION COLUMN

NDK构建

G9YH / 2120人阅读

摘要:注意,一个文件可能被构建系统分析多遍,所以不要假设某个变量没有被定义。有个函数可以做到这个功能这将会包含当前构建路径的所有子路径下的文件们。组件它是个很小的脚本在目录下,用于构建库。

Android.mk

Android.mk把你的源码组织成“模块”(静态库/动态库)。默认情况会读取project/jni/Android.mk,并会读取project/jni/Application.mk作为可选选项。

你可以在单个Android.mk文件中定义多个模块,或者你可以书写多个Android.mk文件,每个文件定义一个单一模块。

如果你想在子目录中定义Android.mk文件 include $(call all-subdir-makefiles)。

注意,一个Android.mk文件可能被构建系统分析多遍,所以不要假设某个变量没有被定义。默认下,NDK将寻找下面的构建脚本:

$PROJECT/jni/Android.mk

如果你想在子路径下定义Android.mk文件,你应该在顶层的Android.mk中包含它们。有个函数可以做到这个功能:

include$(call all-subdir-makefiles)

这将会包含当前构建路径的所有子路径下的Android.mk文件们。

Application.mk

这个文件主要包含:

你的应用所需要模块的准确列表。

产生的机器码所对应的CPU架构。

可选的信息,像你要构建release还是debug,特殊的C或 C++编译参数以及其它需要应用到所有模块的构建选项。

这个文件是可选的:默认情况下,NDK将构建在Android.mk中列出的所有模块的并且默认面向CPUABI (armeabi).

将它放在$PROJECT/jni/Application.mk位置,那么它会被’ndk-build’脚本自动使用。

Application.mk

它描述哪个原声模块是我的应用程序所需要的。例如描述添加STL的支持APP_STL := stlport_static。

它部分的变量:

APP_PROJECT_PATH  # 应用程序工程根目录的绝对路径
APP_MODULES       # 应用程序工程用到的模块
APP_OPTIM         # 优化级别release或者debug
APP_CFLAGS        # C编译器开关集合
APP_CPPFLAGS      # C++编译器开关集合
APP_BUILD_SCRIPT  # NDK构建系统脚本即Android.mk位置
APP_ABI := armeabi armeabi-v7a  # 为了支持基于ARMv5TE和ARMv7设备的软件浮点单元指令
APP_STL := system            # 默认的C++运行时库
APP_STL := stlport_shared    # 动态STLport库
APP_STL := stlport_static    # 静态STLport库

这里的APP_OPTIM := debug和ndk-build NDK_DEBUG=1是等效的,
APP_OPTIM := release和NDK_DEBUG=0是等效的。

ndk-build组件

它是个很小的脚本在目录NDK_ROOT/ndk-build下,用于构建NDK库。用法很简单

cd 
/ndk-build # 如果将ndk_root配置到环境变量就直接使用ndk-build

它将中间文件生成到obj/下,目标文件生成到libs/下。

ndk-build              # 编译
ndk-build clean        # 清掉二进制文件
ndk-build NDK_DEBUG=1  # 编译为可调试版的二进制文件
ndk-build NDK_DEBUG=0  # 编译为release版
ndk-build V=1          # 执行ndk-build且打印出它所执行的详细编译命令。
ndk-build -B           # 强制重新编译
ndk-build -B V=1       # -B 和 V=1 的组合
ndk-build NDK_LOG=1    # 打印出内部的NDK日志信息(用于调试NDK自己)
ndk-build NDK_APP_APPLICATION_MK=<文件路径> # 用这里指定的路径寻找Application.mk文件
ndk-build -C   # 先cd进入,然后执行ndk-build
ndk-gdb组件

使用NDK/ndk-gdb启用native调试(ndk-build时要家参数NDK_DEBUG=1)

ndk-build NDK_DEBUG=1  # 带调试信息编译
ant debug && adb install -r bin/xxx.apk  # 打包和安装
ndk-gdb --start        # 启动调试信息
附: 使用命令行创建项目

SDK根目录下执行 tools/android list targets

执行创建命令:

android create project --target  --name MyFirstApp --path /MyFirstApp --activity MyActivity --package com.example.myfirstapp
# 为第一步里展示的。
使用ant命令行打包

首先确保安装了ANT到环境,加入ANT_ROOT/bin到环境变量

android update project --name  --target  --path 
# 这样就会产生build.xml, local.properties两文件。
# 如果添加了第三方包,需要添加--subprojects参数

ant debug # 打包一个测试apk  默认使用debug key签名
ant release # 生成一个未签名和未aligned的apk(工程添加签名规则后会生成已签名apk)

adb install -r ./bin/XXX.apk  # adb 安装

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65424.html

相关文章

发表评论

0条评论

最新活动
阅读需要支付1元查看
<