400-915-1135
厦门定制小程序开发一般要多久(厦门小程序开发定制多少钱)

厦门定制小程序开发一般要多久(厦门小程序开发定制多少钱)

发表日期:2022-11-05 13:24:09   作者来源:众诚企业建站   浏览:59


开发一个小程序需要多久!

一、模板开发
小程序模板开发价格就相对较低,一般几千到一万左右。优点是价格便宜,操作简单,能快速上线。缺点也有,功能固定无法修改,并不属于购买者本人,要按年租费。
二、定制开发
定制开发的小程序可以根据客户的实际所需功能为您量身定造,该类型开发,因为排版,功能需求,UI页面设计的复杂性,一般研发费用都在1.5万以上,当然,目前小程序的开发成本是与功能、页面的多少成正比关系的,如果需要开发的小程序功能并不多,那么开发成本自然就低,反之亦然。
三、开发周期
在开发周期上,小程序的开发周期平均为4个星期,而一款iOS/Android双平台APP通常需要3个月的时间;在手机适配方面,小程序是一次开发,多种终端适配,APP则需要逐一调试;作为商家比较关心的开发费用,通过也不会超过5万元,而一款好的APP的成本至少会超过十万元。



小程序定制开发多少钱?有哪些成本?联系电话多少?联系QQ多少?

制作开发微信小程序的方式不同,就会造成价格方面会有所差异,比如如果是固定模板做的,价格会比较便宜,而如果是定制展示型价格在几千以上居多。企业开发小程序能给企业减少很大一部分人员费用的支出,还可以借助微信平台获得较大的流量,帮助企业获得更多的用户和订单。小程序开发联系电话:******,联系QQ:******



小程序开发定制公司哪个好呢?联系电话多少?联系QQ多少?

小程序开发公司大都有官网的,可以去看其官网的案例,然后电话联系或者实地考察其公司,这样选择一家价格合理、实力强的小程序开发公司比较好。目前至少几千家可以做小程序开发的公司,一定选择有独家产品的公司,有相似开发案例的公司。小程序开发联系电话:******,联系QQ:******



从app设计到app开发一个软件大概需要多少天啊

25



一般app开发周期大概多久

这个开发周期一般都在一个月左右,如果定制开发复杂的功能,周期就会长一些,会有2-3个月的样子。在亦强软件,了解清楚开发的功能复杂程度以后,就可以大概的知道一个开发时间,一般不会太久。



网友:厦门定制小程序开发一般要多久

快递小哥

文 | 史记新说

编辑 | 史记新说

广东一个快递小哥,在工作时自学编程,将自己的软件卖给物流公司之后,给公司物流仓储带来极大便利,获得了公司的认可。

之后这个快递小哥在仅仅两年时间,就开发了近200个网站,赚钱金额高达4000亿。而快递小哥却说世上没有一夜暴富的事情,不要想一夜暴富。

他是怎么做到的?这些网站背后隐藏着什么样的“赚钱秘密”?

1.蹊跷的报案

我们今天就来讲述这些“神奇的网站”背后的事情,此事的开端还要从一桩蹊跷的报案事件说起。

2014年的一天深夜,广东省潮州市公安局中,有位神色慌张的男人突然闯进来,一进来就说:

“我犯法了,求求你们把我关起来吧,我自首。”

值班的警察都懵了,这自首咋像是逃命一般,这是怎么回事呢?

等男人平静下来后讲述了自己的经历,警察跟踪调查后,端掉了一个建国以来最大的网络赌博犯罪团伙,涉案金额高达4000亿!

来警局报案自首的人姓王,是一个40多岁的中年男子。

老王之前是一家影楼的老板,那生意也是做得风生水起的,到哪里别人都是一口一个王总地叫着,老王心里也是很骄傲。

自己身家丰厚,家庭幸福,影楼的生意也很红火,老王还时常想着,趁现在生意好做,自己的影楼要多开几家店,把生意做得再大一些。

模拟场景

老王在广东奋斗这么多年,生意做起来后人也忙了起来,不是朋友聚会,就是天南地北跑生意,不过这些都让他感到很充实。

可人呢,有时一有钱思想就会堕落,老王就是这样。他的堕落,不仅让风光无限的自己变得憔悴不堪,还将自己亲手奋斗出来的幸福全搭进去了。

