怎么阅读android.mk,Android.mk介绍之二预编译生成的文件类型

Android.mk可以编译生成的文件类型:

APK : Android程序,编译生成的apk文件

Java库 : Java类库,编译打包生成的jar文件

C/C++可执行的应用程序 : 可执行的C/C++应用程序

C/C++静态库 : 编译生成的C/C++静态库,打包生成的.a文件

C/C++动态共享库 : 编译生成的共享动态库,打包生成的.so文件.

PS:有且只有动态共享库才能被安装和复制到应用软件(APK)包中.

1、编译生成APK

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

#LOCAL_MODULE_TAGS的作用如下:

#user: 指该模块只在user版本下才编译

#eng: 指该模块只在eng版本下才编译

#tests: 指该模块只在tests版本下才编译

#optional:指该模块在所有版本下都编译

LOCAL_MODULE_TAGS := optional

#本目录下所有java文件

LOCAL_SRC_FILES := $(call all-java-files-under, src)

#编译生成的应用名,生成后是Test.apk

LOCAL_PACKAGE_NAME := Test

#用Android系统的sdk版本,同时不能访问Android中隐藏的api;去了就可以访问隐藏的api

LOCAL_SDK_VERSION := current

#应用签名

#LOCAL_CERTIFICATE指apk的签名,可以有:

#testkey

#media

#platform

#shared

#如果文件已经签过名,则使用PRESIGNED。

#LOCAL_CERTIFICATE := PRESIGNED

#指定编译后存放的目录

#LOCAL_MODULE_PATH 指你要安装的apk的路径。

#$(TARGET_OUT)/priv-app这个路径下,apk不可卸载。

#$(TARGET_OUT_DATA_APPS)这个路径下apk卸载后不再恢复

#$(TARGET_OUT)/vendor/operator/app这个路径下apk卸载后恢复出厂设置可以恢复apk

LOCAL_MODULE_PATH := $(TARGET_OUT)/priv-app

#编译成apk

include $(BUILD_PACKAGE)

1. 应用签名,在mk中LOCAL_CERTIFICATE指apk的签名

可以有如下签名格式:testkey、media、platform、shared、PRESIGNED(如果签名过就用这个)

2. 指定编译后存放的目录 LOCAL_MODULE_PATH 指你要安装的apk的路径。

$(TARGET_OUT)/priv-app这个路径下,apk不可卸载

$(TARGET_OUT_DATA_APPS)这个路径下apk卸载后不再恢复

$(TARGET_OUT)/vendor/operator/app这个路径下apk卸载后恢复出厂设置可以恢复apk

3. LOCAL_MODULE_TAGS的作用如下:

user: 指该模块只在user版本下才编译

eng: 指该模块只在eng版本下才编译

tests: 指该模块只在tests版本下才编译

optional:指该模块在所有版本下都编译

2、编译生成Java库

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_MODULE := test

#BUILD_JAVA_LIBRARY编译出来的jar包,里面是DEX格式的文件

#

#目录:out/target/product/flo/system/framework/test.jar

include $(BUILD_JAVA_LIBRARY)

#BUILD_STATIC_JAVA_LIBRARY编译出来的jar包,里面每个java文件对应的class文件都单独存在,顾名思义,每个java文件里面用到的变量都被静态编译到了class内部.

#

#目录:out/target/common/obj/JAVA_LIBRARIES/test_intermediates/javalib.jar

#

#include $(BUILD_STATIC_JAVA_LIBRARY)

1、BUILD_JAVA_LIBRARY

编译处理的jar中包含的都是EDX格式的文件,dex是Android平台上(Dalvik虚拟机)的可执行文件.所以Eclipse是不可以使用的.

2、BUILD_STATIC_JAVA_LIBRARY

编译出来的jar在Eclipse中使用,但有兼容性问题.这种是编译时默认会生成的

3、编译生成C/C++可执行应用程序

#调用my-dir获取当前Android.mk的路径

LOCAL_PATH:=$(call my-dir)

#清除除了LOCAL_PATH变量之外的所有变量

#切记,此句决不可在LOCAL_PATH之前执行

include $(CLEAR_VARS)

#指定生产模块的名字

LOCAL_MODULE:=test

#指定当前编译需要的源文件

LOCAL_SRC_FILES:=main.c

#指定当前编译的格式,这里是指定生产可执行文件

include $(BUILD_EXECUTABLE)

编译后会在就会生成test,所在的目录是out/target/product/flo/system/bin/中

4、编译生成C/C++静态库

#调用my-dir获取当前Android.mk的路径

LOCAL_PATH:=$(call my-dir)

#清除除了LOCAL_PATH变量之外的所有变量

#切记,此句决不可在LOCAL_PATH之前执行

include $(CLEAR_VARS)

#指定生产模块的名字

LOCAL_MODULE:= test

#指定当前编译需要的源文件

#可以通过连接符"\",引用多个.c文件

#或者可以使用mk函数引用所有的.c文件

#LOCAL_SRC_FILES:= test.c

# LOCAL_SRC_FILES:= test.c \

test_1.c \

test_2.c

LOCAL_SRC_FILES:= $(call all-c-files-under)

#指定当前编译的格式

include $(BUILD_STATIC_LIBRARY)

生成out/target/product/flo/obj/STATIC_LIBRARIES/test_intermediates/test.a文件

导入.c文件有两种方式

1、mk中导入多个.c文件

#可以通过连接符"\",引用多个.c文件

#或者可以使用mk函数引用所有的.c文件

#LOCAL_SRC_FILES:= test.c

# LOCAL_SRC_FILES:= test.c \

test_1.c \

如果.c文件少的话可以,但太多了就不行了.麻烦.

我们可以使用mk系统函数

2、使用mk函数

LOCAL_SRC_FILES:= $(call all-c-files-under)

这样就不用每次都更改mk文件了,

5、编译生成C/C++动态共享库

在上面基础上,我们只需要修改编译格式为include $(BUILD_SHARED_LIBRARY)即可

生成后的目录: out/target/product/flo/system/lib/test.so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值