当前位置:首页 » 安卓系统 » androidmk编写

androidmk编写

发布时间: 2022-07-09 04:50:24

㈠ Android .mk文件 如何编译生成apk文件

应用程序源码的根目录下面,这只有在linux下用mmm交叉编译链编译的时候才用的到,eclipse下是不会生成的。

㈡ Android.mk在哪里,需要自己写吗

你是要做JNI还是在源码工程里编译
如果是JNI的话,需要在工程目录里增加jni文件夹,里面放Android.mk文件
如果是编译整个Android源码的话,需要在对应的应用目录里放Android.mk文件

㈢ 请教关于Android.mk文件,怎么写增量编译

我在mac下,是直接支持增量编译的。 win环境下可能需要配置/设置什么?,继续求解中

㈣ android.mk ubuntu怎么编译

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块。每个模块属下列类型之一:
1)APK程序,一般的Android程序,编译打包生成apk文件
2)java库,java类库,编译打包生成jar文件
3) CC++应用程序,可执行的CC++应用程序
4)CC++静态库,编译生成CC++静态库,并打包成.a文件
5)CC++共享库,编译生成共享库(动态链接库),并打包成.so, 有且只有共享库才能被安装/复制到您的应用软件(APK)包中。
(1)先看一个简单的例子:一个简单的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相应的Android.mk文件会像下面这样:

---------- cut here ------------------

普通的.mk一样

=====================================m、mm、mmm编译命令===========================================

android源码目录下的build/envsetup.sh文件,描述编译的命令
- m: Makes from the top of the tree.
- mm: Builds all of the moles in the current directory.
- mmm: Builds all of the moles in the supplied directories.

所以要想使用这些命令,首先需要在android源码根目录执行build/envsetup.sh 脚本设置环境。
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件

下面举个例子说明,假设我要编译android下的hardwarelibhardware_legacypower模块,当前目录为源码根目录,方法如下:
1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/
或者 :
1、. build/envsetup.sh
2、cd hardware/libhardware_legacy/power/
3、mm

m没有试过。默认上述两个编译命令,只编译发生变化的文件。如果要编译模块的所有文件,需要-b选项,例如mm -b或者mmm -b

make命令,也可以用来编译。如果是include $(BUILD_PACKAGE),用makeLOCAL_PACKAGE_NAME值;如果是include $(BUILD_EXECUTABLE)或者include $(BUILD_JAVA_LIBRARY),用makeLOCAL_MODULE值(未验证)。

㈤ android.mk是用什么语言写的

.mk文件一般就是MakeFile文件。MakeFile文件严格来说是一个文本文件,只不过内部制定了资源的依赖关系,更像是编译流程的说明书,内部可以调用shell脚本,实际操作是里面的shell脚本进行,Makefile只是注明了文件之间的依赖关系,然后可以通过make文件编译执行。

㈥ app android.mk 怎么写

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着,在升级NDK后,你应该得到新的toolchain/platform支持,而且不需要改变你的Android.mk文件。
先看一个简单的例子:一个简单的"hello world",比如下面的文件:
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
相应的Android.mk文件会象下面这样:
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE
:= helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------
我们来解释一下这几行代码:
LOCAL_PATH := $(call my-dir)
一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。
include $( CLEAR_VARS)
CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。
LOCAL_MODULE := helloworld
LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。
LOCAL_SRC_FILES := helloworld.c
LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。

在Android中增加本地程序或者库,这些程序和库与其所载路径没有任何关系,只和它们的Android.mk文件有关系。Android.mk和普通的Makefile有所不同,它具有统一的写法,主要包含一些系统公共的宏。
在一个Android.mk中可以生成多个可执行程序、动态库和静态库。
1,编译应用程序的模板:
#Test Exe
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
(菜鸟级别解释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。
2,编译静态库的模板:
#Test Static Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= /
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库。
3,编译动态库的模板:
#Test Shared Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= /
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
一般的和上面相似,BUILD_SHARED_LIBRARY表示编译一个静态库。
以上三者的生成结果分别在如下,generic依具体target会变:
out/target/proct/generic/obj/EXECUTABLE
out/target/proct/generic/obj/STATIC_LIBRARY
out/target/proct/generic/obj/SHARED_LIBRARY
每个模块的目标文件夹分别为:
可执行程序:XXX_intermediates
静态库: XXX_static_intermediates
动态库: XXX_shared_intermediates
另外,在Android.mk文件中,还可以指定最后的目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。
用法如:
CAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

㈦ android.mk是在什么情况下生成的

当你需要使用JNI的时候,你需要创建一个native工程。Android.mk就是一个makefile配置文件,帮你把C/C++的代码编译成动态库so的。

创建的方式有两种:

在工程根目录里手动创建一个目录叫jni,在里面新建一个Android.mk,然后创建c,cpp文件,把他们配置到Android.mk里。

右键工程,选择Android Tools->Add Native Support自动生成。



(7)androidmk编写扩展阅读:

创建Android库

Android 库在结构上与 Android 应用模块相同。可以提供构建应用所需的一切内容,包括源代码、资源文件和 Android 清单。

不过,Android 库将编译到可以用作 Android 应用模块依赖项的 Android 归档 (AAR:Android Archive Resource) 文件,而不是在设备上运行的 APK。

与 JAR 文件不同,AAR 文件可以包含 Android 资源和一个清单文件,这样,除了 Java 类与方法外,还可以捆绑布局和可绘制对象等共享资源。

库模块在以下情况下非常有用:

构建使用某些相同组件(例如 Activity、服务或 UI 布局)的多个应用。

构建存在多个 APK 变体(例如免费版本和付费版本)的应用并且需要在两种版本中使用相同的核心组件。

㈧ android studio怎么创建ndkclass.c和android.mk文件

Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件,宏函数’my-dir’, 由编译系统提供。由于一般情况下Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:
LOCAL_PATH:=$(call my-dir)
上面的语句的意思是 将LOCAL_PATH变量定义成 本文件所在 目录路径。
一个 Android.mk中 可以 定义 多个编译模块,每个编译模块 都是 以include $(CLEAR_VARS)开始
以include $(BUILD_XXX)结束

相关链接:http://blog.csdn.net/wh_19910525/article/details/7518190

㈨ android.mk简介及如何直接执行C代码

Android.mk 是Android app的编译脚本文件,一般源码才会用到。

㈩ 关于使用Android NDK时,有多个cpp和h文件,怎么写Android.mk

进群问吧,25093009

热点内容
如何更新androidstudio 发布:2025-04-06 10:22:09 浏览:651
三星手机取消加密 发布:2025-04-06 10:21:19 浏览:266
ubuntutouch编译 发布:2025-04-06 10:21:18 浏览:386
编程实话 发布:2025-04-06 10:20:31 浏览:980
超滤膜清洗剂怎么配置 发布:2025-04-06 10:13:11 浏览:975
存储过程什么时候用 发布:2025-04-06 10:12:17 浏览:37
混合型编程和 发布:2025-04-06 09:47:08 浏览:601
uc看缓存的视频 发布:2025-04-06 09:30:32 浏览:561
sql判断是否日期 发布:2025-04-06 09:29:12 浏览:316
存储过程参数空值 发布:2025-04-06 08:59:59 浏览:876