在派出所中,老王向警察们坦白,自己是接触了一个赌博网站,起初也是好奇,就进去玩玩,没想到越陷越深,最后一无所有了。

赌博可是犯罪行为,老王本来是一个本本分分的生意人,怎么就突然开始赌博了呢?

禁止赌博宣传

这要从他一次谈生意说起。几年前老王在一次谈生意的过程中,对方给他介绍了一个“神奇”的网站。老王刚开始也是很有戒备的,打拼这么多年,也经历了不少大风大浪,不至于真的被骗。

可这回,这个网站却是老王主动感兴趣的!老王说:

“最开始的话就赢一赢,后来越赢越多,那种感觉就很爽!就继续玩,结果输了,就想扳回来,但没想到越陷越深,最后啥也没了,只能去借钱。”

十赌九输!赌博本来就没有赢家,老王深陷这个赌博网站后,不但是把自己几上百万身价输进去了,就连影楼也被亏得底朝天,只能关门。

可老王这时已经魔怔了,陷入赌博的深渊中醒不过来,没有钱,就开始四处向朋友们借钱!

朋友们那里借不到,就去借高利贷,最后利滚利,债是越积攒越多,每天都有人上门要债,闹得他是吃也吃不好,睡也不敢睡,这没办法了,就躲公安局来了。

警察问老王欠多少钱时,老王却回答,具体借的数目,自己也数不清了。

常言道,赌博危害大,一赌毁终生。真是没错啊,老王就是典型的赌徒心理,最后还走上犯罪道路,把自己的生活全毁了。

但更令人可恨的是赌博网站背后的犯罪分子!警察听过老王的坦白后,立马对老王参与赌博的网站进行了调查。

2.“神奇”的网站

不查不知道,一查吓一跳!连警察也没有想到,这个赌博网站竟然是一个非常普通的办公软件!

非法网站的伪装

根据老王的描述,警察找到这个网站之后发现,这个网站进去之前还需要登录,而他的登录界面,就是一个普通办公软件的登录界面,让你绝对想不到这个能和“赌博”扯上关系。

输入账号密码登录之后,里面的内容让人震惊了!

网站主页上全部都是彩票!

不是说是赌博网站吗?为何全是彩票呢?

这个伪装太狡猾了,网站上全都是国家和地方正规发行的福利彩票,像是什么广东快乐十分、重庆时时彩、双色球、七乐彩等等各地的彩票。

到这里,不懂的人还以为这就是一个彩票的资讯网呢!

可警察深入调查后发现,这些看着像是彩票资讯的网页上,实则深藏玄机。

买过彩票的朋友们都知道,福利彩票的钱除了中奖的兑现,其余都是用来做公益了,像是社会保障基金、专项公益金和体育事业等等。

而这个网站的彩票,可是和正规的福彩搭不上一点边儿,更别说把钱拿去扶贫救灾了。

正轨彩票

这个网页上看上去是这么多彩票资讯,其实呢,就是在彩票开奖的玩法上做了手脚。

就拿广东快乐十分来说吧,本来这个福利彩票就是一种玩法,选号等开奖就行了。而这个网站上呢,它把这一种彩票分成了十二类玩法,比如可以赌第一球是大还是小、第一球是单数还是双数、尾数加起来是大还是小等等,总共能有上百种投注的方式了。

而每一种投注的玩法都能投不同价位的钱,小到几百大到几千上万都有!

福利彩票本身不是赌博,但这种投彩票开奖的结果,并且投注这么多钱,那就是赤裸裸的赌博!

而更加恐怖的是,这个网站还能将人一步步拉下深渊!就像老王这种的生意人,他开始接触肯定不信,这网站注册后就会根据他各方面资产的一个评估,然后给他一个信用额度。

说白了就是借钱给他赌,骗子的心机真是深,这借给他的钱让他在这里玩,赢了庄家就立马给他兑现,让他产生一种自己“赚了”的快感,网站就立马和他产生了信任。

老王就是这样被网站上处心积虑抛出的诱饵,一步步拉进坑,然后无法自拔,害了自己!

