基于Android2.3.5系统:Android.mk文件解析

Android2.3.5系统编译环境的搭建与Android系统源代码情景分析例子 1. 下载Android2.3.5及期kernel 以下是参考资料: https://blog.csdn.net/hty1053240123/article/details/78333007 android2.2-8.0百度网盘 https://pan.baidu.com/s/1eRNFNLw 密码:wthp Android2.3.5版本下载 https://download.csdn.net/... 阅读详情
***************************************************************************************************************************
作者:EasyWave                                                                                                               时间:2015.01.23
类别:Android系统源码分析-基于Android2.3.5系统:Android.mk文件解析           声明:转载,请保留链接
注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

一:Android.mk文件简单介绍

        在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,即指导编译器如何来编译程序,并决定编译的结果是什么。当然在Linux对于大项目而言手工编写Makefile文件是很可怕的一件事,因此出现了automake,autoconf这类工具,而在Android下的Android.mk文件也是这种类似的功能,即Android.mk文件是针对Android的Makefile的文件。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。其它就交给Android的编译系统啦。


二:Android.mk的整体结构 

    Android.mk的结构,这里采用android2.3.5/frameworks/base/core/jni/Android.mk为例,如下所示:

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

LOCAL_CFLAGS += -DHAVE_CONFIG_H -DKHTML_NO_EXCEPTIONS -DGKWQ_NO_JAVA
LOCAL_CFLAGS += -DNO_SUPPORT_JS_BINDING -DQT_NO_WHEELEVENT -DKHTML_NO_XBL
LOCAL_CFLAGS += -U__APPLE__

ifeq ($(TARGET_ARCH), arm)
	LOCAL_CFLAGS += -DPACKED="__attribute__ ((packed))"
else
	LOCAL_CFLAGS += -DPACKED=""
endif

ifeq ($(WITH_JIT),true)
	LOCAL_CFLAGS += -DWITH_JIT
endif

ifneq ($(USE_CUSTOM_RUNTIME_HEAP_MAX),)
  LOCAL_CFLAGS += -DCUSTOM_RUNTIME_HEAP_MAX=$(USE_CUSTOM_RUNTIME_HEAP_MAX)
endif

LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES

