1.创维手机e820创维手机遥控器app叫什么
2.å®åä¹å®¶å®ç½ï¼
3.一次vue-cli4项目升级到vite的键重经历
创维手机e820创维手机遥控器app叫什么
创维手机e_创维手机遥控器app叫什么
非常感谢大家聚集在这里共同探讨创维手机e的话题。这个问题集合涵盖了创维手机e的装源重装广泛内容,我将用我的码键知识和经验为大家提供全面而深入的回答。
1.创维e网络机顶盒刷机软件
2.三星手机数据线 通用吗
3.手机的源码操作系统有哪些?
4.怎么样把安卓手机QQ显示为IPHONE在线?
5.电视机顶盒用什么软件刷机
创维e网络机顶盒刷机软件
创维e网络机顶盒刷机软件可以用TV盒子助手。
1、开源按遥控器的键重bind源码解析(一)设置按钮,输入密码或者都行,装源重装进入设置界面。码键
2、源码进入其他设置。开源
3、键重关键一步连着按5下右键,装源重装出现了一个USB调试选项,码键打上勾。源码
4、开源基本设置里面勾上无线,链接上你的WIFI。
5、打开TV盒子助手点自动搜索找到创维机顶盒E(盒子和电脑要在同一个网络下)。
6、然后打开TV盒子助手上“安装应用”找到当贝市场apk并确认安装即可。
三星手机数据线 通用吗
创维e网络机顶盒刷机软件可以用TV盒子助手。
1、按遥控器的设置按钮,输入密码或者都行,进入设置界面。
2、进入其他设置。
3、关键一步连着按5下右键,出现了一个USB调试选项,打上勾。
4、基本设置里面勾上无线,链接上你的WIFI。
5、打开TV盒子助手点自动搜索找到创维机顶盒E(盒子和电脑要在同一个网络下)。
6、然后打开TV盒子助手上“安装应用”找到当贝市场apk并确认安装即可。
手机的操作系统有哪些?
三星手机的数据线一般分5大类 就是S D T X E,各个系列都是不一样,但是一个系列的就可以通用
三星各种数据线 对应手机型号:
PCBLBE/C : E-E-S-X-X-X-X-E-E-E-E-d
PCBLBE/C :V-S-S-S-Sm-E-P-P-X-X-X-D-d-E-E-e-E-E-A-D-C-C-T-T-X-C-X
PCBDBE/C : T N T T N R R (大部分手机已停产)
PCBBSE/C :D;E(这是USB口的传铃声线,不能刷机)(D和E刷机线是COM口的,由,线改装来的)(这个型号也有国产的是COM口的)
PCBUBC:D USB口的(C网X机器的数据线可用于D)可传图,铃,MP3,3GP。不能刷机!
PCBNSE: E P E COM口的(未验证过市场上很少有,应该也是可传图,铃,MP3,3GP。可以刷机)
PCBBSE:E P E USB口的(有关E见第三部分注4)
PCBLBE/C : A
PCBLBE : S (数据线和手机已停产)
PCBLBE/C;PCBDBE/C : P C COM口的 注5
BCHBSEC/STD: E (这个国内暂时还没有) COM口的
PCBBSEC/STD: E(水货型号)E(行货型号) COM口的
怎么样把安卓手机QQ显示为IPHONE在线?
1.Symbian:
目前的Symbian系统经过NOKIA公司的大力推广,已经十分成熟。从已经由SeriesS,发展到S、S和UIQ。需要注意的微蜗居源码是,并不是所有的Symbian系统都是智能系统,比如早期的S系统,就不属于智能手机系统。
代表机型:NOKIA N系列大部分机器和E系列
2.Smart Phone:
微软于年推出的智能手机操作系统。具有windows血缘,所以有着十分强大的于台式机的可同步性,娱乐方面功能出众。
代表机型: 多普达5X5系列;Motorola MPX
3.PocketPC:
作为PDA专用系统Windows CE在手机上的一个延伸,WM系统的推出可以看出微软对于智能手机操作系统市场的重视。
代表机型:多普达S1、P,夏新、联想均有涉及。
4.Palm:
这种系统对硬件的要求很低,因此在价格上能很好的控制,耗电量也很小。Palm系统最大的优势在于出现较早,有独立的PALM掌上电脑经验,所以其第三方软件极为丰富,商务和个人信息管理方面功能出众,并且系统十分稳定。
代表机型: Treo系列智能手机,,等。
5.Linux:
Linux具有源代码开放、软件授权费用低、应用开发人才资源丰富等优点,便于开发个人和行业应用。由于起步太晚,没有太雄厚的软件基础。
代表机型:摩托罗拉A、A、E2,飞利浦。
6.iPhone:iPhone是一款革命性的移动电话,用户只需点按某个姓名或号码就能拨打电话。iPhone能够从PC、Mac(R)或因特网服务供应商(例如Yahoo!)同步你的所有联系信息,让你始终拥有完整的最新联系信息列表。此外,你还可以针对最频繁拨打的电话建立一个喜欢的电话列表,把这些电话合并在一起召开电话会议。
代表机型:iPhone
7.Android
Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。
代表机型:谷歌G1
电视机顶盒用什么软件刷机
可以按照如下方式进行操作:1、下载并打开RE管理器。
/iknow-pic.cdn.bcebos.com/7c1edb0efbd5fab4ccdacbdb3de2"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/7c1edb0efbd5fab4ccdacbdb3de2?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/7c1edb0efbd5fab4ccdacbdb3de2"/>
2、打开“RE管理器”,在根目录里,查看是否“挂载为可读写”,如否,则点击“挂载为可读写”按钮,使按钮左边变为“已挂载为可读写”。
/iknow-pic.cdn.bcebos.com/cf1b9dfdfaafe9e7dd8deeff7aff"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/cf1b9dfdfaafe9e7dd8deeff7aff?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/cf1b9dfdfaafe9e7dd8deeff7aff"/>
3、找到文件夹“system”并打开,在其中找到文件“build.prop”。
/iknow-pic.cdn.bcebos.com/c2cec3fdfcacbd3d8aa4cd1ee2"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/c2cec3fdfcacbd3d8aa4cd1ee2?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/c2cec3fdfcacbd3d8aa4cd1ee2"/>
4、长按文件“build.prop”,卖公司 源码在弹出的选项中,点击“打开方式”,选择“文本编辑器”。
/iknow-pic.cdn.bcebos.com/c6a7efce1b9decfedebf8dc4"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/c6a7efce1b9decfedebf8dc4?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/c6a7efce1b9decfedebf8dc4"/>
5、进入文本编辑器后,拉到文件顶部,找到并将“ro.product.model=”后面的部分修改为“6”,找到并将“ro.product.manufacturer=”后面的部分修改为“iPhone”。
/iknow-pic.cdn.bcebos.com/cf1b9dfdfaafedc8deeff7ac4"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/cf1b9dfdfaafedc8deeff7ac4?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/cf1b9dfdfaafedc8deeff7ac4"/>
怎么取消安卓qq消息提示:
1.进入手机主界面,选择“设置”。
/iknow-pic.cdn.bcebos.com/abdf9e2fabaebf"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/abdf9e2fabaebf?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/abdf9e2fabaebf"/>
2.进入设置界面,选择“通知和状态栏”。
/iknow-pic.cdn.bcebos.com/ddae8fb5c9eacebfb6"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/ddae8fb5c9eacebfb6?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/ddae8fb5c9eacebfb6"/>
3.进入通知和状态栏设置界面,选择“通知智能管理”。
/iknow-pic.cdn.bcebos.com/ced3dbdeceaccb7f3"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/ced3dbdeceaccb7f3?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/ced3dbdeceaccb7f3"/>
4.在应用中点击“QQ”。
/iknow-pic.cdn.bcebos.com/6acebf8ceb0dd4f9daa7b6"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/6acebf8ceb0dd4f9daa7b6?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/6acebf8ceb0dd4f9daa7b6"/>
5.进入详情设置界面后,将“允许通知”右侧滑块关闭即可关闭消息提醒功能。
/iknow-pic.cdn.bcebos.com/6afbcbfacfd9f9a1b6"target="_blank"title=""class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/6afbcbfacfd9f9a1b6?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_%2Ch_%2Climit_1%2Fquality%2Cq_%2Fformat%2Cf_auto"esrc="/6afbcbfacfd9f9a1b6"/>
网络机顶盒怎样刷机重装系统
先安装刷机工具软件:PhoenixSuitPacket,安装后会在桌面生成快捷方式,双击图标。软件打开就是这样的界面。点击工具栏第二项:一键刷机。点击浏览,选择好合适你网络机顶盒对应型号合适的固件(推荐使用厂家提供的对应固件)。选择好固件后,点击下面的《立即刷机》按钮,这时候会弹出一个对话框,询问是否刷机,这时候先不要点是。
这时候把牙签顶住复位孔(这款机顶盒的复位孔在机顶盒的下面,有的机顶盒还需要插上电源线,这款迪优美特S8不需要插电源线),然后插上USB线,点击软件对话框的是,软件会检测到连接的机顶盒,系统会再次弹出对话框,是否格式化,选择后,电脑上会出现刷机进度条,此时要耐心等待几分钟,千万不要断电或者拔掉USB连接线。看到进度条跑到%就行了。刷机成功后系统会提示“固件烧写成功”。
刷完固件,插上电源、连接HDMI线、网线,开机测试机子。第一次开机可能有些慢,开机进入系统后点击“一键安装”耐心等待几分钟就可以了。第一次进去遥控器可能会有些迟钝,这个是正常的,因为后台还没有启动完,过1分钟就正常了。
1、线刷固件包哪里下载,在百度上搜索“XXX(型号)线刷包,下载时特别注意别下载错了,一定要与机顶盒的芯片相对应。
2、在电脑端下载线刷工具,redis windows 源码完成后解压文件,打开文件并找到“PhoenixSuit”双击打开,双击打开刷机工具之后,会出现下面的窗口,下载机顶盒线刷固件(最好并保存到桌面),然后点击一键刷机工具的“浏览”,找到下载好的刷机固件。
3、翻开盒子的背面(或者底部),找到强刷按钮,通常情况下是盒子上最小的一个孔,用事先准备好的牙签按住顶住该按钮不松手。
4、拿出准备好的双头USB数据线,一头接入机顶盒USB接口上(靠近网络接口的那一个),令一头连接电脑USB接口,接着电脑上会显示已连接,此时松开强刷按钮。若没有连接成功,请检查是否按住盒子上的强刷按钮,或者USB接口连接不对,重新试一遍。
5、如一切正常这时候,电脑上会连续弹出多个窗口,按照系统提示依次点击“是”即可,然后会出现一个刷机的进度条,耐心等待,最后电脑会显示“固件烧写成功。
扩展资料:
电视盒子是一个小型的计算终端设备,只要简单的通过HDMI或色差线等技术将其与传统电视连接,就能在传统电视上实现网页浏览、网络视频播放、应用程序安装,甚至能将你手机、平板中的照片和视频投射到家中的大屏幕电视当中。
刷机,手机方面的专业术语,是指通过一定的方法更改或替换手机中原本存在的一些语言、、铃声、软件或者操作系统。通俗来讲,刷机就是给手机重装系统。刷机可以使手机的功能更加完善,并且可以使手机还原到原始状态。一般情况下Android手机出现系统被损坏,造成功能失效或无法开机,也通常通过刷机来解决。一般Andriod手机刷机分为线刷,卡刷,软刷和厂刷。
机顶盒刷机用什么软件
adb安装软件,实现刷机
ADB英文全称是AndroidDebugBridge,是Android通用调试工具。机顶盒开启adb调试模式后,在电脑上用adb命令行软件就可以连接到机顶盒后台,安装程序软件。adb命令行,开迅源码类似dos窗口,需要记住一些晦涩的命令。我们可以使用一个小软件,TV盒子助手,输入机顶盒IP连接到机顶盒,其本质还是adb命令行通讯。因此,这种刷机方法,用TV助手比较好。
创维e网络机顶盒刷机软件创维机顶盒E破解刷机安装教程
创维e网络机顶盒刷机软件可以用TV盒子助手。
1、按遥控器的设置按钮,输入密码或者都行,进入设置界面。
2、进入其他设置。
3、关键一步连着按5下右键,出现了一个USB调试选项,打上勾。
4、基本设置里面勾上无线,链接上你的WIFI。
5、打开TV盒子助手点自动搜索找到创维机顶盒E(盒子和电脑要在同一个网络下)。
6、然后打开TV盒子助手上“安装应用”找到当贝市场apk并确认安装即可。
移动机顶盒怎么刷机?
问题一:移动机顶盒怎么刷机智能机顶盒刷机方法:
烧录所需工具:电脑、牙签、USB线(两头都是USB接口,公对公)、网络机顶盒。(USB两***线可以自制:一般的USB连接线一头是USB接头,另一头是其它接口,两根闲置的USB连接线,剪掉另外一头的其它接口,把4根颜色一样的接一起就可以。)
1、先安装工具软件:PhoenixSuitPacket,安装后会在桌面生成快捷方式,如图,双击图标;
2、软件打开就是这样的界面;
3、点击工具栏第二项:一键刷机;
4、点击浏览,选择好合适你网络机顶盒对应型号合适的固件(推荐使用厂家提供的对应固件);
5、选择好固件后,点击下面的《立即刷机》按钮,这时候会弹出一个对话框,询问是否刷机,先不要选择“是”;
6、把牙签顶住复位孔(这款机顶盒的复位孔在机顶盒的下面,有的机顶盒还需要插上电源线,这款迪优美特S8不需要插电源线),然后插上USB线,点击软件对话框的是,软件会检测到连接的机顶盒,系统会再次弹出对话框,是否格式化,选择后,电脑上会出现刷机进度条,此时要耐心等待几分钟,千万不要断电或者拔掉USB连接线。看到进度条到%就可以,烧录成功后系统会提示“固件烧写成功”;
7、刷完固件,插上电源、连接音视频线或HDMI线、网线,开机测试机子。第一次开机可能有些慢,开机进入系统后点击“一键安装”耐心等待几分钟就可以了。第一次进去遥控器可能会有些迟钝,这个是正常的,因为后台还没有启动完,过1分钟就正常了。
备注:烧录过程千万不能断电和拔掉USB连接线,而且固件最好是到官网下载最新版本。
问题二:中国移动的机顶盒怎么刷机。拿到移动公司就可以了
问题三:求助移动机顶盒如何刷机电脑安装甜椒,连接手机,选择ROOT破解,
然后选择ROM资源,下载并一键ROM刷机就可以了。。。
刷机工具可以用XIAZAIBA的。
ROM可以用ROM之家的,刷机专家的。。。
黑屏的话,可以使用其他刷机工具,只要认到手机,就可以刷机,,,实在不行到论坛学热键卡刷,就是开机键+音量加或者减键,选择SD下ZIP刷机就可以。。。
问题四:中国移动送的cms机顶盒怎么刷机刷机步骤(线刷):
①在电脑下载一个线刷宝
②在关机状态下长按电源键跟音量减键5秒会自动进入一个有安卓机器人的界面
③用数据线连接手机
④线刷宝会识别出手机型号并且给出相应的刷机包点下载就可以
⑤下载完成之后点刷机就可以等到电脑显示刷机成功了就可以拔下手机。
问题五:我有所有移动机顶盒的刷机包.但是不知道怎么破解手机刷机方法:先关机,然后按住音量减键,再同时按开机键,即可进入recovery恢复模式。
用音量键移动光标到第四项,按开关键确认选择进入“Flashzipfromsdcard”。进入Flashzipfromsdcard之后,找到刚才重命名的update.zip文件,然后按开关键选择。选择update.zip后,然后再按下开关键,就开始自动安装系统刷机了。
问题六:来个大神,移动送的视加机顶盒怎么刷机或破解运营商的机顶盒
还是丢掉算了.
问题七:移动烽火网络机顶盒怎么刷机上智能电视网看看上面有刷机教程然后可以在盒子上装一个当贝应用市场上面全都是电视应用需要什么直接下载就好了想看什么直接搜直播点播都是有的看的应用也是非常全的不仅仅是看电视试试看
问题八:移动的电视机顶盒到期后可以刷机成别的盒子吗尊敬的用户您好,不可以,机顶盒不可以通过刷机变化信号接收方法,
中国电信提供最优质的网络通讯服务,老友换新机,网龄抵现金,百兆宽带免费体验,超清电视iTV,电信活动可以直接通过电信营业厅或者实体营业厅查询。
问题九:移动百视通机顶盒怎么刷机后面有没有个小眼
好了,关于“创维手机e”的话题就讲到这里了。希望大家能够对“创维手机e”有更深入的了解,并且从我的回答中得到一些启示。
å®åä¹å®¶å®ç½ï¼
å®åç³»ç»ç®åæé«ççæ¬æ¯å¤å°ï¼
å®åç³»ç»ç®åæé«ççæ¬æ¯8.0ï¼æ¯è°·ææ¨åºçæºè½ææºæä½ç³»ç»ã
Androidï¼['?ndr?id]ï¼æ¯ä¸ä¸ªä»¥Linux为åºç¡çåå¼æºæä½ç³»ç»ï¼ä¸»è¦ç¨äºç§»å¨è®¾å¤ï¼ç±Googleåå¼æ¾ææ设å¤èçå¼åä¸é¢å¯¼ãAndroidç³»ç»æåç±å®è¿ªÂ·é²å®¾ï¼AndyRubinï¼å¶ä½ï¼æå主è¦æ¯æææºãå¹´8ææ¥è¢«Googleæ¶è´ãå¹´æ5æ¥ï¼Googleä¸å®¶ç¡¬ä»¶å¶é åã软件å¼åååçµä¿¡è¥è¿åç»æå¼æ¾ææ设å¤èçï¼OpenHandsetAllianceï¼æ¥å ±åç åæ¹è¯Androidç³»ç»å¹¶ç产æè½½Androidçæºæ §åææºï¼å¹¶éæ¸æå±å°å¹³æ¿çµèåå ¶ä»é¢åä¸ãéåï¼Google以Apacheå è´¹å¼æºè®¸å¯è¯çæææ¹å¼ï¼åå¸äºAndroidçæºä»£ç ã
ç®åå®åç³»ç»å æçæé«ä¸ºAndroid6.0ã
å°åºç³»ç»ä¹å®¶çå®ç½ç½åæ¯åªä¸ªç³»ç»ä¹å®¶ä¸é®éè£ å®ç½æ¯.
1ãä½ ä¸è½½è½¯ä»¶ç³»ç»ä¹å®¶ä¸é®éè£ ç³»ç»ï¼å®è£ æ¥éª¤å¦ä¸ï¼
2ãæå¼æµè§å¨ï¼è¾å ¥ç³»ç»ä¹å®¶ä¸é®éè£ ç³»ç»ï¼æ¾å°ç¸å¯¹åºçå®ç½ï¼æå¼ä¸è½½å°±å¯ä»¥äºã
3ãä¸è½½å®æåï¼è½¯ä»¶èªå¨æ£æµçµè软硬件ç¯å¢ä»¥åçµèç½ç»è¿éç¶æï¼å®æåç¹å»ä¸ä¸æ¥æé®ã
4ãè¿å ¥èµæå¤ä»½çé¢ï¼ä½ å¯ä»¥å¤ä»½ä¹å¯ä»¥ä¸å¤ä»½ãä¸æ³è¦ä»¥åçèµæå°±ä¸éè¦å¤ä»½ï¼
5ãè¿å ¥ç³»ç»ä¸è½½å表çé¢ï¼æ ¹æ®éæ±ä»¥åçµèé ç½®æ åµéæ©éåä½ çç³»ç»çæ¬ï¼ç¹å»å³è¾¹çâå®è£ æ¤ç³»ç»âï¼
6ãå½ç¶æ ¹æ®æ¯ä¸ªç¨æ·ç»ç«¯çç½ç»å¸¦å®½ä¸åä¼æå¾å¤§å·®å¼ï¼å¨ä¸è½½è¿ç¨ä¸èå¿çå¾ ï¼
7ãä¸è½½å®æåå¼¹åºæ¯å¦éå¯å®è£ ï¼ç¹å»âç«å³éå¯âï¼çµèå°èªå¨è¿è¡å®è£ ï¼
å®åä¹ç¶æ¯è°å®åç³»ç»ä»ç»å®åä¹ç¶æ¯é²å®¾ãå®åæä½ç³»ç»æåæ¯ç±AndyRubinå¼åçï¼æå主è¦æ¯æææºãå¹´ï¼è°·ææ¶è´å¹¶æ³¨èµï¼å¸å¼å¤å®¶ååç»æå¼çææºèçè¿è¡åå±åå®åï¼å¹¶éæ¥åå¹³æ¿çµèçé¢å延伸
Androidæ¯åºäºLinuxå æ ¸(ä¸å æ¬GNUç»ä»¶)çå è´¹å¼æºæä½ç³»ç»ã主è¦åºç¨äºæºè½ææºãå¹³æ¿çµèç移å¨è®¾å¤ï¼ç±è°·æåå¼æ¾ç§»å¨èç主导å¼åãAndroidæä½ç³»ç»æåç±AndyRubinå¼åï¼ä¸»è¦æ¯æææºãå¹´8æ被谷ææ¶è´å¹¶æèµãå¹´æï¼è°·æä¸å®¶ç¡¬ä»¶ååã软件å¼åååçµä¿¡è¿è¥åç»æå¼æ¾ææºèçï¼å ±åå¼ååå®åAndroidç³»ç»ãç¶åè°·æå¨Apacheå¼æºè®¸å¯ä¸åå¸äºAndroidæºä»£ç ã第ä¸æ¬¾Androidæºè½ææºäºå¹´æåå¸ãAndroidå·²ç»éæ¸æ©å±å°å¹³æ¿çµèçé¢åï¼å¦çµè§ãæ°ç ç¸æºã游ææºãæºè½æ表çã年第ä¸å£åº¦ï¼Androidç³»ç»çå ¨çå¸åºä»½é¢é¦æ¬¡è¶ è¿å¡çç³»ç»ï¼ä½å± ä¸ç第ä¸ã年第åå£åº¦ï¼Androidå¹³å°ææºçå ¨çå¸åºä»½é¢å·²è¾¾.1%ãå¹´9ææ¥ï¼è°·æå¼åçæä½ç³»ç»Androidå¨å¹´åºç¥äºå®çäºå²çæ¥ï¼å ¨ç使ç¨è¯¥ç³»ç»ç设å¤æ°éå·²ç»è¾¾å°äº¿ã
Androidç³»ç»ç±è°·æåå¼æ¾ç§»å¨èç主导åå¼åãAndroidæ¯åºäºLinuxå æ ¸(ä½ä¸å æ¬GNUç»ä»¶)çå è´¹å¼æºæä½ç³»ç»ãAndroidç³»ç»å ·æå¼æ¾ã硬件丰å¯ãå¼åæ¹ä¾¿çä¼ç¹ã
å°ç±³ææºæä¹å¼ºå¶cpuågpuæé«æ¨¡å¼è¿è¡è¾£å
é¦é¡µå®åä¹å®¶å®åææº
å°ç±³9å¦ä½å¼å¯GPUè¶ é¢æ¨¡å¼
--:ITä¹å®¶(沧海)
ITä¹å®¶5ææ¥æ¶æ¯æ®å°ç±³ç¤¾åºæ¶æ¯ï¼å°ç±³9该å¦ä½æå¼GPUè¶ é¢æ¨¡å¼å¢ï¼è¿ééè¦åç¨ä¸æ¬¾ç¬¬ä¸æ¹å·¥å ·âå建快æ·æ¹å¼âï¼éè¿è¯¥å·¥å ·æ¥æ索活å¨ï¼æ£æµæ¯å¦æâGPUè¶ é¢âæ´»å¨é¡¹ã
ä¸ãæ¥è¯¢ææºæ¯å¦æGPUè¶ é¢æ¨¡å¼
æ¥éª¤ä¸ï¼æå¼å建快æ·æ¹å¼Appâå¾éå¼å¯æç´¢âæªå¯¼åºçæ´»å¨âé项âå¨é¡¶é¨æç´¢æ¡è¾å ¥GPUæç´¢
æ¥éª¤äºï¼å¨CITå表éæ¾å°æå«æâGPUMaxfreqâçæ´»å¨å³è¡¨ç¤ºæGPUè¶ é¢âå¦æCITå表é没æGPUç¸å ³æ´»å¨åç³»ç»æªé è¶ é¢æ¨¡å¼ã
äºãROOTç¨æ·å¼å¯è¶ é¢æ¨¡å¼
éè¿å建快æ·æ¹å¼Appæ索活å¨æ¥ç¡®å®ææºéèæâGPUè¶ é¢â模å¼ï¼ç±äºâGPUè¶ é¢â模å¼æ¯éèç¶æï¼ä¸è½ç´æ¥ä½¿ç¨âå建快æ·æ¹å¼âAppç´æ¥æå¼ï¼éè¦ç»âå建快æ·æ¹å¼âAppæäºç³»ç»ROOTæéï¼MIUIå¼åç解BLéåï¼å¯ç´æ¥æ¿æ´»ROOTã
æ¥éª¤ä¸ï¼æå¼å®å ¨ä¸å¿âæé管çâROOTæé管çâç»âå建快æ·æ¹å¼âAppæ·»å ROOTææï¼
æ¥éª¤äºï¼éè¿å建快æ·æ¹å¼æç´¢å°âGPUè¶ é¢â模å¼æ´»å¨åâç¹å»è¯¦æ âç¹å»æå¼âä¹å¯ä»¥å建å¾æ è³æ¡é¢ä¸æ¬¡ç´æ¥å¼å¯æè å ³éã
ä¸ãéè¿ä»£ç å¼å¯è¶ é¢æ¨¡å¼
éè¿å建快æ·æ¹å¼Appæ¥æå¼âGPUè¶ é¢âï¼ç±äºéè¦ROOTï¼æ以MIUI稳å®çç¨æ·ãMIUIå¼åçæªè§£BLéç¨æ·åæ æ³å¼å¯ãå¼å¯éèåè½çå¦å¤ä¸ä¸ªéå¾å°±æ¯â代ç âï¼éè¿å¨æ¨å·å¨è¾å ¥æå®ä»£ç å¼å¯ï¼ä¸é¢ä»¥å°ç±³9为ä¾æ¼ç¤ºéè¿â代ç âæå¼ç³»ç»éèçâGPUè¶ é¢â模å¼ï¼
æ¥éª¤ï¼æå¼æ¨å·âè¾å ¥â*#*##*#*ââå¨å¼¹åºå¯¹è¯æ¡éé项å¼å¯å³å¯âä¸ç¨æ¶è®°å¾å ³éã
åãæ®é模å¼ä¸è¶ é¢æ¨¡å¼è·å对æ¯
GPUæçæ¯å¾åå¤çå¨ï¼è´è´£å¾åè¿ç®å·¥ä½ï¼èâGPUè¶ é¢âå°±æ¯æ使GPUçæ大工ä½é¢çï¼å¼å¯è¶ é¢ä»èæåææºæ§è½ãæ们ä¸é¢éè¿å®å å è·åæ¥ç´æ¥å¯¹æ¯ï¼ç´è§çäºè§£GPUè¶ é¢åæåç主è¦æ¯åªæ¹é¢æ§è½ãå·¦å¾æ¯æ£å¸¸è·åï¼å³å¾æ¯å¼å¯GPUè¶ é¢åè·åã
å¼å¯GPUè¶ é¢åï¼å°ç±³9è·åé«è¾¾ä¸ï¼éè¿å¯¹æ¯ï¼è¶ é¢åGPUè·åæ´æ´å¢å äºåã
äºã强å¶GPU渲æä¸è¶ é¢æ¨¡å¼å¯¹æ¯
éè¿ä¸é¢å¯¹æ¯ï¼ç¸ä¿¡å¤§å®¶å¯¹GPUè¶ é¢æä¸å®ç认è¯ï¼å¨MIUIç³»ç»éï¼è¿æä¸ä¸ªé项æ¯é对GPU设å®çï¼å®å°±æ¯å¼åè é项éçâ强
ç¥æ¯ä¹å®¶å®åæä¹ä¸è½½ç¥æ¯ä¹å®¶å®åå¨å®ç½ä¸è½½ã
é¦å æå¼ç¥æ¯ä¹å®¶å®ç½ï¼ç¶åæ¾å°ç¥æ¯ä¹å®¶çå®åçæ¬ï¼ç¶åç¹å»ä¸è½½å®è£ å³å¯ã
å®åæ¯ä¸ç§åºäºLinuxå æ ¸ï¼ä¸å å«GNUç»ä»¶ï¼çèªç±åå¼æ¾æºä»£ç çæä½ç³»ç»ã
å¨çº¿ä¹å®¶å®åå¯ä»¥çåçµè
å¨çº¿ä¹å®¶å®åå¯ä»¥çåçµè
å ·ä½è§£çå¦ä¸
å¨çº¿ä¹å®¶appæ¯ä¸æ¬¾é常好ç¨çææºå 费追å§ç¥å¨appãæ¯å¯ä»¥å¨å®åç³»ç»ççµèä¸è¿è¡çãå¯ä»¥æ£å¸¸å®è£ ä¸è§ç
一次vue-cli4项目升级到vite的经历
背景
使用vue-cli4的项目,业务写多了之后开发运行和打包都慢了很多,为了提升开发体验以及更新团队技术框架,需要升级到更高级的脚手架上,两种方案:一是升级到vue-cli5,二是升级到最新的vite。
其中第一种方案升级简单,经过实验,打包的速度不升反慢,这可能和项目中的有依赖以及业务代码有关。
第二种方案升级vite,经过可行性调查,升级到vite的成功率非常高,最后决定从vue-cli4升级到vite,这是一个高风险高回报的事情,因为尽管市面上已存在很多升级成功的案列,但是每个项目都不一样,我们的项目也很庞大,依赖很多,并没有%升级成功的把握。而升级成功的回报也很显而易见,开发环境几乎秒运行,开发体验得到了显著提升。
升级前后对比||vue-cli4|vite||---|---|---||开发启动时间|ms|ms||生产打包时间|s|s||打包体积|.6MB|.6MB||运行期间同一代码改动编译时间|ms|瞬时|
生产环境打包时间可能和我们项目中用到了太多vite插件有关系,但开发环境的提升非常显著。
项目状况项目中用到的Vue2,VueCli版本:4.5.,版本更新时间为.5.8,vueCli4的最后版本为4.5.(.3.),依赖的webpack版本为^4.0.0
组件库使用vant,依赖Less预处理器,通过vue.config.js配置设置了less主题色,在webpack仅支持less-loader@5版本以及对应的less版本
业务css预处理器为stylus:"^0..5",对应stylus-loader:"^3.0.2"
进行了多页打包(MPA)
使用了workbox-webpack-plugin插件配置了PWA:WorkboxWebpackPlugin
配置了多个路径映射(alias别名)
指定了文件输出路径以及hash配置
生产环境下关闭productionSourceMap以及css的sourceMap提升打包速度
proxy开启多个代理
用到了.env文件中的环境变量
按照开发规范忽略部分文件后缀以及index.js
移除了preload脚本
期望结果可以使用vite进行开发和打包
仍保留webpack打包功能(因为项目太大,不能保证升级到vite后会不会有问题,所以仍希望webpack原本功能正常运行)
准备工作升级Node版本,vite只支持node及以上,建议升级到v以上。
安装pnpm工具,pnpm作为更好的npm依赖管理工具,是目前npm和yarn的最好替代品,且有些依赖包使用npm安装时会有异常,使用pnpm安装可解决:pnpm
小项目尝试一键转换升级:wp2vite、webpack-to-vite,这两个工具都提供了一键将webpack项目转成vite的能力,但对于大中型项目,并不可靠。
开始行动1.安装必要依赖pnpm?add?vite-plugin-env-compatible?vite-plugin-html?vite?vite-plugin-vue2?--devvite-plugin-vue2是处理vue2版本代码的插件,如果项目中是vue3,安装的依赖有所不同,请参考webpack-to-vite
2.复制html到根目录,并修改 注意是复制,并只改动复制后的html,这样才不会破坏原有webpack功能。修改复制后的html,增加对应的js文件引用,注意type属性不能少!
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>多页打包(MPA),其他页面的html同样操作,不同html引入对应的js即可。
3.新增vite.config.js文件,开始迁移最重要的配置部分空配置如下:
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ })4.修改环境变量环境变量主要面临两个问题:
要兼容webpack和vite的环境变量用法
解决方法:使用vite插件vite-plugin-env-compatible,让vite中可以使用webpack中读取环境变量的方式,再配合envPrefix配置,让vite可以读取到VUE_APP_开头的环境变量:
?pnpm?add?vite-plugin-env-compatible?-D?import?{ ?defineConfig?}?from?'vite'?import?envCompatible?from?'vite-plugin-env-compatible'?export?default?defineConfig({ plugins:?[?envCompatible()],envPrefix:?['VUE_APP_']?//?很重要?})?//?mian.js测试?console.log(process.env.VUE_APP_UNION_STATS)?console.log(import.meta.env.VUE_APP_UNION_STATS)两个打印都得到了正确的结果,注意:vite中默认只能读取到VITE_开头的环境变量,如果不配置envPrefix,则会导致第二个打印为undefind。
vite.config.js中不能读取到环境变量
vite.config.js是无法直接通过import.meta.env和process.env获取环境变量的,我们需要通过vite的loadEnv获取。
我们需要将vite.config.js的导出对象改为函数:
?import?{ ?defineConfig,loadEnv?}?from?'vite'?export?default?({ ?mode?})?=>?{ ?const?isPro?=?mode?===?'production'?//?我们可以通过mode直接判断当前是不是生产环境,注意mode可以在运行指令中指定:`vite?build?--mode?master`,如果没有指定,那默认打包就是production?function?getEnv(key)?{ ?//?定义获取环境变量的方法?return?loadEnv(mode,?process.cwd(),'')[key]?//?第三个参数非常重要,下面有详解?}?return?defineConfig({ ?base:?getEnv('VUE_APP_PUBLICPATH'),?//?读取环境变量?//?...忽略其他代码?})?})loadEnv有三个参数,前两个参数基本固定不变,而第三个参数默认情况下是不需要传的,只有在配置了envPrefix项,读取非VITE_开头的变量时才需要,在loadEnv源码中我们可以看到,第三个参数是prefixes:string|string[]='VITE_',也就是环境变量的前缀,默认是VITE_。
如果你的项目和我一样,读取了VUE_APP_PUBLICPATH这样非VITE_开头环境变量,就在loadEnv的第三个参数传递空字符串即可,这样就能读取到所有的环境变量了。
5.兼容commonjs代码项目中有用到commonjs规范的依赖,比如letmd5=require('js-md5').create(),webpack是基于node开发的,支持require语法,在打包的时候webpack也会正确处理这部分代码,但在vite中不会,所以需要将这部分代码改成importmd5from'js-md5'
项目开发环境下,一些node_modules中的包也会存在commonjs的代码,我们可以通过vite的插件?vite-plugin-commonjs来实现这部分代码的转化,保证开发环境的正常运行。
pnpm?add?@originjs/vite-plugin-commonjs?--dev//?vite.config.js?忽略其他代码import?{ ?viteCommonjs?}?from?'@originjs/vite-plugin-commonjs'export?default?({ ?mode?})?=>?{ return?defineConfig({ plugins:?[//?...viteCommonjs()?//?兼容vite中的cjs导入语法]})})6.解决css预处理的问题vite内置了对主流css预处理器的支持(sass/less/stylus),项目使用预处理器时,只需要安装对应预处理依赖即可:
#?.scss?and?.sasspnpm?add?sass?-D#?.lesspnpm?add?stylus?-D#?.styl?and?.styluspnpm?add?stylus?-D比较巧的是,我们项目中用到的Stylus的@import别名的语法和vite冲突,@import'~@/public/stylus/mixins'这样的代码是会报错,一开始我找到了插件,可以帮助我们解决这个问题:vite-plugin-stylus-alias,但是都后面打包的时候发现这个插件有副作用,后面采取了其他方法解决。
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>0<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>1使用这个插件会导致无法生成sourcemap文件,在打包的时候可以看到警告:Sourcemapislikelytobeincorrect:aplugin(vite-plugin-stylus-alias)wasusedtotransformfiles,butdidn'tgenerateasourcemapforthetransformation.Consulttheplugindocumentationforhelp,鉴于插件作者已经很久没有更新,建议能改成相对路径还是直接改,如果引用地方较多,可以定义文件为全局styl文件最新解决方案:一般出现这个报错是因为插件使用了vite的transformapi转换代码,但是return值缺失导致,解决方法:复制插件代码到项目中,在插件transform函数return的结果中,返回map:null,然后再vite.config.js中引用项目中修改后的插件,即可完美解决,如下:文末解决bug有细说
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>2定义stylus全局文件
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>3这里需要注意,官方文档中css-preprocessoroptions写的是使用文件名拓展名作为key,stylus的文件拓展名是styl,但是我使用了stylus作为key并不会有问题,相反使用styl作为key则不生效了,后续这个地方可以留意一下。
在vite源码中,stylus和styl都进行了判断,理论上都可以使用,但目前测试的结果就是styl作为key不生效,可能源码中其他地方还能找到原因。
7.组件库按需导入和定制主题我们项目中用到的组件库是Vant2,该组件库依赖Less,以及通过配置文件来定制组件的主题,在配置中我们需要进行修改:
vue-cli中的主题配置部分如下:
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>4vite中主题配置部分如下:
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>5按需导入项目中按需导入vant组件库,组件可以成功导入,但是组件的样式缺失了,这是因为在webpack中,babel-plugin-import插件帮我们实现了组件的样式导入,在vite中使用?vite-plugin-style-import插件帮我们实现这个功能,不仅vant组件库,其他诸如element、antv等组件库也可以使用这个插件进行按需导入:
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>6<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>.修改alias别名配置,以及忽略文件后缀vite配置别名的方法和vue-cli有所不同,且没有默认的别名,都需要通过配置实现,且vite默认不能忽略文件后缀导入,我们也需要通过修改配置来实现:
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>8需要注意extensions配置的顺序,从左到右进行匹配,如果存在同名但类型不同的文件,很可能得到期望外的结果,比如同目录下存在index.js和index.vue,按上面的顺序,import'./index?会优先匹配到index.js文件。这种情况建议补全后缀进行导入。
9.配置前端跨域vite配置跨域和webpack也有出入,需要修改配置
<!--?忽略一些代码?--><body><div?id="app"></div>++?<script?type="module"?src="/src/main.js"></script>?++</body>9以上就是几种常见的跨域配置方式,webpack中的devServer改为了server,webpack的proxy中的pathRewrite改成了rewrite,并且类型成为了函数,在函数中返回请求的路径即可。
.多页打包以及打包的其他配置vite在build.rollupOptions配置多页打包,参考rollupOptions,其他配置参考文档
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ }).配置运行路径base是指项目运行在服务器的哪个路径下,一般通过从环境变量中动态获取。
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ }).配置EsLintvite中使用vite-plugin-eslint插件实现eslint的检查功能,安装过程中发现vite-plugin-eslint@1.4.0会报错,安装1.3.0版本即可。
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ })2import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ }).使用插件@vitejs/plugin-legacy兼容低版本浏览器plugin-legacy文档
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ }).配置运行指令import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ })5可以在指令中声明mode环境,这个mode在vite.config.js中可以得到,具体可以参考前面4.修改环境变量
保存运行指令npmrunserve开发环境已经可以跑起来了,但是vite的特性是你用到的页面才会进行打包,其他页面没有进行访问,是不会打包的,所以需要进行打包才能知道其他地方改造会不会有问题,打包如果有报错,再解决报错即可。
.解决报错globalisnotdefined
这个错误是在node_modules/buffer/index.js?v=ea7文件中抛出的,我查看了yarn.lock文件,依赖路径为多个vue-cli插件>webpack@4.0.0>node-libs-browser?>buffer
这个是依赖的问题,第一删除node_modules重新安装依赖。第二更换npm工具为pnpm重装依赖,如果仍不行,建议不建议webpack,删除掉webpack相关依赖。
网上还有一种做法是:在window对象上挂载global对象,可作为备选方案。
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ })6@import'~@vant/icons/src/encode-woff2.less';报错
这个错误是vant组件库中的icon组件抛出的,vite默认不能使用别名,我们在前面配置了别名,但是配置的是~@指向项目中的src目录,这样vant组件库的这个文件引用就找不到了。
issuesvant
解决方法:针对vant的这个文件,做一个别名,放到第一位,优先进行匹配:
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ })7运行vitebuild,css产生了一些警告。
警告分为两种,一是css中的属性拼写错误,诸如:color写成了colo,background写成了backgrounc,属于语法错误,根据警告提示搜索对应样式进行修改即可。
二是一些语法正确,但还不清楚为什么压缩时提示了警告:比如stylus修改scoped样式用的>>>语法,以及background?rgba(0,0,0,0.5)提示Unexpected"rgba("。
Thepackagemayhaveincorrectmain/module/exportsspecifiedinitspackage.json
这个错误是通过npminstall后运行vite指令报错的,用yarn安装一直很正常,原因是node_modules的某个包的package.json定义的main入口路径错了,所以找不到模块导入。
解决方法:针对这个模块,定义别名,指向正确的入口:
import?{ ?defineConfig?}?from?'vite'export?default?defineConfig({ })8打包后导入函数定义别名后,调用函数报错
import*asminByfrom'lodash.minby'代码报错了,而且只有在生产环境下才产生。
解决方法:暂时去掉别名,这应该和lodash的导出方式modules.export在vite中转化成ES语法的过程有关系。
importminByfrom'lodash.minby'
requireisnotdefine,通过require导入资源报错
前面在步骤5已经用了插件vite-plugin-commonjs转化common.js的代码了,require理应不会报错。
但是require导入资源算是webpack的功能,和js代码不一样,所以导入资源的代码都要进行修改:
require('./images/logo.png')改成importlogofrom'./images/logo.png'
这样的修改可以兼容webpack和vite,这是在现有项目中,改动的地方会达到上百处,非常麻烦。