前文我们提到,这个网站不光有一种彩票,国内高频彩票他都有,而这些彩票错开时间后,几分钟另一个彩票就开一次奖,比如你投过广东这个,北京赛车又能投了,有的人沉迷这些后,甚至从早上八点到凌晨都坐在电脑前,就是觉得自己能“赢”。

非法网站就通过这种精神刺激将这些人发展成会员,牢牢把他们捆绑进自己的“狼窝”。

可是这个非法赌博网站是怎么赚钱的呢?

这就不得不说背后操纵者的阴险狡诈之处了,他们有两种操纵方式。

第一种就是,不管赌博的人投多少钱,投多少注,每次投注时他们都会“抽水”,把你投注的资金抽出一些归平台。比如投几百可能抽几块,看起来不多,日积月累下来那就是一笔天文数字。

第二种更狠,背后操纵者直接操纵彩票结果!但这不是我们想的那种内部消息什么的,而是他们在网站下注的赔率上做手脚。

比如这个第一个球这个数字下注的人多,他们就会把赔率降低一点,一些不受欢迎的玩法,他们就会把赔率做高一些,用来诱惑人投注,平衡他们整个盘面。

可以说,不管老王在这一期或者这一段时间赢多少,时间一长,庄家在概率上就能取得优势,像老王一样的会员们绝对是稳输!

现在老王都输得倾家荡产,来警局让警察将自己抓起来了,而警察看到网站上投注的活跃账号非常多!

警察既然知道了这个非法赌博网站,取缔和抓捕行动就迫在眉睫!

抓捕方案制定

3.大费周折的抓捕行动

通过技术手段,警察查到汕头市一个居民小区里有个挂着天津路桥牌子的公司非常可疑,警察们立即开始排查。

调查后发现这个牌子其实是个幌子,公司里做的是软件开发。公司里的种种迹象表明,这家公司的所有人张某荣和那个非法赌博网站有关。

但到底他是不是真正的幕后操纵者,还需要进一步核实。调查发现这个赌博网站的服务器设在台湾和厦门,维护站却设在泰国。

泰国的维护站通过电话监听到天津路桥牌公司,公司就每隔一段时间派人去泰国定期维修,这家公司的人也有定期出入泰国的迹象。

这可是一个坏消息,要知道,非法网站将服务器和维护站设在境外,就是他们逃避打击的惯用手段!

因为此案件涉案巨大,人数众多,公安部也进行了协调。2014年11月,潮州市公安局派遣三名警察去泰国秘密调查。

经过一个多月的时间,最终将位置锁定在泰国一个庄园里,确定了有关嫌疑人之后,广州警局认为时机成熟,准备开始抓捕行动。

涉案庄园

就在一切都准备就绪,打算收网时,泰国警方那里传来一个不好的消息,说情况有变。

原来,是广东的两名技术维修工旅游签证到期了,他们去泰国与自己的同伙换班入境时,被泰国警方提前扣押下来了。

要知道,这个案件已经追踪快一年了,若是此时打草惊蛇,这一年来警察们的辛苦就白费了!

危急关头,广东警方立刻与泰国警察进行沟通协调,泰国警方那边为配合抓捕行动,立马编造了一个扣押理由,说是这两人多次往返泰国,不能再落地签证了,需要回国写申请才可以。

入境申请表

广东警方本来定好2014年12月23号收网,但此时出现了这个特殊情况,虽然泰国警方已经安抚好这两名技术工人,但广东警方仍觉得不保险,决定提前收网。

2014年12月21日,通过和泰国警方的配合,警察们对这个庄园的维修点进行了突袭,成功抓获维护非法网站的7名犯罪嫌疑人,并当场收缴大量证据。

与此同时,国内另一批警方对汕头市的路桥公司窝点进行了抓捕,成功控制这公司所有人张某荣。

犯罪团伙

4.快递小哥的“天赋”

在抓捕之后,张某荣(下文简称张)交代了自己的犯罪经历,而赌博网站真正的运作者,还另有其人!

张之前就是一个快递公司的快递员,他的学历也只是到高中。高中毕业之后,开始了自己的社会生活,第一份工作就是送快递。

他看到别人都坐在冬暖夏凉的办公室,自己却风里来雨里去要送快递,觉得自己很辛苦。