LOCAL_SRC_FILES:= \
	ActivityManager.cpp \
	AndroidRuntime.cpp \
	CursorWindow.cpp \
	Time.cpp \
	com_google_android_gles_jni_EGLImpl.cpp \
	com_google_android_gles_jni_GLImpl.cpp.arm \
	android_app_NativeActivity.cpp \
	android_opengl_GLES10.cpp \
	android_opengl_GLES10Ext.cpp \
	android_opengl_GLES11.cpp \
	android_opengl_GLES11Ext.cpp \
	android_opengl_GLES20.cpp \
	android_database_CursorWindow.cpp \
	android_database_SQLiteCompiledSql.cpp \
	android_database_SQLiteDebug.cpp \
	android_database_SQLiteDatabase.cpp \
	android_database_SQLiteProgram.cpp \
	android_database_SQLiteQuery.cpp \
	android_database_SQLiteStatement.cpp \
	android_emoji_EmojiFactory.cpp \
	android_view_Display.cpp \
	android_view_Surface.cpp \
	android_view_ViewRoot.cpp \
	android_view_InputChannel.cpp \
	android_view_InputQueue.cpp \
	android_view_KeyEvent.cpp \
	android_view_MotionEvent.cpp \
	android_text_AndroidCharacter.cpp \
	android_text_AndroidBidi.cpp \
	android_text_KeyCharacterMap.cpp \
	android_os_Debug.cpp \
	android_os_FileUtils.cpp \
	android_os_MemoryFile.cpp \
	android_os_MessageQueue.cpp \
	android_os_ParcelFileDescriptor.cpp \
	android_os_Power.cpp \
	android_os_StatFs.cpp \
	android_os_SystemClock.cpp \
	android_os_SystemProperties.cpp \
	android_os_UEventObserver.cpp \
	android_net_LocalSocketImpl.cpp \
	android_net_NetUtils.cpp \
	android_net_TrafficStats.cpp \
	android_net_wifi_Wifi.cpp \
	android_net_ethernet.cpp \
	android_nio_utils.cpp \
	android_nfc_NdefMessage.cpp \
	android_nfc_NdefRecord.cpp \
	android_pim_EventRecurrence.cpp \
	android_text_format_Time.cpp \
	android_security_Md5MessageDigest.cpp \
	android_util_AssetManager.cpp \
	android_util_Binder.cpp \
	android_util_EventLog.cpp \
	android_util_Log.cpp \
	android_util_FloatMath.cpp \
	android_util_Process.cpp \
	android_util_StringBlock.cpp \
	android_util_XmlBlock.cpp \
	android/graphics/AutoDecodeCancel.cpp \
	android/graphics/Bitmap.cpp \
	android/graphics/BitmapFactory.cpp \
	android/graphics/Camera.cpp \
	android/graphics/Canvas.cpp \
	android/graphics/ColorFilter.cpp \
	android/graphics/DrawFilter.cpp \
	android/graphics/CreateJavaOutputStreamAdaptor.cpp \
	android/graphics/Graphics.cpp \
	android/graphics/Interpolator.cpp \
	android/graphics/LayerRasterizer.cpp \
	android/graphics/MaskFilter.cpp \
	android/graphics/Matrix.cpp \
	android/graphics/Movie.cpp \
	android/graphics/NinePatch.cpp \
	android/graphics/NinePatchImpl.cpp \
	android/graphics/Paint.cpp \
	android/graphics/Path.cpp \
	android/graphics/PathMeasure.cpp \
	android/graphics/PathEffect.cpp \
	android_graphics_PixelFormat.cpp \
	android/graphics/Picture.cpp \
	android/graphics/PorterDuff.cpp \
	android/graphics/BitmapRegionDecoder.cpp \
	android/graphics/Rasterizer.cpp \
	android/graphics/Region.cpp \
	android/graphics/Shader.cpp \
	android/graphics/Typeface.cpp \
	android/graphics/Utils.cpp \
	android/graphics/Xfermode.cpp \
	android/graphics/YuvToJpegEncoder.cpp \
	android_media_AudioRecord.cpp \
	android_media_AudioSystem.cpp \
	android_media_AudioTrack.cpp \
	android_media_JetPlayer.cpp \
	android_media_ToneGenerator.cpp \
	android_hardware_Camera.cpp \
	android_hardware_SensorManager.cpp \
	android_debug_JNITest.cpp \
	android_util_FileObserver.cpp \
	android/opengl/poly_clip.cpp.arm \
	android/opengl/util.cpp.arm \
	android_bluetooth_HeadsetBase.cpp \
	android_bluetooth_common.cpp \
	android_bluetooth_BluetoothAudioGateway.cpp \
	android_bluetooth_BluetoothSocket.cpp \
	android_bluetooth_ScoSocket.cpp \
	android_server_BluetoothService.cpp \
	android_server_BluetoothEventLoop.cpp \
	android_server_BluetoothA2dpService.cpp \
	android_server_Watchdog.cpp \
	android_message_digest_sha1.cpp \
	android_ddm_DdmHandleNativeHeap.cpp \
	com_android_internal_os_ZygoteInit.cpp \
	com_android_internal_graphics_NativeUtils.cpp \
	android_backup_BackupDataInput.cpp \
	android_backup_BackupDataOutput.cpp \
	android_backup_FileBackupHelperBase.cpp \
	android_backup_BackupHelperDispatcher.cpp \
	android_content_res_ObbScanner.cpp \
    android_content_res_Configuration.cpp

LOCAL_C_INCLUDES += \
	$(JNI_H_INCLUDE) \
	$(LOCAL_PATH)/android/graphics \
	$(call include-path-for, bluedroid) \
	$(call include-path-for, libhardware)/hardware \
	$(call include-path-for, libhardware_legacy)/hardware_legacy \
	$(LOCAL_PATH)/../../include/ui \
	$(LOCAL_PATH)/../../include/utils \
	external/skia/include/core \
	external/skia/include/effects \
	external/skia/include/images \
	external/skia/src/ports \
	external/skia/include/utils \
	external/sqlite/dist \
	external/sqlite/android \
	external/expat/lib \
	external/openssl/include \
	external/tremor/Tremor \
	external/icu4c/i18n \
	external/icu4c/common \
	external/jpeg \
	frameworks/opt/emoji

