Android.mk 使用 环境 小结

转载:http://blog.csdn.net/wh_19910525/article/details/8265824

一、将无源码的 APK 和它 依赖的库预置进系统,此apk可以升级

二、

++++++++++++++++++++++++++++++

一、将无源码的 APK 和它 依赖的库预置进系统,此apk可以升级

---------- cut here ------------------LOCAL_PATH := $(call my-dir)#预置aliuyi.apkinclude $(CLEAR_VARS)LOCAL_MODULE := wwwa.apk

LOCAL_SRC_FILES := aliuyi.apkLOCAL_MODULE_TAGS:= optionalLOCAL_MODULE_CLASS :=APPSLOCAL_CERTIFICATE :=PRESIGNEDLOCAL_MODULE_PATH := $(TARGET_OUT)/appinclude $(BUILD_PREBUILT)#方法一:预置so等资源文件include $(CLEAR_VARS)LOCAL_MODULE := wanghai.soLOCAL_SRC_FILES := wanghai.soLOCAL_MODULE_TAGS := optionalLOCAL_MODULE_CLASS :=SHARED_LIBRARIESLOCAL_MODULE_PATH := $(TARGET_OUT)/lib/include $(BUILD_PREBUILT)#方法二:预置so等资源文件

include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_PREBUILT_LIBS:= sdfapk.so sdffff.soinclude $(BUILD_MULTI_PREBUILT)

#方法三:

预置so等资源文件,在Android.mk里 添加 这样一句,注意:这样的方式 如果路径不存在,这条指令 执行 失败,但 不会 报错!