不过,那时的张也非常有上进心,他觉得自己能干好这份工作,并且在工作中他发现快递公司的仓储管理非常混乱,就在闲暇时刻做了一个管理货物流通的软件,还取得了很不错的效果。

张虽然是高中毕业,但他工作踏实,有上进心,自学程序还很有天赋,在自己开发的软件派上很大用场之后,他干脆辞了职,自己创业做软件开发公司。

然而好景不长,虽然张在程序编写上很有天赋,但他不善经营,手下就两个员工,很快公司就倒闭了。

张总结出了经验,他认为自己虽然擅长技术,但不擅长经营管理,正当他考虑未来的路如何走下去的时候,他碰到了一个叫陈某标(下文简称陈)的人,而就是这个人,彻底改变了他之后的命运。

陈找到张之后,说自己是个生意人,对张开发的软件很感兴趣,想和他合伙赚钱。

深入接触之后,张发现陈不是个普通的生意人,他赚“快钱”很厉害。陈问他能不能开发赌博网站,因为这个很赚钱。

张此时也是创业失败,正愁没钱没出路,一听陈的话他立马心动了,在陈的挑唆之下,张就开始走上了犯罪的道路。

经过一个月左右的时间,张就开发出了第一个非法赌博网站,将这个雏形卖给陈之后,陈给了他1万元的报酬。

在金钱的诱惑之下,一步步走向更远的犯罪道路。从快递小哥到程序员,虽然他很有天赋,但聪明没用到征途上,就会害了自己。

之后陈不断让张帮他开发网站,张有了第一次的经验,短短几年之内,他一口气竟然开发了199个赌博网站!

而警察们这回捣毁的,仅仅是这199个网站中的其中1个!

犯罪团伙窝点

张将自己开发的网站全都给了陈,陈要不就是自己运作赚钱,要不就租给别人赚钱,两人的犯罪规模就像雪山上滚下的雪球一般,越来越大!

警察将事情调查透彻之后,对这次涉案的陈某标为首的犯罪团伙已经他们涉及的网站全部进行捣毁抓捕。

调查发现,这个非法赌博犯罪团伙单月投入金额竟达到了4000亿,参与赌博的会员人数更是有55万左右,这也成为了有史以来参与人数最多的赌博网站。

为了保证这些人能够顺利参与赌博,张还特意注册公司,组建犯罪团队,在泰国设立维护站,定期维护,并且安装摄像和监听,自己在国内就能知道维护站的一切,远程指挥。

张可谓是费尽心机的犯罪,最终害人害己啊!

犯罪证据

5.结局和疑问

2015年1月,警察对提供服务器的犯罪嫌人翁某亮,在厦门进行抓捕。这起建国以来最大的犯罪网络赌博案成功结束。

最终,警方共抓获幕后庄家以及庄家以上操纵者1071人,冻结非法赌资3.3亿人民币!

警察们辛苦一年多的案件终于成功告破,所有人都开心不已。这不仅是对国内非法赌博进行了严厉的打击和震慑,更让人们明白,赌博危害有多大。不仅会倾家荡产,害要吃牢饭。

当警察们审问赌博网站最大操纵者陈某标的时候,他说:“几代人都是清清白白的,没蹲过牢房,现在自己把牢房给蹲了,真不知回去怎么和父母交代。”

更加讽刺的是,陈表示

“这50多万会员都沉迷于一夜暴富,靠网络赌博绝对不可能的,你见过中国哪个发大财的,是靠着赌博来的?”

当这些赌徒们沉迷与赌博时,却不知自己早就是任人宰割的羊羔,陈这些操纵者都是异常冷静,他们不仅自己不赌,还劝诫身边人不要沾染赌博。

赌博有多少危害呢?

让人上瘾,精神刺激过度,危害身体健康。让人迷失心智,不思进取,以为是成功的捷径,其实是毁掉自己的深渊。让人家破人亡,赌的是钱,时间一久,赌掉了自己整个平静幸福的生活。让人犯罪,害人害己,走上犯罪道路,不仅毁掉了自己的人生,更危害社会安全。

赌博百害无一利

对于这些危害,陈心中一清二楚,他的聪明也用在了歪门邪道上,最终毁了自己的人生。