LOCAL_SHARED_LIBRARIES := \
	libexpat \
	libnativehelper \
	libcutils \
	libutils \
	libbinder \
	libnetutils \
	libui \
	libgui \
	libsurfaceflinger_client \
	libcamera_client \
	libskiagl \
	libskia \
	libsqlite \
	libdvm \
	libEGL \
	libGLESv1_CM \
	libGLESv2 \
	libETC1 \
	libhardware \
	libhardware_legacy \
	libsonivox \
	libcrypto \
	libssl \
	libicuuc \
	libicui18n \
	libmedia \
	libwpa_client \
	libjpeg \
	libnfc_ndef

ifeq ($(BOARD_HAVE_BLUETOOTH),true)
LOCAL_C_INCLUDES += \
	external/dbus \
	system/bluetooth/bluez-clean-headers
LOCAL_CFLAGS += -DHAVE_BLUETOOTH
LOCAL_SHARED_LIBRARIES += libbluedroid libdbus
endif

ifneq ($(TARGET_SIMULATOR),true)
LOCAL_SHARED_LIBRARIES += \
	libdl
  # we need to access the private Bionic header
  # <bionic_tls.h> in com_google_android_gles_jni_GLImpl.cpp
  LOCAL_CFLAGS += -I$(LOCAL_PATH)/../../../../bionic/libc/private
endif

LOCAL_LDLIBS += -lpthread -ldl

ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(TARGET_OS)-$(TARGET_ARCH),linux-x86)
LOCAL_LDLIBS += -lrt
endif
endif

ifeq ($(WITH_MALLOC_LEAK_CHECK),true)
	LOCAL_CFLAGS += -DMALLOC_LEAK_CHECK
endif

LOCAL_MODULE:= libandroid_runtime

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))

      首先必须定义好LOCAL_PATH变量。然后清除所有LOCAL_XX变量的值,当然LOCAL_PATH的值除外,然后定义源文件,头文件,接着是编译选项参数,紧接着是编译生成的文件名,最后是生成的文件类型。


三:Android.mk的变量定义

 3.1:LOCAL_PATH 
一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。例如: 
LOCAL_PATH:= $(call my-dir)   宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录) 


3.2:include $( CLEAR_VARS) 
宏CLEAR_VARS 由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。 


3.3:LOCAL_SRC_FILES 
本次需要编译的源文件,如下所示:

LOCAL_SRC_FILES:= \
ActivityManager.cpp \
AndroidRuntime.cpp \
CursorWindow.cpp \
Time.cpp \ 

        以下省略.....

     
3.4:LOCAL_SHARED_LIBRARIES 
本次编译需要链接的动态链接库文件,即.so文件 


3.5:LOCAL_STATIC_LIBRARIES 
静态链接库. 


3.6:LOCAL_C_INCLUDES 
    本次编译需要包含的头文件,一个相对于当前目录可选的路径名单,当编译所有的源文件(C,C++和汇编)时,它将被添加进include搜索路径,如下所示: 
     LOCAL_C_INCLUDES := include/ui 
     或者甚至: 
     LOCAL_C_INCLUDES := $(LOCAL_PATH)/../ui 

     具体的写法 如下所示:

LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE) \
$(LOCAL_PATH)/android/graphics \
$(call include-path-for, bluedroid) \
$(call include-path-for, libhardware)/hardware \
$(call include-path-for, libhardware_legacy)/hardware_legacy \
$(LOCAL_PATH)/../../include/ui \
$(LOCAL_PATH)/../../include/utils \
external/skia/include/core \
external/skia/include/effects \
external/skia/include/images \
external/skia/src/ports \
external/skia/include/utils \
external/sqlite/dist \
external/sqlite/android \
external/expat/lib \
external/openssl/include \
external/tremor/Tremor \
external/icu4c/i18n \
external/icu4c/common \
external/jpeg \
frameworks/opt/emoji

        以下省略.....


3.6:LOCAL_LDLIBS 
本次编译的链接选项,相当于gcc -l后的参数 


3.7:LOCAL_CFLAGS 
同样是编译选项,相当于gcc -O后面的参数 


3.8:LOCAL_MODULE 
生成的模块名,这个变量必须定义,表示make后将要生成的文件的名字 

四: Android.mk文件中include用法 

     include可Android多以这样的形式出现,如:include $( CLEAR_VARS),include $(BUILD_SHARED_LIBRARY).其实这个include可以理解成"执行"的意思,那么执行什么呢?当然是看后边的宏了。 宏CLEAR_VARS已经在3.2节中介绍过了,表示清除一些变量. 宏BUILD_SHARED_LIBRARY表示生成共享库,即生成.so文件,同样类型的宏如下: 
