Android.mk 句型和变量简介 I. 简介
Android.mk 是一种脚本语言,用于将 C/C++ 源文件粘附到 NDK 的创建文件中。
官网 Android.mk 介绍:
二、一些超基本的句型
例如,我们使用 # 表示注释,$() 表示值,:= 表示参数ndk编译 c源码编译,+= 表示追加,依此类推。
在我们学习之前,我们至少必须理解这一点。
例:
# 注释内容使用 "#" 号
# call 是调用一个系统提供的宏函数,此处是 my-dir
# $() 是取值
# := 是赋值
LOCAL_PATH := $(call my-dir)
# 我们也可以使用 ifeq 和 ifneq 进行条件判断
ifeq ($(HOST_OS, linux)
...(省略)
else
...(省略)
endif
# 使用 := 是赋值,当某一行很长时,可以使用反斜杠 换行
LOCAL_SRC_FILES := adb.c
utils.c
# 使用 += 是附加
LOCAL_SRC_FILES += $(USB_SRCS)
3. 常用变量名
例
LOCAL_PATH := $(call my-dir)
LOCAL_PREBUILT_DIR := prebuilt
# 预编译模块1
include $(CLEAR_VARS)
LOCAL_MODULE := fastcv_android
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libfastcv_android.a
include $(PREBUILT_STATIC_LIBRARY)
# 预编译模块2
include $(CLEAR_VARS)
LOCAL_MODULE := api_fastcv
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libapi_fastcv.a
include $(PREBUILT_STATIC_LIBRARY)
# 预编译模块3
include $(CLEAR_VARS)
LOCAL_MODULE := fmath_android_armv7
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libfmath_android.a
include $(PREBUILT_STATIC_LIBRARY)
# 预编译模块4
include $(CLEAR_VARS)
LOCAL_MODULE := api_fmath
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libapi_fmath.a
include $(PREBUILT_STATIC_LIBRARY)
# 目标模块
include $(CLEAR_VARS)
LOCAL_MODULE := demo
# 源文件
LOCAL_SRC_FILES := hello.cpp
world.cpp
# 额外的头文件
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(LOCAL_PREBUILT_DIR)/include
# 需要链接的系统库
LOCAL_LDLIBS := -llog -lz -L$(SYSROOT)/usr/lib/$(TARGET_ARCH_ABI) -ljnigraphics
# 一些宏定义和编译选项
LOCAL_CFLAGS := -DFASTCV_USE_ARM -DUSE_ARM
LOCAL_CFLAGS += -std=c++11
# 链接上面预编译的静态库
LOCAL_STATIC_LIBRARIES := -L$(LOCAL_PATH)/lib api_fastcv fastcv_android fmath_android api_fmath
# 编译所需要动态库
LOCAL_SHARED_LIBRARIES := face_api
# 指定生成动态库
include $(BUILD_SHARED_LIBRARY)
请注意ndk编译 c源码编译,模块始终以 include$(CLEAR_VARS) 开头,以 include$(BUILD_SHARED_LIBRARY) 结尾(这也可以是另一个编译模板,例如 BUILD_STATIC_LIBRARY)。
4. NDK 提供的功能宏
使用 $(调用) 调用函数。
下表描述了 NDK 提供的 GNUMake 函数宏。事实上,一些厂商的源代码也会提供一些多样化的功能。
————————————————
版权声明:本文为CSDN博主“A Fei__”的原创文章,根据CC4.0BY-SA版权合同,请附上原始来源链接和本声明。
原文链接:
开发环境要求
要创建 NanUI 应用程序,您的开发环境必须满足以下条件:
NanUI 依赖 CEF 和 ChromiumFX
NanUI 是基于 ChromiumFX 开发的,ChromiumFX 是 Chromium 嵌入式框架 (CEF) for .NET 的实现。
NanUI0.7的运行需要依赖ChromiumEmbeddedFramework (CEF) 77.1.18的二补代码文件以及对应版本的ChromiumFX二补代码文件。 您可以选择自动下载并编译这两个补充文件cef源码编译,也可以直接通过 Nuget 包管理器手动安装此依赖项。
自动下载或编译依赖 ChromiumEmbeddedFramework (CEF) 框架
可以从网站下载编译好的对应版本的CEF补码代码文件:
如果您有丰富的CEF开发经验,也可以按照CEF官方指南自行编译CEF框架。 您可以通过自己编译CEF框架来添加更多可定制的功能。
ChromiumEmbeddedFramework原生不支持h.264视频播放(该格式为商业格式),因此需要添加相关编译符号并重新编译CEF源码才能实现h.264格式视频播放。
ChromiumFX
您可以从ChromiumFX项目的托管网站下载77.1.18.0版本的源代码,并按照指南编译x86框架和x64框架平台下的二补代码文件:
使用 NuGet 包管理器安装依赖项
PM> Install-Package NetDimension.NanUI.Runtime
NuGet包管理器会根据你项目的结构信息,手动生成依赖项目的目录和文件结构。 不需要关注目录结构信息,这也是最快、最简单的方法。
NanUI依赖文件夹结构
对于您的项目结构,以下文档中列出了正确的 NanUI 依赖项目目录和二补文件结构。
│
└─fx
├─Resources
│ │ cef.pak
│ │ cef_100_percent.pak
│ │ cef_200_percent.pak
│ │ cef_extensions.pak
│ │ devtools_resources.pak
│ │
│ └─locales
│
│
├─x64
│ chrome_elf.dll
│ d3dcompiler_47.dll
│ icudtl.dat
│ libcef.dll
│ libcfx64.dll
│ libEGL.dll
│ libGLESv2.dll
│ natives_blob.bin
│ snapshot_blob.bin
│ v8_context_snapshot.bin
│
└─x86
chrome_elf.dll
d3dcompiler_47.dll
icudtl.dat
libcef.dll
libcfx.dll
libEGL.dll
libGLESv2.dll
natives_blob.bin
snapshot_blob.bin
v8_context_snapshot.bin
│
│ cef.pak
│ cef_100_percent.pak
│ cef_200_percent.pak
│ cef_extensions.pak
│ chrome_elf.dll
│ d3dcompiler_47.dll
│ devtools_resources.pak
│ icudtl.dat
│ libcef.dll
│ libcfx64.dll
│ libEGL.dll
│ libGLESv2.dll
│ natives_blob.bin
│ snapshot_blob.bin
│ v8_context_snapshot.bin
│
└─locales
│
│ cef.pak
│ cef_100_percent.pak
│ cef_200_percent.pak
│ cef_extensions.pak
│ chrome_elf.dll
│ d3dcompiler_47.dll
│ devtools_resources.pak
│ icudtl.dat
│ libcef.dll
│ libcfx.dll
│ libEGL.dll
│ libGLESv2.dll
│ natives_blob.bin
│ snapshot_blob.bin
│ v8_context_snapshot.bin
│
└─locales
编译NanUI源码或者使用补码包
你可以从GitHub获取NanUI的全部源码并使用VS2019编译源码cef源码编译,或者通过NuGet安装NanUI二补包。
PM> Install-Package NetDimension.NanUI
NanUI相关补码包
下表展示了NanUI项目的各个NuGet包以及相关信息。
发表评论