陈的坦白也值得我们深思,那些幻想在赌桌上一夜暴富的朋友们,趁此打消这个念头吧,当你觉得这是机会时,其实你已经开始掉进了陷阱。

“赌”可谓是百害而无一利,想要致富还是要脚踏实地跟党走,勤劳致富才是每个人通往幸福生活的基石。

对于这个案件,朋友们有什么看法呢?

01.前言 - 移动互联网退潮下的汽车大战

将时间回退到2017年我大学刚毕业时,彼时移动互联网就已经开始退潮,各大个培训机构也纷纷停止了Android相关的培训,曾经热火朝天的应用开发从那时起,就开始走向下坡路,小程序以及众多跨平台框架也让市场对Android原生开发的需求逐年降低,市场需求的降低也造就了Android开发的面试变得史无前例的“卷”。

终于我在2019年选择离开了互联网,投身当时还不是非常火热的车载Android领域继续从事Android原生开发。而这一年中国首个外商独资的整车制造项目,“上海特斯拉超级工厂”开工了。

特斯拉在智能化和电子化上的巨大优势将智能汽车推向了一个全新的高度,先进的自动驾驶以及BMS电池管理系统,深深震撼了全世界的人,在当时的国人眼中特斯拉几乎就是新能源汽车的代名词,时至今日,Model Y和Model 3已也依然是新能源汽车领域的畅销车型。

众所周知汽车工业是发达国家重要的经济支柱,而中国是世界上最大汽车生产和销售国,特斯拉的热销立马就引发了一场 鲶鱼效应 ,国内外的汽车制造商纷纷开始布局智能化汽车,汽车工业走向了软件定义汽车的时代。软件定义汽车的核心思想是,决定未来汽车的是以人工智能为核心的软件技术,车载软件在汽车领域的重要性首次被拔高到了前所未有的高度,就这样一场轰轰烈烈的车载软件技术大战上演了。

02.智能汽车座舱基本结构

在从事车载Android应用开发前,必须要对汽车座舱的基本结构有一个大体的认知,只有意识到汽车座舱是一种与手机完全不同的架构,才能更好的助力我们日后学习车载Android应用的开发。下面就来介绍一个比较主流的车载操作系统架构。

注意:并不是所有的车载操作系统都采用了下面的架构,比如,特斯拉采用的是基于Linux一套架构。

上面就是目前主流汽车座舱采用技术架构,我们从上到下依次介绍:

T-BOX

T-Box又称TCU(车联网控制单元),指安装在汽车上用于控制跟踪汽车的嵌入式系统,是车载信息交互系统核心部件,有了它汽车才能实现联网功能,所以也起到中央网关的作用。通常包括GPS单元、移动通讯外部接口电子处理单元、微控制器、移动通讯单元以及存储器等。

对车辆,T-Box可提供车辆故障监控、电源管理、远程升级、数据采集、智慧交通等功能,对车主,T-Box可为提供车辆远程控制、安防服务等功能。
T-BOX属于外围硬件,与中控、仪表并不集成在一个主板上。

SOC

SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来, SoC称为系统级芯片,也有称片上系统(System on Chip),意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。

车载Soc和我们最常见的手机Soc非常类似,内部集成了CPU和GPU。目前最主流的车载Soc是高通的SA8155,它就是高通在手机Soc骁龙855的基础上发展而来的。

MCU

微控制单元(Microcontroller Unit;MCU) ,又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机。

一般汽车座舱内,集成SOC的主板上也会额外集成一个或多个MCU。

AutoSAR

Adaptive AutoSAR 是一种适用于高级自动驾驶的软件架构平台,提要提供高性能的计算和通信,提供灵活的软件配置,支撑应用的更新。

Adaptive AutoSAR 的主要架构分为硬件层、ARA(AutoSAR Run-timeFor Adaptive实时运行环境)以及应用层。

应用层包含的应用程序模块(AA)运行在ARA之上,每个AA以独立的进程运行。ARA由功能集群提供的应用接口组成,他们属于自适应平台。自适应平台提供Adaptive AutoSAR 的基本功能和标准服务。

每个AA可以向其他AA发生服务。基于这种架构,整车的功能之间可以解耦。

Hypervisor