CLEAR_VARS                                     清除LOCAL_xxx变量 
BUILD_SHARED_LIBRARY              在/system/lib/目录下生成lib$(LOCAL_MOUDULE).so文件 
BUILD_STATIC_LIBRARY                生成lib$(LOCAL_MOUDULE).a文件 
BUILD_EXECUTABLE                       在/system/bin/目录下生成可执行文件 
BUILD_PACKAGE                              编译成一个apk文件


五:总结

      简单的介绍了Android.mk的用法,还在熟悉的过程中,或多或少会出现学习过程中的错误。


AOSP 编译配置:深入解析 Android.mk 和 Android.bp 基础篇.系统 mk_bp 讲解📢 1. 职业规划篇📢 2.基础篇📢 3. 系统应用篇📢 4. 系统篇📢 5. 性能篇(省)低内存优化(稳)稳定性优化(快)开机优化framework交流,答疑:251662478🔹 一、Android.mk 文件介绍Android.mk 是 AOSP 传统的 Makefile 文件,主要用于描述 如何编译可执行文件、共享库、静态库和 APK。📌 Android.mk 结构🔹 二、mk 文件中重要的编译规则。 阅读详情

相关推荐

Android 编译文件简述(Android.mk)

Android.mk 文件是 Android 构建系统中的一种构建配置文件,使用 GNU Make 语法,用于定义 Android 项目中的模块、库、应用程序、JNI 代码等的编译和链接方式。每个 Android.mk 文件通常对应一个目录,代表构建系统应该如何处理该目录下的源码,常见的构建模块包括应用程序、库和 JNI 本地代码模块。

weixin_35723192的博客 835

基于android2.3.5系统:源码下载及android体系架构

先熟悉整个android的架构,弄明白android系统的各个组件的分布以及代码分析,并将学习过程放在我的blog上。到时候可以回过头来看看,自己到底得到了什么。主要是没有钱去卖开发板,因此只能用goldfish的代码来了解和分析android与内核之间的硬件抽象层的关系,因为在整个android的移植过程中,硬件抽象层是最重要的,毕竟它是android和linux内核的中间桥梁。

嵌入式与人工智能天地 1万+

安卓手机系统2.3.5ROOT权限获得

想要获取Android手机ROOT权限吗? 拿到新机,总有不少系统定制的软件。无用,还删不了。 这时只有ROOT了。就是获取最高权限。安卓2.3.3以上版本我试了很多方法。终于还是成功破解。 不多说,首先在电脑上装上豌豆荚,手机连接电脑。在虚礼光盘中只装手机驱动。这样就可以连接电脑了。 然后解压并安装APK软件里的Superuser.apk,接着解压出来Root.bat到电脑双击运行,按提示操作,操作完后手机会自动重启,重启后机器就得到ROOT权限了,这样你能删除手机内置的一些没用软件,只要你照做就能成功。

【转】OpenGL ES EGL & TLS(线程局部存储) & G3D

原文地址http://hi.baidu.com/snownight/blog/item/366eb07e20e087340cd7da8f.html OpenGL ES 报告(2)作者:雪夜刀手 http://hi.baidu.com/snownight1. 什么是EGLEGL是用来管理绘图表面的(Drawing surfaces),并且提供了如下的机制(1) 与本地窗口系统进行通信(2) 查找绘图...

weixin_34262482的博客 298

安卓 2.3.5 rom

安卓 索爱x8 系统 安卓 2.3.5 rom

链式中介效应结果解读:从Bootstrap置信区间到实践意义

本文深入解析链式中介效应结果的解读方法,从Bootstrap置信区间的应用到实践意义的阐述。通过实际案例展示如何分析总效应、直接效应和间接效应,并强调效应量评估的重要性。文章还提供了构建逻辑解释的三步法,以及敏感性分析和报告撰写的实用技巧,帮助研究者准确解读链式中介效应。

weixin_33690367的博客 718

基于android2.3.5系统:开天辟地Android启动机制[四]

在我的博文基于android2.3.5学习之:开天辟地Android启动机制[三]中,详细的介绍了ueventd的解析机制,在分析andriod2.3.5中的action_list、action_queue、service_list,之前,还是先来详细介绍在Andriod是如何调用内核中的一些函数,比如:chown以及chroot等等。

