下载网址升级紧急通知最新全包升级

个性化升级包-699全包装修-互联网家装-盛世乐居
400-
智能家居包
所谓的智能家居, 其实是一个居住环境, 是以住宅为平台安装有智能家居系统的居住环境。你想过吗,一个遥控器就能控制家中所有的电器
清晨,卧室的窗帘能自动开启,伴随悠扬的音乐,开启一天美好的生活;忙碌了一天,下班路上可以预先开启空调或热水器……
砌筑工程包
砌墙:120-240mm厚
149-215元/㎡
轻质砌墙,双面粉刷,水泥砂浆双面抹灰
粉刷:17元/㎡
采用轻质砖砌体,水泥砂浆单面抹灰
砌体包管(单管/双管):273~387/根
1、用轻质砖砌墙;水泥砂浆单面抹灰 2、工程量按跟计算,标准长度为2600mm,超出部分按105-149元/米
木工造型项目
轻钢龙骨纸面石膏板平顶:106元/m
轻钢龙骨或木龙,面层石膏板(灯具另计)
石膏板直线型造型顶:118元/m
1、轻钢龙骨或木龙;面层石膏板,限宽400mm内,每超50mm单价增10%; 2、成品石膏线安装 24元/m; 3、石膏板叠级角线39元/m(限宽80mm内)
窗帘盒:96元/m
平窗木窗套:133元/m
1、窗帘盒宽200mm高150mm内;2、平窗木窗套单层15mm木芯板基
泥工工程包
地面回填:79元/㎡
1、固定水管,采用渣土、碎石料回填;2、水泥砂浆找平
墙面、地面防水处理:69元/㎡
1、柔性防水满刷;
2、地面向上30cm,浴缸、浴房地面向上180cm; 3、闭水试验
墙、地面瓷砖铺贴:58~152元/㎡
1、水泥砂浆铺贴;2、含瓷砖(指定品牌)3、错缝、斜向、拼花铺贴 +45元/㎡
水泥砂浆地面找平:39/㎡
水泥砂浆找平;厚度为30mm,厚度每增加5mm单价增加5元
油漆工程包
墙面找平增加费:18元/㎡
墙面平顺差超过10mm,需增加的费用 / 膏灰、胶水找平 / 工程量按投影面积计算
乳胶漆调色:198元/项
乳胶漆调色增加费 / 全房标配2种颜色(含白色) / 按增加颜色计算
水电工程包
增加电路:458元/路
1、采用BV强电铜芯线
2、采用“秋叶原”弱电线;3、采用天力PVC管线管
增加水路:458元/路
1、给水管天力PPR管,热熔连接,压力测试;2、排水管天力PVC管,粘接
增加插座、开关:45元/个
地插135元/套
强、弱电箱安装:100元/套 (安装人工费;不含强电箱/弱电箱)
机械打洞:直径≤12cm 70-85元/个
专业机械打孔,混凝土打孔增加15元
木工工程包
生态板(不含门)&&579元/㎡
(平板门)739元/㎡
生态板框架,专用背板及收边条; 高600mm以内、厚500mm以内;
横向隔板3-4层; 抽屉最多不超过2个; 超出每个另计80元;
平板柜门含弹簧铰链,抽屉滑轨,不含拉手
生态板(不含门)&&596元/㎡
(平板门)745元/㎡
生态板框架,专用背板及收边条; 高400mm以内、厚500mm以内;
横向隔板3-4层; 抽屉最多不超过2个; 超出每个另计80元;平板柜门含弹簧铰链,抽屉滑轨,不含拉手
生态板(不含门)&&589元/㎡
生态板框架,专用背板及收边条;柜体深度400mm以内;
横向隔板3-4层;抽屉最多不超过2个;超出每个另计80元;含弹簧铰链,抽屉滑轨,不含拉手
无门衣柜&&499元/㎡
平板门衣柜699元/㎡
移门劲爆特价(9款可选)399元/㎡
E0级防潮实木颗粒板柜体,18mm厚立板横板,5mm背板,
扣条封边;柜体深度600mm内;柜体标配3个抽屉;包含挂衣钩、挂衣杆等配件
无门鞋柜&&399元/㎡
平板门鞋柜599元599元/㎡
E0级实木颗粒板柜体,18mm厚立板横板,5mm厚背板,扣条封边;
柜体含移门,标准深度400mm内,含五金配件
无门书柜&&366元/㎡
平板门书柜566元/㎡
E0级实木颗粒板柜体,18mm厚立板横板,5mm厚背板,
扣条封边; 柜体含移门,标准深度400mm内,含五金配件
吊柜: 无门吊柜
平板门吊柜
生态板框架,专用背板及收边条;高650mm以内、厚500mm以内;横向隔板3-4层; 抽屉最多不超过2个; 超出每个另计80元;平板柜门含弹簧铰链,不含拉手
酒柜: 无门酒柜 366元/㎡
平板门酒柜 566元/㎡
E0级实木颗粒板柜体,18mm厚立板横板,5mm厚背板,扣条封边;柜体深度400mm内,含五金配件;酒架另收200元工艺费;平板门酒柜含移门;包送货安装及售后(行政中心城区外另加收远程费)
木工工程背景墙
A套餐:1799元/套
120mm宽木芯板打底石膏板饰面乳胶漆线条内外边框墙面墙纸/海基布饰面(超出13㎡,另加299元/㎡)
B套餐:2499元/套
局部木芯板基层石膏板饰面,成品石膏线条乳胶漆造型;墙面墙纸;(超出13㎡,另加299元/㎡)
C套餐:2499元/套
左侧及上部局部木芯板,基层贴玻璃马赛克石膏线条 右侧木芯板基层石膏板饰面乳胶漆;墙面乳胶漆,上部层板(超出13㎡,另加299元/㎡)
D套餐:2499元/套
局部木芯板基层板,白色烤漆饰面; 墙面贴墙纸,含射灯(超出13㎡,另加299元/㎡)
E套餐:2499元/套
中部木芯板基层石膏板造型;墙面艺术墙纸 (超出13㎡,另加299元/㎡)
F套餐:2499元/套
局部木芯板基层,烤漆饰面;墙面墙纸,含灯带(超出13㎡,另加299元/㎡)
G套餐:1799元/套
造型石膏线条饰边;墙面墙纸/彩色乳胶漆 (超出13㎡,另加299元/㎡)
H套餐:2499元/套
局部木芯板基层石膏板造型墙面乳胶漆暗藏灯槽,银镜装饰;墙面墙纸,含灯带 (超出13㎡,另加299元/㎡)
I套餐:3999元/套
木芯板基层饰面板柜体;墙面乳胶漆(超出13㎡,另加299元/㎡)
安装工程包
主灯安装(不含灯具及配件)
2房2厅及以下每户300元; 3房3厅及以下每户450元;
4房2厅及以下每户500元;别墅、复式楼每户750元
浴缸安装:300元/套
安装洁具人工费(不含浴缸)
1、灯带、射灯安装:12元、37元/套、只 2、拖把池、龙头安装:175元、43元/个
木地板安装
单一空间置换(卧室空间)12元/㎡,
(全房置换) 23元/㎡均为正铺,地板下铺设防潮垫,不打龙骨
单一空间置换(卧室空间)12元/㎡,
(全房置换) 23元/㎡均为正铺,地板下铺设防潮垫,不打龙骨
单一空间置换(卧室空间)40元/㎡,
(全房置换) 80元/㎡;均为正铺,地板下铺设防潮垫,不打龙骨
单一空间置换(卧室空间)40元/㎡,
(全房置换) 80元/㎡;均为正铺,地板下铺设防潮垫,不打龙骨
内装门安装
门安装:560元/樘
双面门套120元/m,单面门套、窗套90元/m 其它处门套按70元/m计算,单面门套、窗套50元/m
安装成品门套
门套:单面 138元/m 双面 188元/m 推拉门:640元/㎡
衣柜门制作安装
衣柜移门:300元/㎡
浴室柜安装
YSG-04(G-)实木系列 300元/套
YSG-05(G-1221-80) 实木系列
YSG-06(G-1167-50) 实木系列
(费用为升级费,支付该费用可升级至对应产品)
坐便器安装
WYZB-03 (C-6688) 虹吸式连体坐便器 200元/个
WYZB-04(C-6703)连体座便器
(费用为升级费,支付该费用可升级至对应产品)
WYHS-03(ML-95718)花洒
180元/套 WYHS-04(ML-1019)花洒 230元/套
(费用为升级费,支付该费用可升级至对应产品)
备注:个性化U+包价格以实际评估后报价为准,详情可咨询客服人员
总部地址:武汉市江汉区泛海国际soho城4栋23层
武汉总部/分公司 地址:武汉江汉区泛海国际SOHO城4栋23层
电话:400-
时间:周一至周日 9:00-21:00
Android APP下载
iOS APP下载金螳螂·家升级布局“互联网+” 创新推出全包套餐2.0--百度百家
金螳螂·家升级布局“互联网+” 创新推出全包套餐2.0
分享到微信朋友圈
金螳螂·家表示会从解决消费者痛点出发,打造全新的家装生态链,促进装修行业告别信任危机,为消费者带去时尚、科技、环保和品质的产品和服务,让消费者拥有更好的家装服务体验。
人民网讯 2016年,随着央行连续降息、降准等利好政策的出台,使得房产市场涌现出大量需求的置业者,这些消费者群体对于住宅装修上也有众多要求。面对消费者日益增长的个性需求与标准化之间的矛盾,2016年将成为互联网家装产品迭代、城市扩张、落地执行的关键一年。但在实际业务发展中,如何更好地满足消费者的个性需求,金螳螂·家做出了有益的探索。
满足消费者个性需求 产品更灵活
中国人民银行2月29日发布决定称,自日起,普遍下调金融机构人民币存款准备金率0.5个百分点,以保持金融体系流动性合理充裕,引导货币信贷平稳适度增长,为供给侧结构性改革营造适宜的货币金融环境。此番举措,对刺激房产去库存、刺激家居行业消费、提升家装标准来说都具有积极意义。
然而,家装行业存在太多痛点早已是老生常谈的话题,工期不可控、施工质量不可控、增减项目等,可谓暗坑不断。互联网家装的兴起,标准化产品的推出,逐渐改变家装行业的不透明现象,但消费者日益增长的需求与标准化产品之间的矛盾却愈加明显。察觉这一市场反应,金螳螂·家,针对消费者的需求,创新推出“全包套餐2.0”,即“3+1+N”模式的产品包,突出个性化,给予消费者更多选择权:“3”是指3个基准包、3个厨房包、6个卫浴包,消费者在选定基准包后可以根据需求自由搭配不同档次的厨房包、卫浴包,54种产品组合方式,让消费者在享受方便、快捷的同时,也让消费者的家更具“个性化”;“1”是个性包,结合金螳螂多年设计和施工积淀的宝贵经验与创新理念,将“金”标准植入千家万户的装修个性需求之中;N是指软装包、智能包、家具包、舒适包、家电包等。
此外,在现有的产品包中,消费者也可以看到金螳螂·家在人性化、个性化方面的细节处理:小厨宝、床头USB插座、客餐厅玄关吊顶、客厅波打线、厨柜感应灯等18项个性化及人性化项目设置,更好的提升消费者体验感。“标准化中体现个性化,个性化中包含标准化”,金螳螂致力于为消费者提供标准、透明的价格体系,所见即所得,提升一站式家居服务体验。
建立消费生态圈 互联网+布局升级
早前,金螳螂曾发出公告:为实现公司平台化发展战略,以"金螳螂·家"为主的互联网家装为核心,围绕线上线下营销、产品迭代升级、新材料、新工艺、新技术研发以及售后服务体系等家装产业链中的各环节,建立以提升生活品质为目标的消费生态圈。
借助地域优势,金螳螂快速布局沪宁线,新增11家门店,这是金螳螂集中精力打造家装电商品牌的重要举措。2016年,金螳螂·家将在15个城市的基础上,从华东发力,布局全国。同时,金螳螂·家也将对其家装“在线设计”再次升级:通过VR技术、3D软件建立一个虚拟的样板间,同时结合AR技术,将场景中静态的家具实时渲染,变成可移动的模型物体,消费者戴上VR眼镜就可以看到一个虚拟的现实场景,实时互动。此外,金螳螂·家积极推动与金融机构合作,帮助消费者减轻资金压力。
互联网家装企业追求一定的速度,从长远看,金螳螂·家要做家装行业领军企业,但是任何远大的目标都要一步步完成,金螳螂·家本着小步快跑的方式推进。未来,相信金螳螂·家会从解决消费者痛点出发,打造全新的家装生态链,促进装修行业告别信任危机,为消费者带去时尚、科技、环保和品质的产品和服务,让消费者拥有更好的家装服务体验。
分享到微信朋友圈
在手机阅读、分享本文
还可以输入250个字
推荐文章RECOMMEND
阅读:1041
阅读:15万
热门文章HOT NEWS
——当实力配不上骄傲,口碑的坍塌比其它所有一切方式都更能摧毁一个品牌
电影通缉令
黄生看金融
百度新闻客户端
百度新闻客户端
百度新闻客户端
扫描二维码下载
订阅 "百家" 频道
观看更多百家精彩新闻Android OTA晋级(1):编译升级全包 - Android当前位置:& &&&Android OTA晋级(1):编译升级全包Android OTA晋级(1):编译升级全包&&网友分享于:&&浏览:226次Android OTA升级(1):编译升级全包&&&&& Android原生系统中就已经支持OTA升级。所谓OTA升级就是通过空中接口获取升级包,然后更新系统固件。一般地,升级包无论如何获取,哪怕是直接TCard本地升级,也被称为OTA升级。&&&& OTA升级首要是生成OTA升级包,升级包又分为升级全包和升级差分包(或要增量包)。升级全包是编译当前系统得到的软件包,这个包很大,有上百兆,但是不依赖与当前手机里的软件版本;升级差分包是对手机两个软件版本做差分,在第一个版本上打patch,得到第二个升级包,所以差分包只能对第一个版本的机器进行升级。&&& 本文主要讲述升级全包的生成过程。&编译升级全包,用下面指令:#make otapackage最终生成INTERNAL_OTA_PACKAGE_TARGET,也就是$(PRODUCT_OUT)/$(name).zip。&一、升级全包($(PRODUCT_OUT)/$(name).zip)的生成INTERNAL_OTA_PACKAGE_TARGET依赖于BUILT_TARGET_FILES_PACKAGE生成规则【在build/core/Makefile中】:$(INTERNAL_OTA_PACKAGE_TARGET):$(BUILT_TARGET_FILES_PACKAGE) $(OTATOOLS)
@echo&Package OTA: $@&
$(hide)./build/tools/releasetools/ota_from_target_files -v \
-p $(HOST_OUT) \
-k $(KEY_CERT_PAIR) \
$(BUILT_TARGET_FILES_PACKAGE) $@ota_from_target_files是python脚本,需要中间文件$(BUILT_TARGET_FILES_PACKAGE)。所以,在分析完中间文件的生成之后再看最终升级全包的生成过程。&二、中间文件包($(TARGET_PRODUCT)-target_files-$(FILE_NAME_TAG).zip)的生成BUILT_TARGET_FILES_PACKAGE是$(intermediates)/$( TARGET_PRODUCT)-target_files-$(FILE_NAME_TAG).zip形如:out/target/product/&product&/obj/PACKAGING/target_files_intermediates/&product&-target_files-&eng&.haili.tian&生成规则【在build/core/Makefile中】:$(BUILT_TARGET_FILES_PACKAGE):\
$(INSTALLED_BOOTIMAGE_TARGET) \
$(INSTALLED_RADIOIMAGE_TARGET) \
$(INSTALLED_RECOVERYIMAGE_TARGET)\
$(INSTALLED_SYSTEMIMAGE) \
$(INSTALLED_USERDATAIMAGE_TARGET)\
$(INSTALLED_ANDROID_INFO_TXT_TARGET)\
$(built_ota_tools) \
$(APKCERTS_FILE) \
$(HOST_OUT_EXECUTABLES)/fs_config\
@echo &Package target files:$@&
$(hide) rm -rf $@ $(zip_root)
$(hide) mkdir -p $(dir $@) $(zip_root)
@# Components of the recovery image
$(hide) mkdir -p $(zip_root)/RECOVERY
$(hide) $(call package_files-copy-root, \
$(TARGET_RECOVERY_ROOT_OUT),$(zip_root)/RECOVERY/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
$(hide) $(ACP) $(INSTALLED_KERNEL_TARGET)$(zip_root)/RECOVERY/kernel
ifdef INSTALLED_2NDBOOTLOADER_TARGET
$(hide) $(ACP) \
$(INSTALLED_2NDBOOTLOADER_TARGET)$(zip_root)/RECOVERY/second
ifdef BOARD_KERNEL_CMDLINE
$(hide) echo&$(BOARD_KERNEL_CMDLINE)& & $(zip_root)/RECOVERY/cmdline
ifdef BOARD_KERNEL_BASE
$(hide) echo&$(BOARD_KERNEL_BASE)& & $(zip_root)/RECOVERY/base
ifdef BOARD_KERNEL_PAGESIZE
$(hide) echo &$(BOARD_KERNEL_PAGESIZE)&& $(zip_root)/RECOVERY/pagesize
@# Components of the boot image
$(hide) mkdir -p $(zip_root)/BOOT
$(hide) $(call package_files-copy-root, \
$(TARGET_ROOT_OUT),$(zip_root)/BOOT/RAMDISK)
ifdef INSTALLED_KERNEL_TARGET
$(hide) $(ACP) $(INSTALLED_KERNEL_TARGET)$(zip_root)/BOOT/kernel
ifdef INSTALLED_2NDBOOTLOADER_TARGET
$(hide) $(ACP) \
$(INSTALLED_2NDBOOTLOADER_TARGET)$(zip_root)/BOOT/second
ifdef BOARD_KERNEL_CMDLINE
$(hide) echo&$(BOARD_KERNEL_CMDLINE)& & $(zip_root)/BOOT/cmdline
ifdef BOARD_KERNEL_BASE
$(hide) echo&$(BOARD_KERNEL_BASE)& & $(zip_root)/BOOT/base
ifdef BOARD_KERNEL_PAGESIZE
$(hide) echo&$(BOARD_KERNEL_PAGESIZE)& & $(zip_root)/BOOT/pagesize
$(hide) $(foreach t,$(INSTALLED_RADIOIMAGE_TARGET),\
mkdir -p $(zip_root)/RADIO; \
$(ACP) $(t)$(zip_root)/RADIO/$(notdir $(t));)
@# Contents of the system image
$(hide) $(call package_files-copy-root, \
$(SYSTEMIMAGE_SOURCE_DIR),$(zip_root)/SYSTEM)
@# Contents of the data image
$(hide) $(call package_files-copy-root, \
$(TARGET_OUT_DATA),$(zip_root)/DATA)
@# Extra contents of the OTA package
$(hide) mkdir -p $(zip_root)/OTA/bin
$(hide) $(ACP)$(INSTALLED_ANDROID_INFO_TXT_TARGET) $(zip_root)/OTA/
$(hide) $(ACP) $(PRIVATE_OTA_TOOLS)$(zip_root)/OTA/bin/
@# Files that do not end up in anyimages, but are necessary to
@# build them.
$(hide) mkdir -p $(zip_root)/META
$(hide) $(ACP) $(APKCERTS_FILE)$(zip_root)/META/apkcerts.txt
echo&$(PRODUCT_OTA_PUBLIC_KEYS)& & $(zip_root)/META/otakeys.txt
$(hide) echo&recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)& &$(zip_root)/META/misc_info.txt
ifdef BOARD_FLASH_BLOCK_SIZE
$(hide) echo&blocksize=$(BOARD_FLASH_BLOCK_SIZE)& && $(zip_root)/META/misc_info.txt
ifdef BOARD_BOOTIMAGE_PARTITION_SIZE
$(hide) echo&boot_size=$(BOARD_BOOTIMAGE_PARTITION_SIZE)& &&$(zip_root)/META/misc_info.txt
ifdef BOARD_RECOVERYIMAGE_PARTITION_SIZE
$(hide) echo&recovery_size=$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)& &&$(zip_root)/META/misc_info.txt
ifdef BOARD_SYSTEMIMAGE_PARTITION_SIZE
$(hide) echo&system_size=$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)& &&$(zip_root)/META/misc_info.txt
ifdef BOARD_USERDATAIMAGE_PARTITION_SIZE
$(hide) echo &userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)&&& $(zip_root)/META/misc_info.txt
$(hide) echo&tool_extensions=$(tool_extensions)& &&$(zip_root)/META/misc_info.txt
ifdef mkyaffs2_extra_flags
$(hide) echo&mkyaffs2_extra_flags=$(mkyaffs2_extra_flags)& &&$(zip_root)/META/misc_info.txt
@# Zip everything up, preserving symlinks
$(hide) (cd $(zip_root) && zip-qry ../$(notdir $@) .)
@# Run fs_config on all the system filesin the zip, and save the output
$(hide) zipinfo -1 $@ | awk -F/ 'BEGIN {OFS=&/& } /^SYSTEM\// {$$1 = &system&; print}' |$(HOST_OUT_EXECUTABLES)/fs_config & $(zip_root)/META/filesystem_config.txt
$(hide) (cd $(zip_root) && zip -q../$(notdir $@) META/filesystem_config.txt)其中,变量定义:-&&&&&&&&&TARGET_RECOVERY_ROOT_OUT也就是$(TARGET_RECOVERY_OUT)/root;TARGET_RECOVERY_OUT是$(PRODUCT_OUT)/recovery;PRODUCT_OUT是out/target/product/&product&。所以,TARGET_RECOVERY_ROOT_OUT也就是out/target/product/&product&/recovery/root;-&&&&&&&&&zip_root是$(intermediates)/$( TARGET_PRODUCT)-target_files-$(FILE_NAME_TAG)路径,也就是out/target/product/&product&/obj/PACKAGING/target_files_intermediates/&product&-target_files-&eng&.haili.tian;-&&&&&&&&&TARGET_ROOT_OUT是$(PRODUCT_OUT)/root,也就是out/target/product/&product&/root;-&&&&&&&&&INSTALLED_RADIOIMAGE_TARGET;-&&&&&&&&&SYSTEMIMAGE_SOURCE_DIR是$(TARGET_OUT),也就是out/target/product/&product&/system/;-&&&&&&&&&TARGET_OUT_DATA是$(PRODUCT_OUT)/data,也就是out/target/product/&product&/data;-&&&&&&&&&INSTALLED_ANDROID_INFO_TXT_TARGET是$(PRODUCT_OUT)/android-info.txt,也就是out/target/product/&product&/android-info.txt;-&&&&&&&&&PRIVATE_OTA_TOOLS是$(built_ota_tools),也就是包含了:&&& out/target/product/&product&/obj/EXECUTABLES/applypatch_intermediates/applypatch&&& out/target/product/&product&/obj/EXECUTABLES/applypatch_static_intermediates/applypatch_static&&& out/target/product/&product&/obj/EXECUTABLES/check_prereq_intermediates/check_prereq&&& out/target/product/&product&/obj/EXECUTABLES/updater_intermediates/updater-&&&&&&&&&APKCERTS_FILE是out/target/product/&product&/obj/PACKAGING/apkcerts_intermediates/&product&-apkcerts-&eng&.haili.tian.txt-&&&&&&&&&PRODUCT_OTA_PUBLIC_KEYS目前为空;-&&&&&&&&&PRIVATE_RECOVERY_API_VERSION也就是RECOVERY_API_VERSION,RecoveryAPI的版本号;-&&&&&&&&&tool_extensions如果定义了TARGET_RELEASETOOLS_EXTENSIONS,tool_extensions也就是TARGET_RELEASETOOLS_EXTENSIONS;-&&&&&&&&&DEFAULT_SYSTEM_DEV_CERTIFICATE目前为空;-&&&&&&&&&HOST_OUT_EXECUTABLES是$(HOST_OUT)/bin,也就是out/host/linux-x86/bin;&脚本的执行:1.&&&&&&#清理以前残存的目录和文件,并创建$(zip_root)目录(也就是out/target/product/&product&/obj/PACKAGING/target_files_intermediates/&product&-target_files-&eng&.haili.tian);2.&&&&&&创建$(zip_root)/RECOVERY目录,把$(TARGET_RECOVERY_ROOT_OUT)(也就是out/target/product/&product&/recovery/root)下的所有文件和目录都拷贝到$(zip_root)/RECOVERY/RAMDISK/下;3.&&&&&&创建$(zip_root)/BOOT目录,然后把$(TARGET_ROOT_OUT)(也就是out/target/product/&product&/root)下的所有文件和目录都拷贝到$(zip_root)/BOOT/RAMDISK/下;4.&&&&&&创建$(zip_root)/RADIO目录,然后把$(INSTALLED_RADIOIMAGE_TARGET)下的所有文件和目录都拷贝到$(zip_root)/ RADIO/下;5.&&&&&&把$(SYSTEMIMAGE_SOURCE_DIR)【也就是out/target/product/&product&/system/】下的所有文件和目录都拷贝到$(zip_root)/SYSTEM/下;6.&&&&&&把$(TARGET_OUT_DATA)【也就是out/target/product/&product&/data】下的所有文件和目录都拷贝到$(zip_root)/DATA/下;7.&&&&&&创建$(zip_root)/OTA/bin目录,然后把INSTALLED_ANDROID_INFO_TXT_TARGET【也就是out/target/product/&product&/android-info.txt】放到$(zip_root)/OTA/下;8.&&&&&&把PRIVATE_OTA_TOOLS【也就是applypatch、applypatch_static、check_prereq、updater】放到$(zip_root)/OTA/bin下。9.&&&&&&创建$(zip_root)/META目录,搜集META信息并保存到文件里:&&& 把APKCERTS_FILE【也就是out/target/product/&product&/obj/PACKAGING/apkcerts_intermediates/&product&-apkcerts-&eng&.haili.tian.txt】放到$(zip_root)/META/apkcerts.txt;&&& 把$(PRODUCT_OTA_PUBLIC_KEYS)追加到$(zip_root)/META/otakeys.txt;【】&&& 把recovery_api_version=$(PRIVATE_RECOVERY_API_VERSION)这行追加到$(zip_root)/META/misc_info.txt;&&& 把tool_extensions=$(tool_extensions)这行追加到$(zip_root)/META/misc_info.txt;&&& 把default_system_dev_certificate=$(DEFAULT_SYSTEM_DEV_CERTIFICATE)这行追加到$(zip_root)/META/misc_info.txt;10.&&拷贝Image文件&&& 把$(PRODUCT_OUT)/ramdisk.img放到$(zip_root)/下;&&& 把$(PRODUCT_OUT)/ramdisk-recovery.img放到(zip_root)/&&& 把$(PRODUCT_OUT)/../../../../boot/out/u-boot.bin放到$(zip_root)/&&& 把$(PRODUCT_OUT)/../../../../kernel/out/uImage放到(zip_root)/11.&&进入$(zip_root),把$(zip_root)下所有的内容打进zip包&product&-target_files-&eng&.haili.tian.zip;12.&&用$(HOST_OUT_EXECUTABLES)/fs_config获取文件系统信息并保存在文件里&&& &“SYSTEM/”下的文件系统信息保存在$(zip_root)/META/filesystem_config.txt中;&&& &“BOOT/RAMDISK/”下的文件系统信息保存在$(zip_root)/META/boot_filesystem_config.txt中;&&& &“RECOVERY/RAMDISK/”下的文件系统信息保存在$(zip_root)/META/recovery_filesystem_config.txt中;13.&&把META/*filesystem_config.txt文件打到zip包&product&-target_files-&eng&.haili.tian.zip里。&三、ota_from_target_file分析Ota_from_target_file是python脚本,从main()开始分析。&3.1 生成总过程 – main()Main()里主要做下列工作:1.&&&&&&从参数和环境中解析OPTIONS;2.&&&&&&从中间zip包里的META/misc_info.txt中解析出{&key&=&value&}OPTIONS对,比如recovery_api_version=3;tool_extensions=device/&company&/&product&/recovery;3.&&&&&&从OPTIONS对里找到tool_extensions,赋值给OPTIONS.device_specific;4.&&&&&&input_zip为上文的中间zip包;output_zip为最终生成的临时zip包;5.&&&&&&对于全包升级包,调用WriteFullOTAPackage(input_zip,output_zip);6.&&&&&&签名临时包,生成最终签过名的最终全包升级包。&上述过程中,我们最关注的是WriteFullOTAPackage(input_zip,output_zip)做的工作。3.2 生成全包 – WriteFullOTAPackage()WriteFullOTAPackage[file:build/tools/releasetools/ota_from_target_files]的定义如下:def WriteFullOTAPackage(input_zip, output_zip):
# TODO:how to determine this?
We don't knowwhat version it will
# beinstalled on top of.
For now, we expectthe API just won't
# changevery often.
script =edify_generator.EdifyGenerator(3, _dict)
metadata= {&post-build&: GetBuildProp(&ro.build.fingerprint&,input_zip),
&pre-device&: GetBuildProp(&ro.product.device&,input_zip),
&post-timestamp&:GetBuildProp(&ro.build.date.utc&, input_zip),
device_specific = common.DeviceSpecificParams(
input_zip=input_zip,
input__dict[&recovery_api_version&],
output_zip=output_zip,
script=script,
input_tmp=OPTIONS.input_tmp,
metadata=metadata,
info__dict,
trusted_boot=OPTIONS.trusted_boot)
if not OPTIONS.omit_prereq:
ts =GetBuildProp(&ro.build.date.utc&, input_zip)
script.AssertOlderBuild(ts)
# AppendAssertions(script, input_zip)
# device_specific.FullOTA_Assertions()
script.ShowProgress(0.9, 16)
if OPTIONS.wipe_user_data:
script.FormatPartition(&/data&)
script.FormatPartition(&/system&)
script.Mount(&/system&)
# script.UnpackPackageDir(&recovery&, &/system&)
script.UnpackPackageDir(&system&, &/system&)
symlinks= CopySystemFiles(input_zip, output_zip)
script.MakeSymlinks(symlinks)
# boot_img = common.File(&boot.img&, common.BuildBootableImage(
os.path.join(OPTIONS.input_tmp, &BOOT&)))
# recovery_img = common.File(&recovery.img&,common.BuildBootableImage(
os.path.join(OPTIONS.input_tmp, &RECOVERY&)))
# MakeRecoveryPatch(output_zip, recovery_img, boot_img)
Item.GetMetadata(input_zip)
Item.Get(&system&).SetPermissions(script)
# common.CheckSize(boot_img.data, &boot.img&, _dict)
# common.ZipWriteStr(output_zip, &boot.img&, boot_img.data)
# script.ShowProgress(0.2, 0)
# script.ShowProgress(0.2, 10)
# script.WriteRawImage(&/boot&, &boot.img&)
# script.ShowProgress(0.1, 0)
device_specific.FullOTA_InstallEnd()
if OPTIONS.extra_script is not None:
script.AppendExtra(OPTIONS.extra_script)
script.UnmountAll()
script.AddToZip(input_zip, output_zip)
WriteMetadata(metadata,output_zip)OTA全包生成的过程:1.&&&&&&script用来生成Edify脚本,在edify_generator.py中实现;2.&&&&&&script中增加语句:显示进度;3.&&&&&&script中增加语句:擦除“/system”分区;4.&&&&&&script中增加语句:安装system分区到“/system”;5.&&&&&&script中增加语句:把system中的内容复制到/system下;6.&&&&&&把input_zip包/system中的内容,复制到output_zip包中,不包含其中的link文件;7.&&&&&&对于link文件,script中增加指向链接的语句;8.&&&&&&从input_zip包的META/filesystem_config.txt中获取其中描述的/system下各个文件的权限信息;9.&&&&&&script中增加语句:设置/system下文件的权限和属主信息;10.&&调用具体device特定的函数FullOTA_InstallEnd。&&& &main()函数中已经获取OPTIONS.device_specific为/device/&company&/&product&/recovery;这里的device_specific是common.DeviceSpecificParams。&&& &common实现在common.py中,在判断出OPTIONS.device_specific为目录时,用该目录下的releasetools.py脚本。所以这里执行releasetools.py中的FullOTA_InstallEnd。11.&&如果特别指定了其他脚本,script中加入;12.&&通过script.AddToZip()写META-INF&&& 把前面所有的脚本,写入到output_zip里的META-INF/com/google/android/updater-script这个edify脚本中;&&& 把input_zip里的OTA/bin/updater写入到output_zip里的META-INF/com/google/android/update-binary13.&&把metadata的内容写入到output_zip里的META-INF/com/android/metadata&总结&&& 本文分析了Android OTA全包的编译生成过程。首先生成中间包,这个包是后续全包生成的基础,也是差分包生成的基础,接着解析了生成最终升级全包的过程。通过分析知道升级包中update-binary和updater-script的来源,对于后续分析OTA升级的过程至关重要。&&& 差分包的生成在介绍完整个OTA的过程之后,再进一步阐述。&
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 最新页面升级紧急通知 的文章

 

随机推荐