一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。
目前主流的汽车座舱,都是同时在一个Soc上运行着两个不同的操作系统,一个是显示汽车仪表盘的QNX系统,另一个用于车载信息娱乐的Android系统,其底层技术原理就是Hypervisor。

QNX

QNX是一种商用的、遵从POSIX规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统,具备高运行效率、高可靠性特点,并在工控领域拥有近40年的使用经验,被广泛应用于汽车、轨道交通、航空航天等对安全性、实时性要求较高的领域。

QNX在车载操作系统市场的占有率超过75%,在更注重生态和内容的车载娱乐系统占有率也超过60%,而在强调安全性的仪表盘以及驾驶辅助领域,QNX的市占率更是达到了近100%。

2010年QNX被加拿大RIM公司收购,而这家公司就是黑莓BlackBerry的母公司。

SOA

SOA(Service-OrientedArchitecture)是一种基于业务实现的粗粒度松耦合的面向服务的分布式架构,即实现业务和技术的分离,又实现业务和技术的自由组合。

以位置服务为例,很多车内应用会用到位置信息,像天气、拍照、导航,这些应用根据自身服务有不同的需求,对位置信息的处理各不相同,SOA就可以很好地解决这个问题。

SOA原本是服务器开发中用到的技术,现如今也被用在车载操作系统领域,但是目前关于SOA的技术规范比较混乱,国内主机厂商外对于SOA的实现方式也有区别。

SOA并不车载操作系统必须的,其实目前为止已经上市的车型中,很少采用了SOA架构,所以它还只是车载操作系统未来的一个发展方向。

2021年上汽零束率先发布业界首个车载SOA软件架构规范。威马汽车科技集团旗下的W6号称国内首款采用SOA的量产车。

车载以太网

车载以太网是一种用以太网连接车内电子单元的新型局域网技术,与传统以太网使用4对非屏蔽双绞线电缆不同,车载以太网在单对非屏蔽双绞线上可实现100 Mbit /s,甚至1Gbit/s的传输速率,同时还满足汽车行业对高可靠性、低电磁辐射、低功耗、带宽分配、低延迟以及同步实时性等方面的要求。

车载以太网的设计是为了满足车载环境中的一些特殊需求。例如:满足车载设备对于电气特性的要求(EMI/RF);满足车载设备对高带宽、低延迟以及音视频同步等应用的要求;满足车载系统对网络管理的需求等。因此可以理解为,车载以太网在民用以太网协议的基础上,改变了物理接口的电气特性,并结合车载网络需求专门定制了一些新标准。针对车载以太网标准,IEEE组织也对IEEE 802.1和IEEE 802.3标准进行了相应的补充和修订。

CAN

CAN是控制器域网 (Controller Area Network, CAN) 的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO11898)。是国际上应用最广泛的现场总线之一。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。

CAN在车载操作系统&应用开发中使用非常广泛,车载Android的核心服务之一 - CarService本质上就是将外部硬件通信报文解析成上层应用可以识别的数据,这里的通信报文目前普遍都是CAN报文。

CAN通信在车载中使用的是如此广泛,以至于作为Android程序员,我们都不得不去学习CAN仿真测试工具的使用,有时候甚至需要我们去阅读、解析CAN报文。
值得一提的是CAN仿真测试工具非常昂贵,虽有国产替代,但目前依然普遍采用德国维克多公司出品的各类工具和软件,价格在数万元到数十万元不等。

3D HMI设计工具 & 嵌入式图形引擎

随着车载Soc算力的提高,现代座舱越来越喜欢引入3D化的图形界面,3D化的界面可以实时生成动画反馈,大大提升了界面的美观性和易用性。目前车载开发中主流的3D HMI设计工具&图形引擎有老牌的游戏开发工具如Unity 3d、Unreal(虚幻),也有专用于汽车HMI设计&图形显示的 — Kanzi 。

2016年芬兰汽车软件公司Rightware以及旗下产品Kanzi,被国内的汽车软件供应商中科创达收购。

上面介绍了汽车座舱的基础知识,Android应用程序员说到底还是负责在座舱中控,编写各类型的应用,下面就来介绍车载应用与互联网应用的不同之处。

03.车载应用开发