嵌入式与人工智能天地 2362

双RTX 3090实战:如何用vLLM低成本部署Qwen2.5-14B大模型(附避坑清单)

本文详细介绍了如何利用双RTX 3090显卡低成本部署Qwen2.5-14B大模型的完整指南,包括硬件选型、环境配置、vLLM优化及生产环境调优。重点解析了BF16混合精度在显存占用与推理质量上的平衡策略,并提供了实用的避坑清单和性能调优技巧,帮助开发者高效实现大模型部署。

pz890123456的博客 698

android+5系统,Android2.3.5系统+华为UI

好的系统需要一个好的屏幕来展示,因此在说系统之前我们还是先简单说下华为U8860采用的屏幕吧。该机采用的是长宽16:9的TFT面板,分辨率为854x480可以获得良好的互联网体验。同时该机采用了半透膜技术,在保证屏幕透光率的同时确保了在强光下能够正常显示。因此实际的体验效果来看华为U8860的现实效果也是非常的出色,无论是强光下还是正常室内灯光,现实效果都非常不错,配合多点触控的屏幕UI界面运行的...

weixin_42514752的博客 292

STM32 使用IO口模拟I2C时序

上一篇《I2C协议详解》 我们了解了I2C的操作流程,这一篇,我们就使用I2C,来对EEPROM进行操作吧。 我们做两种选择: 1.时序由IO口模拟高低电平,需要了解协议并按照协议操作相应的IO口。 2.时序由硬件自行产生,不需要人工干预; 由硬件产生的I2C时序,我们借助Stm32Cube配置实现便可,我们这一篇,抛开Stm32Cube,手撕代码,根据I2C的时序,一步步地实现I2C对...

8935

机器视觉:9点标定的原理与实现

标定就是将机器视觉处理得到的像素坐标转换成实际项目中使用到的毫米坐标。简单说即使看看实际单位距离内有几个像素,如下图所示,10mm的距离内有222个像素,那像素坐标和实际的毫米坐标就有个比例关系了。

m0_49968063的博客 1万+

Android.mk解析与使用

简单介绍 Android.mk 文件的编写,一些常见变量的配置解析

hejnhong的博客 1万+

LabVIEW电压信号采集系统:从零搭建到科研实战

本文详细介绍了如何从零开始搭建一个基于LabVIEW的电压信号采集系统。内容涵盖硬件选型(如NI USB-6002数据采集卡)、软件环境配置、核心程序开发(包括多通道同步采集、数据自动保存)以及高级功能优化。系统支持自定义采样率与时长,并提供了完整的LabVIEW程序框图和配套的Python数据分析脚本,旨在帮助科研人员和工程师快速构建稳定、高效的专属数据采集方案,提升实验自动化水平。

gold8的专栏 460

安卓编译android.mk,详解安卓系统中的Android.mk文件

概述 Android.mk文件用来向编译系统描述如何编译你的源代码。更确切地说,该文件其实就是一个小型的Makefile。由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析。这个文件的语法允许把源代码组织成模块,每个模块属于下列类型之一:APK程序:一般的Android程序,编译打包生成apk文件。JAVA库:java类库...

weixin_34862561的博客 1442

Pentaho安装与配置

Pentaho安装与配置前言一、下载二、配置1.JDK环境2.添加mysql-jdbc驱动三、启动 前言 Pentaho Data Integration (PDI):前身是Kettle。Pentaho提供了提取、转换和加载(ETL)功能,该功能使用统一且与最终用户和物联网技术相关且可访问的格式简化了捕获、清理和存储数据的过程。 功能:提供报表的制作、分析、仪表板、数据集成、数据采集、商业智能平台等强大功能。 一、下载 官网地址:http://www.pentaho.com/ 不过已经访问不到了

小太阳DENGJIE的博客 3598

C#上位机实战:借助NetToPLCSim与西门子S7-1200仿真通信全攻略

本文详细介绍了如何使用C#开发上位机程序,通过NetToPLCSim与西门子S7-1200进行仿真通信的全过程。从环境准备、PLC仿真环境搭建、网络配置到C#代码实现,提供了完整的实战指南和常见问题解决方案,帮助开发者快速掌握工业自动化通信技术。

weixin_30596343的博客 440

浅析Android下的Android.mk文件

