目录
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
历史上的今天
暂无评论...
随机推荐
[摘]Android 系统重启原因分析
前言Android重启,这种影响使用的问题必须解决和找出原因。正文以下是摘抄文章内容,略有删减。重启原因分类上层造成重启system_server被杀watchdog重启重要线程阻塞kernel造成重启空指针非法地址kernel watchdog造成重启,...
《MySQL基础教程》笔记3
前言本章主要学习对表的创建,插入,删除等操作命名。最近有空,看了《MySQL基础教程-西泽梦路》,简单的做一下笔记。记录于此,方便自己回忆。MySQL中对大小写没有区分,我这里习惯性用小些。正文我这以Window版的phpstudy软件验证。需要进入这个目录,才可以使用mysql命...
LayoutInflater之inflate()简单分析
前言简单记录一下Android中LayoutInflater中inflate()的使用以及源码的简单跟踪。记录于此,方便自己查阅。正文LayoutInflater初始化对于LayoutInflater,我们并不陌生,经常使用。//方法1LayoutInflater inflater...
梁小斌:中国,我的钥匙丢了
中国,我的钥匙丢了。 那是十多年前,我沿着红色大街疯狂地奔跑,我跑到了郊外的荒野上欢叫,后来,我的钥匙丢了。 心灵,苦难的心灵,不愿再流浪了,我想回家打开抽屉、翻一翻我儿童时代的画片,还看一看那夹在书页里的翠绿的三叶草。 而且,我还想打开...
[摘]NDK错误记录:NDK is missing a platforms directory.
前言导入NDK工程时,出现:NDK is missing a "platforms" directory记录一下,方便自己后续查阅。正文导入NDK工程的完整日志:NDK is missing a "platforms" directory.If you are using NDK,...
汪曾祺:豆腐
豆腐点得比较老的,为北豆腐。听说张家口地区有一个堡里的豆腐能用秤钩钩起来,扛着秤杆走几十里路。这是豆腐么?点得较嫩的是南豆腐。再嫩即为豆腐脑。比豆腐脑稍老一点的,有北京的“老豆腐”和四川的豆花。比豆腐脑更嫩的是湖南的水豆腐。豆腐压紧成型,是豆腐干。卷在白布层中压成大张的薄片,是豆腐片。东北叫干豆...