车载Android应用说到底就是,在车载Android系统中嵌入一系列系统级应用,这里既包含与用户存在交互的HMI应用,也包含在后台运行没有HMI的Service应用。

一般而言,车载应用复杂度比一般的互联网应用还要低一些。

常见有HMI的车载应用如,车载空调、多媒体应用、桌面、SystemUI、系统设置、车控车设、蓝牙电话以及一些第三方应用等等。

没有HMI的应用有,CarService、AudioService、AccountService等等。在车载应用开发中需要定制大量的Service,这也是应用开发中工作量比较大的一部分。

3.1 系统级应用与普通应用的区别

系统应用需要嵌入到Android ROM中运行,虽然普通的应用也可以嵌入到ROM中,但是系统应用可以调用Android SDK的内部API,而这一点是普通应用做不到的,总得来说系统应用具有以下特点

可以访问Android SDK内部的API不需要申请动态权限可配置开机自启动必须对应用进行签名

接下来我们实际上手编写一个系统级应用。

3.2 编写一个系统级应用

编写Android系统应用与普通的Android应用基本相同,我们首先在AndroidStudio中编写一个demo,只需要一个空白的Activity和Application即可。

public class DemoApp extends Application {private Handler handler;@Overridepublic void onCreate() {super.onCreate();Log.e("TAG", "onCreate: start");handler = new Handler(Looper.getMainLooper());handler.postDelayed(new Runnable() {@Overridepublic void run() {showView();}},5000);}private void showView(){WindowManager manager = getSystemService(WindowManager.class);View view = new View(this);WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;manager.addView(view,params);}}

上面的application逻辑很简单,app启动5秒后,弹出一个全屏的Window的。

接下来在AndroidManifest.xml中注册application。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android=""package="com.example.car"android:sharedUserId="android.uid.system"><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:persistent="true"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.First"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

在上面源码中我们需要关注两个普通应用用不到的属性:
android:sharedUserId
将与其他应用程序共享的 Linux 用户 ID 的名称。默认情况下,Android 会为每个应用分配自己唯一的用户 ID。但是,如果为两个或多个应用将此属性设置为相同的值,则它们将共享相同的 ID,前提是它们的证书集相同。具有相同用户 ID 的应用可以访问彼此的数据,如果需要,可以在同一进程中运行。
开发系统应用时,此项不是必须配置的。配置为android.uid.system后,该应用会变成system用户,可以访问一些system用户才能访问的空间。

android:persistent
配置应用程序是否应始终保持运行,默认为false。设为true之后,应用在开机广播发出之前就会自行启动,而且应用被杀死后,也会立即重启。
开发系统应用时,此项不是必须配置的。

3.3 测试系统应用3.3.1 准备测试环境

测试系统应用就比较麻烦了,由于手边没有开发板,只能基于模拟器进行测试,所以就必须下载Android的源码,并使用Android源码环境编译出带有系统签名的APK。
下载、编译Android源码 请参考 :Android车载应用开发与分析(1) - Android Automotive概述与编译
完成Android源码编译后,我们将编写好的FirstCarApp部分源码拷贝到 /aosp/packages/apps/Car/ 下,
基于Android源码环境的app工程结构与基于Gradle的AndroidStudio工程结构是完全不一样的,目录结构如下:

你应该注意到了 src 目录下没有androids studio工程结构中的main/java
需要强调的是,这种基于原生的写法,并不常用。实际开发中,我们依然是在Android Studio中开发完毕,将源码提交到gerrit上,后续的编译、签名、复制的过程会有jenkins帮我们完成。

3.3.2 编译&运行应用

源码环境下编译出Android应用,需要编写一个Android.bp或Android.mk脚本,如果你对Android.bp或Android.mk并不了解的话请参考:Android.mk 上手指南 | Android.bp入门教程

本篇测试用的Android.bp脚本如下

package {default_applicable_licenses: ["Android-Apache-2.0"],}android_app {name: "CarFirstApp",srcs: ["src/**/*.java"],resource_dirs: ["res"],platform_apis: true,certificate: "platform",privileged: true,static_libs: ["androidx.appcompat_appcompat","com.google.android.material_material",],optimize: {enabled: false,},dex_preopt: {enabled: false,},product_variables: {pdk: {enabled: false,},},}