1 概述         大家都知道在Linux下编辑经常要写一个Makefile文件, 可以把这个Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。而在Android下的Android.mk文件也是类型的功能,顾名思义,从名字上就可以猜测得到,Android.mk文件是针对Android的Makefile文件.具体来

放飞梦想,成就未来 2万+

【AUTOSAR-DCM】-3.1-将CDD导入CFG并查看$22服务配置变化(UDS诊断DID带一个Data)

案例背景:(共8页精讲) 在《【UDS诊断描述文件CDD】-3.2-编辑CDD给$22服务创建一个带一个Data的DID(dataIdentifier)数据标识符》中,适应使用CANdela Studio在CDD中创建一个带一个Data的DID(dataIdentifier)数据标识符,见图0-1。现在我们将该CDD文件导入到CFG(DaVinci Configurator),看看配置会发生哪些变化。 图0-1 目录 1 将诊断描述文件CDD导入CFG(DaVinci Configurator.

「汽车电子助手」的博客 1630

深度解析Android.mk文件:从原理到实战

这是一个Android NDK构建配置文件(Android.mk),用于编译生成名为libmynative.so的动态库。文件定义了编译参数、源文件(mynative.cpp和helper.c)、头文件路径(inc和third/inc目录)以及链接的系统库(log和android)。编译选项指定了C99和C++17标准,并添加了调试信息(-g)。最后通过BUILD_SHARED_LIBRARY指令生成共享库。整个流程包括路径设置、变量清除、模块定义、编译参数配置、依赖库链接和最终构建。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 893

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android.mk 编译c语言,详解安卓系统中的Android.mk文件

概述 Android.mk文件用来向编译系统描述如何编译你的源代码。更确切地说,该文件其实就是一个小型的Makefile。由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析。这个文件的语法允许把源代码组织成模块,每个模块属于下列类型之一:APK程序:一般的Android程序,编译打包生成apk文件。JAVA库:java类库...

weixin_39603469的博客 1053

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NDK之Android.mk文件

前面文章讲了NDK环境的配置,这篇文章将介绍NDK在编译过程中会使用到的Android.mk文件。    1.mk文件简介     我们可以在Android源码的很多目录下看到Android.mk文件,Android.mk文件向系统描绘编译的一些规则,这样可以通过一些简单的命令,完成代码的组织和编译工作。Android.mk是GNU Makefile的一小部分,编译系统会解析该文件。在Andr

chewbee的专栏 1313

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android中的Android.mk文件解析

在Android开发过程中,遇

ljtyzhr的专栏 849

Android MK文件

1、什么是Android.mk文件? 2、Android.mk文件层级 3、Android.mk文件样式 3.1、vendor/mediatek/proprietary/hardware/mtkcam/main/hal/devicemgr/Android.mk $(info devicemgr: HAL Version=$(CAMERA_HAL_VERSION)) ifneq ($(CAMERA_HAL_VERSION), 3) LOCAL_PATH := $(call my-dir) ####

Cam_韦的博客 1010

安卓main.mk解析

分类: 操作系统/ Windows/ 文章 一、概述        自Android开源以来,引起了嵌入式行业一股热潮,很多嵌入式开发者表示对Android有很强的兴趣,并下载Android源码进行编译和移植。Android源码的巨大(repo下来,大概2G)给人以Android相当复杂的错觉。本文从Android编译系统的角度,让大家了解Android其实也是很纯真的。      An

liusongliang68的专栏 2335

Android NDK构建系统:Android.mk与Application.mk详解

在Android NDK开发中,构建系统是连接C/C++代码与Android平台的关键桥梁。Android.mk作为Makefile片段,定义了源文件编译规则和模块生成方式;Application.mk则负责项目级配置,如ABI架构选择和STL版本控制。这两种文件共同构成了NDK传统构建系统的核心,尤其适合维护历史项目或需要精细控制构建流程的场景。随着CMake成为官方推荐工具,理解这些基础构建文件的工作原理,不仅能帮助开发者解决兼容性问题,还能为过渡到现代构建系统打下坚实基础。本文通过实际案例,深入解析多

weixin_30536513的博客 457

2 Android.mk基本语法及示例

Android.mk基本语法及示例

u012906122的专栏 3432
上一篇: WiFi-Audio需要实现的功能简介
下一篇: 基于Android2.3.5系统:JNI与HAL实例解析[一]
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值