$(shellcp -rf $(LOCAL_PATH)/libs/*.so $(TARGET_OUT)/lib)

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

解释:

LOCAL_MODULE指定 拷贝后的apk的名字(全名),这个变量里可以有路径,但路径也会被拷贝,创建如果

是在编译整个android的源码,这个apk必须已经添加到了PRODUCT_PACKAGES 变量里,否则 不会拷贝到,相应的位置,

LOCAL_MODULE_PATH指定拷贝的路径,如果路径不存在自己创建

LOCAL_SRC_FILES指定 源apk

LOCAL_CERTIFICATE:= PRESIGNED表示 这个apk已经签过名了,系统不需要再次 签名;

LOCAL_MODULE_CLASS指定文件类型,apk文件用APPS,并且 会检查 是否是apk文件,动态库so文件用SHARED_LIBRARIES,bin文件用EXECUTABLES,其他文件 用ETC

注意:若是被预置的apk里有so库,需要将从Test.apk的 so库拷贝到 out/target/product/xxx/system/lib/目录下,若无 so 库,则去掉此步;

方法一 只能针对 一个文件,方法二 可以 针对多个文件,但 只能 把 文件 拷贝到 system/lib/ 下,

Android提供了Prebuilt编译方法,两个文件prebuilt.mk和multi_prebuilt.mk,对应的方法宏是BUILD_PREBUILT和 BUILD_MULTI_PREBUILT。

prebuilt.mk就是prebuilt的具体实现,它是针对独立一个文件的操作,multi_prebuilt.mk 可以针对多个文件的,它对多个文件进行判断,然后调用prebuilt对独立一个文件进行处理。


http://www.cnblogs.com/langlang/archive/2012/04/23/2467037.html

LOCAL_PATH := $(call my-dir)

{

首先需要指定LOCAL_PATH变量,用于查找源文件

上面的语句的意思是将LOCAL_PATH变量定义成本文件所在目录路径

}

#Android.mk中可以定义多个编译模块,每个编译模块都是以include $(CLEAR_VARS)开始

#以include $(BUILD_XXX)结束。

include $(CLEAR_VARS)//开始

{

问: CLEAR_VARS是什么??

答: CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除除LOCAL_PATH以外的所有LOCAL_XXX变量,

如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。

}

#包含的头文件

LOCAL_C_INCLUDES += \

hardware/led/include/

LOCAL_PRELINK_MODULE :=false//:=是赋值的意思

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw

{

//LOCAL_MODULE_PATH: 最后的目标安装路径

问: TARGET_OUT_SHARED_LIBRARIES是什么?

答: 在build/core/envsetup.mk中定义。TARGET_OUT_SHARED_LIBRARIES:= $(TARGET_OUT)/lib

TARGET_ROOT_OUT:表示根文件系统。

TARGET_OUT:表示system文件系统。

TARGET_OUT_DATA:表示data文件系统。

}

LOCAL_SHARED_LIBRARIES := liblog//LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称

LOCAL_SRC_FILES := led.cpp

LOCAL_MODULE :=led.default//LOCAL_MODULE表示模块最终的名称

#LOCAL_MODULE的定义规则,led后面跟有default,led.default能够保证我们的模块总能被硬象抽象层加载到

LOCAL_MODULE_TAGS := eng

include $(BUILD_SHARED_LIBRARY)//结束

{

include $(BUILD_STATIC_LIBRARY)表示编译成静态库

include $(BUILD_SHARED_LIBRARY)表示编译成动态库。

include $(BUILD_EXECUTABLE)表示编译成可执行程序

}

LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,

LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,

LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,

LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。

hardware\led\Android.mk

include $(call all-subdir-makefiles)

frameworks\base\services\forlinx_led_jni\LedService.cpp

frameworks\base\services\forlinx_led_jni\Android.mk

{

LOCAL_PATH:= $(call my-dir)//LOCAL_PATH变量定义成本文件所在目录路径

include $(CLEAR_VARS)

# [optional, user, eng]

# eng = required

# optinal = no install on target

LOCAL_MODULE_TAGS := eng

{

LOCAL_MODULE_TAGS :=optional -->>out/target/product/OK6410/symbols/system/

LOCAL_MODULE_TAGS :=eng    -->>out/target/product/Ok6410/system/

}

# Thisisthe target being built.

LOCAL_MODULE:= libforlinx_runtime

# Target install path.

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)

# All of the source files that we will compile.

LOCAL_SRC_FILES:= \

LedService.cpp

# All of the shared libraries we link against.

LOCAL_SHARED_LIBRARIES := \

libandroid_runtime \

libcutils \

libhardware \

libhardware_legacy \

libnativehelper \

libsystem_server \

libutils \

libui \

libsurfaceflinger_client

# Also need the JNI headers.

LOCAL_C_INCLUDES += \

$(JNI_H_INCLUDE) \

hardware/led/include

# No specia compiler flags.

LOCAL_CFLAGS +=

{

LOCAL_CFLAGS += -O3 -fstrict-aliasing -fprefetch-loop-arrays

通过设定编译器操作,优化级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

LOCAL_CFLAGS += -W -Wall

LOCAL_CFLAGS += -fPIC -DPIC

LOCAL_CFLAGS += -O2 -g -DADB_HOST=1-Wall -Wno-unused-parameter

LOCAL_CFLAGS += -D_XOPEN_SOURCE -D_GNU_SOURCE -DSH_HISTORY

LOCAL_CFLAGS += -DUSEOVERLAY2

根据条件选择相应的编译参数

}

# Don't prelink this library.  For more efficient code, you may want

# to addthislibrary to the prelink map andsetthistotrue.

LOCAL_PRELINK_MODULE :=false

{

Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,

是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。程序运行时的

动态链接尤其是重定位(relocation)的开销对于大型系统来说是很大的。

动态链接和加载的过程开销很大,并且在大多数的系统上, 函数库并不会常常被更动, 每次程序被执行时所进行的链接

动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间

利用Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序

启动时的比较耗时的查询函数地址等工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。

Prelink的这种做法当然也有代价:每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保

证有效,因为新的共享库中的符号信息、地址等很可能与原来的已经不同了,这就是为什么 android framework代码一改动,

这时候就会导致相关的应用程序重新被编译。

这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。

}

include $(BUILD_SHARED_LIBRARY)

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容