然后完整编译一次Android的源码

# 编译Android源码/aosp$ source build/envsetup.sh /aosp$ lunch 12/aosp$ make -j 32/aosp$ emulator -writable-system -netdelay none -netspeed full

一般情况下我们可以直接使用emulator指令就可以启动编译好的模拟器,但是此时的模拟器的文件系统还是read-only模式,并且不可以执行remount指令,通过添加-writable-system -netdelay none -netspeed full,我们就可以正常使用remount指令了。

/aosp$ adb root/aosp$ adb remount/aosp$ adb shell reboot

等模拟器重启后,我们继续编译出CarFristApp的apk。

link@link-PC:/aosp$ make CarFirstApp...## 编译后输出的apk路径============================================[100% 4/4] Install: out/target/product/generic_car_x86/system/priv-app/CarFirstApp/CarFirstApp.apk#### build completed successfully (2 seconds) ####

然后使用adb指令在模拟器中创建一个CarFristApp目录,将编译好的apk push到system/priv-app/CarFristApp/目录下。

/CarFirstApp$ adb root/CarFirstApp$ adb remount# 创建目录/CarFirstApp$ adb shell mkdir /system/priv-app/CarFirstApp/CarFirstApp$ adb push CarFirstApp.apk /system/priv-app/CarFirstApp# 重启/CarFirstApp$ adb shell reboot

等待模拟器重启结束后,就可以看到,app会自行启动,然后会弹出一个WindowView遮住屏幕。不知道你是否注意到了,无论是自启动,还是弹出一个遮住屏幕的Window,都没有申请权限的窗口显示出来,这就系统级应用的一个重要特点。

在上面的操作中我们选择把apk push到priv-app下面,除此以外Android应用还有以下几种安装路径,可以根据实际需要安装到不同的目录中去。
/system/priv-app
该路径存放一些系统底层的应用,比如Setting,systemUI等。该目录中的app拥有较高的系统权限,而且如果要使用android:protectionLevel=signatureOrSystem,那么该app必须放到priv-app目录中去。

/system/app
该目录中存放的系统app权限相对较低,而且当拥有root权限时,就有可能卸载掉这些app。

/vendor/app
该目录存放vendor厂商的app

/data/app
用户安装的第三方app

3.4 车载应用的难点

车载应用开发过程中,往往都会遇到以下几个难点:

调试耗时且费力
车载应用开发难度其实并不大,但是很烦!特别是调试,不同于开发手机应用,车载应用的运行环境是基于AOSP定制的,而且大多数时候都会存在数不清的BUG,有时系统底层的bug会在上层应用中体现,这就要求应用开发者必须有能力准确识别出这个bug的归属方。复杂的UI
现如今的车载应用都会有着一个套复杂且炫酷交互UI,同时,由于车载Android与QNX共享一个Soc和内存,所以多数时候系统资源都比主流的手机要差不少,对应用开发者来说,实现一套复杂且高性能的HMI,往往会非常有挑战性。对系统API理解不够
开发车载应用多数时候都会要求重新定制一个原本系统中已经存在的应用,比如系统设置。这就要求开发者对于原生应用的运行方式、调用的API都有一定的了解。04. 车载Android开发的前景

读完以上的内容,相信你已经对车载Android的开发有一个浅显的认识了。不知道你会不会认为我在劝你转行做车载Android的开发?答案是NO!

单纯的Android应用工程师在整车座舱上只能负责非常小的一个技术领域,这就已经决定了这个职业的发展高度,如果想突破这层天花板,就必须要深入到Android系统的底层,掌握Framework、HAL甚至于Native的一些运行原理。除此以外,Linux、汽车相关的知识也是需要额外学习的。

就目前而言,车载Android开发依然有着不错的前景,但还远没有达到曾经的移动互联网的热度,甚至可能以后也不会达到,并且就像曾经热火朝天的移动互联网一样,随着大量开发人员的涌入、汽车制造业的重新洗牌、供需关系的改变,总有一天它也会不可避免的走向下坡路。

我曾经后悔过入行车载开发,因为相比手机应用开发,所需要学习知识实在太多太杂,调试过程也比手机应用复杂,但是人这一辈何尝不是在后悔中度过的呢?