You are building a fat APK that includes binaries for android-arm, android-arm64.
巴馬ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size.
To generate an app bundle, run:
? ? flutter build appbundle --target-platform android-arm,android-arm64
? ? Learn more on:
To split the APKs per ABI, run:
? ? flutter build apk --target-platform android-arm,android-arm64 --split-per-abi
? ? Learn more on:?
Initializing gradle...? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.3s
Resolving dependencies...? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 14.2s
Running Gradle task 'assembleRelease'...? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?: E:\work_tool\flutter\.pub-cache\hosted\pub.flutter-io.cn\connectivity-0.4.4\android\src\main\java\io\flutter\plugins\connectivity\ConnectivityPlugin.java???????????????? API??
?: ?й???????, ????? -Xlint:deprecation ???±???
?: E:\work_tool\flutter\.pub-cache\hosted\pub.flutter-io.cn\url_launcher-5.1.3\android\src\main\java\io\flutter\plugins\urllauncher\WebViewActivity.java?
??????????????? API??
?: ?й???????, ????? -Xlint:deprecation ???±???
Calling mockable JAR artifact transform to create file: C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\android.jar\baf414ed95f14e507d85c560886dfbe2\android.jar with input E:\work_tool\sdk\android-sdk-windows\platforms\android-28\android.jar
Calling mockable JAR artifact transform to create file: C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\android.jar\ab096bb3fb172ccb785acdb1058c10a9\android.jar with input E:\work_tool\sdk\android-sdk-windows\platforms\android-27\android.jar
Request to incrementing alive workforce from 0. Current workforce (dead or alive) 0
thread-pool size=4
ProGuard, version 6.0.3
Reading input...
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\flutter.jar\ab2691c929f4d2aa57a17fa551e662a6\jetified-flutter.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\app\intermediates\flutter\release\libs.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\localbroadcastmanager-1.0.0.aar\7a407f962902eada026a8e241a760bac\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\work-runtime-2.1.0.aar\8e3a1e8a8ff79006a94df6c01ceeb4f5\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\fragment-1.1.0.aar\4fa7d1b49e3514cb08c8a696f9b59436\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\room-runtime-2.1.0.aar\1b8774fa39759f08defb930275652eac\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\room-runtime-2.1.0.aar\1b8774fa39759f08defb930275652eac\jars\libs\room-common-java8-2.1.0.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\viewpager-1.0.0.aar\885186e7f6f969363bc93cd607d741a5\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\loader-1.0.0.aar\f84f22ad0a97d2c689850b912fc04277\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\activity-1.0.0.aar\a46db1490fae1b9001fc672a24eb288f\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\customview-1.0.0.aar\fe8bf4a709414e884086911d2168b715\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\core-1.1.0.aar\87febb54759dd5a2c7be8e971d745644\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\versionedparcelable-1.1.0.aar\754157c6f50ca4e4cf3ac8d7cb5ced26\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.collection\collection\1.1.0\1f27220b47669781457de0d600849a5de0e89909\collection-1.1.0.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-livedata-2.0.0.aar\de6944801d37d99b1dd0b877649fde1f\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-livedata-core-2.0.0.aar\e21d6663beb6faa41a30fd5a582cb4d9\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\core-runtime-2.0.1.aar\724bb0cc2ce99eaf0a23a99bb1cc5c23\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.room\room-common\2.1.0\b87765704590bd992ea0d92ac50253a9df7818a0\room-common-2.1.0.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\sqlite-framework-2.0.1.aar\9cbdf82e938f7e565620a3682d2406e9\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\sqlite-2.0.1.aar\1215aa5476f752bd431fb2d8059a1a39\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-service-2.0.0.aar\9d24ebd4d6766d7b2cd515369a737934\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-runtime-2.1.0.aar\ca02c0867547ae607130bcc54a4a9ba5\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-viewmodel-2.1.0.aar\594e1ff6298a01d8933530bb534fa472\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\savedstate-1.0.0.aar\8a2c3791a34fc80e5d9d268bf2886f95\jars\classes.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.lifecycle\lifecycle-common\2.1.0\c67e7807d9cd6c329b9d0218b2ec4e505dd340b7\lifecycle-common-2.1.0.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.arch.core\core-common\2.1.0\b3152fc64428c9354344bd89848ecddc09b6f07e\core-common-2.1.0.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.annotation\annotation\1.1.0\e3a6fb2f40e3a3842e6b7472628ba4ce416ea4c8\annotation-1.1.0.jar] (filtered)
Reading program jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\com.google.guava\listenablefuture\1.0\c949a840a6acbc5268d088e47b04177bf90b3cad\listenablefuture-1.0.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\flutter_downloader\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\shared_preferences\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\url_launcher\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\sqflite\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\connectivity\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\path_provider\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\package_info\intermediates\intermediate-jars\release\classes.jar] (filtered)
Reading program directory [F:\dartSpace\flutter\jiddspace\nfc\build\app\intermediates\javac\release\compileReleaseJavaWithJavac\classes] (filtered)
Reading program jar [F:\dartSpace\flutter\jiddspace\nfc\build\app\intermediates\transforms\mergeJavaRes\release\0.jar] (filtered)
Reading library jar [C:\Users\Administrator\.gradle\caches\modules-2\files-2.1\androidx.annotation\annotation\1.0.0\45599f2cd5965ac05a1488fa2a5c0cdd7c499ead\annotation-1.0.0.jar] (filtered)
Reading library jar [E:\work_tool\sdk\android-sdk-windows\platforms\android-28\android.jar]
Reading library jar [E:\work_tool\sdk\android-sdk-windows\build-tools\28.0.3\core-lambda-stubs.jar]
Reading library jar [E:\work_tool\sdk\android-sdk-windows\platforms\android-28\optional\org.apache.http.legacy.jar]
Reading library jar [E:\work_tool\sdk\android-sdk-windows\platforms\android-28\optional\android.test.mock.jar]
Reading library jar [E:\work_tool\sdk\android-sdk-windows\platforms\android-28\optional\android.test.base.jar]
Reading library jar [E:\work_tool\sdk\android-sdk-windows\platforms\android-28\optional\android.test.runner.jar]
Initializing...
Warning: io.flutter.embedding.android.FlutterView: can't find referenced method 'android.graphics.Insets getSystemGestureInsets()' in library class android.view.WindowInsets
Warning: io.flutter.embedding.android.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.embedding.android.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.embedding.android.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.embedding.android.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.embedding.android.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.embedding.android.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.view.FlutterView: can't find referenced method 'android.graphics.Insets getSystemGestureInsets()' in library class android.view.WindowInsets
Warning: io.flutter.view.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.view.FlutterView: can't find referenced class android.graphics.Insets
Note: io.flutter.view.AccessibilityViewEmbedder$ReflectionAccessors: can't find dynamically referenced class android.util.LongArray
Warning: io.flutter.view.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.view.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.view.FlutterView: can't find referenced class android.graphics.Insets
Warning: io.flutter.view.FlutterView: can't find referenced class android.graphics.Insets
Note: there were 1 unresolved dynamic references to classes or interfaces.
? You should check if you need to specify additional program jars.
? ()
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
Thread(Tasks limiter_1): destruction
Warning: there were 12 unresolved references to classes or interfaces.
? ? You may need to add missing library jars or update their versions.
? ? If your code works fine without the missing classes, you can suppress
? ? the warnings with '-dontwarn' options.
? ? ()
Warning: there were 2 unresolved references to library class members.
? ? You probably need to update the library versions.
? ? ()
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
Job failed, see logs for details
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at
BUILD FAILED in 4m 23s
Running Gradle task 'assembleRelease'...
Running Gradle task 'assembleRelease'... Done? ? ? ? ? ? ? ? ? ? 264.4s (!)
*******************************************************************************************
The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
See for more information on the problem and how to fix it.
*******************************************************************************************
Gradle task assembleRelease failed with exit code 1
Flutter是Google開發(fā)的新一代跨平臺方案,F(xiàn)lutter可以實現(xiàn)寫一份代碼同時運行在iOS和Android設(shè)備上,并且提供很好的性能體驗。Flutter使用Dart作為開發(fā)語言,這是一門簡潔、強類型的編程語言。Flutter對于iOS和Android設(shè)備,提供了兩套視覺庫,可以針對不同的平臺有不同的展示效果。
Flutter原本是為了解決Web開發(fā)中的一些問題,而開發(fā)的一套精簡版Web框架,擁有獨立的渲染引擎和開發(fā)語言,但后來逐漸演變?yōu)橐苿佣碎_發(fā)框架。正是由于Dart當初的定位是為了替代JS成為Web框架,所以Dart的語法更接近于JS語法。例如定義對象構(gòu)建方法,以及實例化對象的方式等。
在Google剛推出Flutter時,其發(fā)展很緩慢,終于在18年發(fā)布第一個Bate版之后迎來了爆發(fā)性增長,發(fā)布第一個Release版時增長速度更快。可以從Github上Star數(shù)據(jù)看出來這個增長的過程。在19年最新的Flutter 1.2版本中,已經(jīng)開放Web支持的Beta版。
Flutter不僅僅提供了一套視覺庫,在Flutter整體框架中包含各個層級階段的庫。例如實現(xiàn)一個游戲功能,上面一些游戲控件可以用上層視覺庫,底層游戲可以直接基于Flutter的底層庫進行開發(fā),而不需要調(diào)用原生應用的底層庫。Flutter的底層庫是基于Open GL實現(xiàn)的,所以O(shè)pen GL可以做的Flutter都可以。
核心
前端三大框架已趨于平穩(wěn),標準化,向?Web Components?看齊。
小程序(各種平臺)爆發(fā),互聯(lián)網(wǎng)創(chuàng)業(yè)優(yōu)先選擇小程序。多端受到重視,不再只是?all in mobile。
WebAssembly?讓更多語言可以運行在瀏覽器上。
PWA進入穩(wěn)定期,尤其是 PWA 桌面版,可以讓我們更好的看清楚 PC 桌面版開發(fā)的全貌。
Flutter?發(fā)展較快,最大硬傷是Dart語言。RN原有的開發(fā)方式會退出歷史舞臺。
TypeScript已經(jīng)慢慢成為前端的主流開發(fā)如果你想要學好web前端最好加入一個好的學習環(huán)境,可以來這個Q群,首先是132,中間是667,最后是127,這樣大家學習的話就比較方便,還能夠共同交流和分享資料語言,將成為必備開發(fā)技能。
開發(fā)團隊前后端分離已經(jīng)進入深水期。
其他:ServerLess\GraphSQL發(fā)展迅猛、D3、webgl、SVG、webpack不再是唯一的打包工具選項(Rollup、parcel零配置)、WebRTC、靜態(tài)生成、人工智能前端化
趨勢一:更加移動優(yōu)先
響應式設(shè)計顯然是目前web前端開發(fā)領(lǐng)域的主要趨勢之一,并且這一趨勢在未來還將持續(xù)一段時間。雖然現(xiàn)在的響應式設(shè)計大部分還是以PC版優(yōu)先,然而如果有一天我們把PC版放到比移動版次要的位置上,也沒有什么好奇怪的。因為,目前許多web前端開發(fā)者已經(jīng)開始轉(zhuǎn)向以移動優(yōu)先方案來做他們的響應式設(shè)計和開發(fā),這就象征著一個重大轉(zhuǎn)變,值得我們跟進的。
趨勢二:更多使用快速原型開發(fā)工具
眾多web前端開發(fā)者從2018年開始嘗試使用快速原型開發(fā)工具,而在2019年將是這種技術(shù)真正爆發(fā)的一年。“UXpin、Webflow、Invision以及其它許多快速原型開發(fā)工具,讓設(shè)計師不用寫一行代碼,就能為網(wǎng)站和服務快速創(chuàng)建低保真和高保真原型,便于設(shè)計師衡量它們的可用性和美觀性。”web設(shè)計師Jamie 如是說,“許多工具也允許你在瀏覽器中設(shè)計原型并從工具里真正啟動網(wǎng)站自身。”
趨勢三:營銷類頁面小程序化
這個指的就是大家平時在微信里看到的各類營銷網(wǎng)頁,因為主要入口在微信,因此變成微信小程序。這個大家比較好理解吧,就不多說了。小程序現(xiàn)在可能BUG多,功能跟不上,但是要替代這類網(wǎng)頁可能也就是2年不到的時間。
趨勢四:HTML內(nèi)的技術(shù)改進
這個能影響到的范圍看起來很大,但其實場景比較有限,主要是排除掉上面說的1和3之外的空間。空間就在于這兩大技術(shù)目前都沒有成熟的最佳實踐,還需要探索。
在互聯(lián)網(wǎng)時代,更多的人、場景、知識將需要被更加緊密地聯(lián)系在一起,而有連接的地方就會有界面,有界面的地方就會有前端。每一門學科與技術(shù)都是在不斷摸索和總結(jié)中前行,前端技術(shù)也不例外。未來我們有理由相信在前端技術(shù)日趨成熟的前提下,新的突破和變革將會給我們的工作與生活帶來更多驚喜。
趨勢五:虛擬現(xiàn)實
如果要討論web前端技術(shù)趨勢怎能不提到虛擬現(xiàn)實技術(shù)VR呢,2019年將繼續(xù)是VR成為主流的一年,這也就意味著web開發(fā)者將通過VR來吸引用戶,我們已經(jīng)看到一些公司比如Mozilla和Google投資開發(fā)VR與Web之間的API。越來越多的VR應用程序?qū)⑾嗬^問世,所以如果看到越來越多的虛擬現(xiàn)實元素出現(xiàn)在 Web上,也別覺得奇怪。
這里給大家整理了一份系統(tǒng)全面的前端學習路線,主要掌握以下技術(shù):
第一階段:專業(yè)核心基礎(chǔ)
階段目標:
1. 熟練掌握HTML5、CSS3、Less、Sass、響應書布局、移動端開發(fā)。
2. 熟練運用HTML+CSS特性完成頁面布局。
4. 熟練應用CSS3技術(shù),動畫、彈性盒模型設(shè)計。
5. 熟練完成移動端頁面的設(shè)計。
6. 熟練運用所學知識仿制任意Web網(wǎng)站。
7. 能綜合運用所學知識完成網(wǎng)頁設(shè)計實戰(zhàn)。
知識點:
1、Web前端開發(fā)環(huán)境,HTML常用標簽,表單元素,Table布局,CSS樣式表,DIV+CSS布局。熟練運用HTML和CSS樣式屬性完成頁面的布局和美化,能夠仿制任意網(wǎng)站的前端頁面實現(xiàn)。
2、CSS3選擇器、偽類、過渡、變換、動畫、字體圖標、彈性盒模型、響應式布局、移動端。熟練運用CSS3來開發(fā)網(wǎng)頁、熟練開發(fā)移動端,整理網(wǎng)頁開發(fā)技巧。
3、預編譯css技術(shù):less、sass基礎(chǔ)知識、以及插件的運用、BootStrap源碼分析。能夠熟練使用 less、sass完成項目開發(fā),深入了解BootStrap。
4、使用HTML、CSS、LESS、SASS等技術(shù)完成網(wǎng)頁項目實戰(zhàn)。通過項目掌握第一階段html、css的內(nèi)容、完成PC端頁面設(shè)計和移動端頁面設(shè)計。
第二階段:Web后臺技術(shù)
階段目標:
1. 了解JavaScript的發(fā)展歷史、掌握Node環(huán)境搭建及npm使用。
2. 熟練掌握JavaScript的基本數(shù)據(jù)類型和變量的概念。
3. 熟練掌握JavaScript中的運算符使用。
4. 深入理解分之結(jié)構(gòu)語句和循環(huán)語句。
5. 熟練使用數(shù)組來完成各種練習。
6.熟悉es6的語法、熟練掌握JavaScript面向?qū)ο缶幊獭?/p>
7.DOM和BOM實戰(zhàn)練習和H5新特性和協(xié)議的學習。
知識點:
1、軟件開發(fā)流程、算法、變量、數(shù)據(jù)類型、分之語句、循環(huán)語句、數(shù)組和函數(shù)。熟練運用JavaScript的知識完成各種練習。
2、JavaScript面向?qū)ο蠡A(chǔ)、異常處理機制、常見對象api,js的兼容性、ES6新特性。熟練掌握JavaScript面向?qū)ο蟮拈_發(fā)以及掌握es6中的重要內(nèi)容。
3、BOM操作和DOM操作。熟練使用BOM的各種對象、熟練操作DOM的對象。
4、h5相關(guān)api、canvas、ajax、數(shù)據(jù)模擬、touch事件、mockjs。熟練使用所學知識來完成網(wǎng)站項目開發(fā)。
第三階段:數(shù)據(jù)庫和框架實戰(zhàn)
階段目標:
1. 綜合運用Web前端技術(shù)進行頁面布局與美化。
2. 綜合運用Web前端開發(fā)框架進行Web系統(tǒng)開發(fā)。
3. 熟練掌握Mysql、Mongodb數(shù)據(jù)庫的發(fā)開。
4. 熟練掌握vue.js、webpack、elementui等前端框技術(shù)。
5. 熟練運用Node.js開發(fā)后臺應用程序。
6. 對Restful,Ajax,JSON,開發(fā)過程有深入的理解,掌握git的基本技能。
知識點:
1、數(shù)據(jù)庫知識,范式,MySQL配置,命令,建庫建表,數(shù)據(jù)的增刪改查,mongodb數(shù)據(jù)庫。深入理解數(shù)據(jù)庫管理系統(tǒng)通用知識及MySQL數(shù)據(jù)庫的使用與管理,為Node.js后臺開發(fā)打下堅實基礎(chǔ)。
2、模塊系統(tǒng),函數(shù),路由,全局對象,文件系統(tǒng),請求處理,Web模塊,Express框架,MySQL數(shù)據(jù)庫處理,RestfulAPI,文件上傳等。熟練運用Node.js運行環(huán)境和后臺開發(fā)框架完成Web系統(tǒng)的后臺開發(fā)。
3、vue的組件、生命周期、路由、組件、前端工程化、webpack、elementui框架。Vue.js框架的基本使用有清晰的理解,能夠運用Vue.js完成基礎(chǔ)前端開發(fā)、熟練運用Vue.js框架的高級功能完成Web前端開發(fā)和組件開發(fā),對MVVM模式有深刻理解。
4、需求分析,數(shù)據(jù)庫設(shè)計,后臺開發(fā),使用vue、node完成pc和移動端整站開發(fā)。于Node.js+Vue.js+Webpack+Mysql+Mongodb+Git,實現(xiàn)整站項目完整功能并上線發(fā)布。
第四階段:移動端和微信實戰(zhàn)
階段目標:
1.熟練掌握React.js框架,熟練使用React.js完成開發(fā)。
2.掌握移動端開發(fā)原理,理解原生開發(fā)和混合開發(fā)。
3.熟練使用react-native和Flutter框架完成移動端開發(fā)。
4.掌握微信小程序以及了解支付寶小程序的開發(fā)。
5.完成大型電商項目開發(fā)。
知識點:
1、React面向組件編程、表單數(shù)據(jù)、組件通信、監(jiān)聽、聲明周期、路由、Redux基本概念。練使用react完成項目開發(fā)、掌握Redux中的異步解決方案Saga。
2、react-native、開發(fā)工具、視圖與渲染、api操作、Flutter環(huán)境搭建、路由、ListView組件、網(wǎng)絡(luò)請求、打包。練掌握react-native和Flutter框架,并分別使用react-native和Flutter分別能開發(fā)移動端項目。
3、微信小程序基本介紹、開發(fā)工具、視圖與渲染、api操作、支付寶小程序的入門和api學習。掌握微信小程序開發(fā)了解支付寶小程序。
4、大型購物網(wǎng)站實戰(zhàn),整個項目前后端分離開發(fā);整個項目分為四部分:PC端網(wǎng)頁、移動端APP、小程序、后臺管理。團隊協(xié)作開發(fā),使用git進行版本控制。目期間可以擴展Three.js 、TypeScript。
之前講到了 flutter的Texture
SurfaceTexture 是 Surface 和 OpenGL ES (GLES) 紋理的組合。SurfaceTexture 用于提供輸出到 GLES 紋理的 Surface
SurfaceTexture 包含一個 BufferQueue。當生產(chǎn)方將新的緩沖區(qū)排入隊列時,onFrameAvailable() 回調(diào)會通知應用。然后,應用調(diào)用 updateTexImage(),這會釋放先前占有的緩沖區(qū),從隊列中獲取新緩沖區(qū)并執(zhí)行 EGL 調(diào)用,從而使 GLES 可將此緩沖區(qū)作為外部紋理使用。
關(guān)鍵方法:
SurfaceTexture(int texName, boolean singleBufferMode)構(gòu)造方法
setOnFrameAvailableListener 設(shè)置回調(diào),當生產(chǎn)者準備好新的幀后會調(diào)用Listener
updateTexImage 更新texture到指定的GLESContext
detachFromGLContext
attachToGLContext
解綁/綁定 當前GLContext
getTransformMatrix 設(shè)置重采樣紋理矩陣,當渲染的時候會用到這個數(shù)據(jù)
release() 完全釋放 SufaceTexture的 buffers并且吧Surface狀態(tài)置為abandoned
android-8.0.0_r1 源碼解析:
GLConsumer參數(shù)解釋:
bq是BufferQueue創(chuàng)建BufferConsumer
tex 表示要將圖像流傳輸?shù)降腛penGL ES紋理名稱。
texTarget指定了哪個紋理將被綁定
useFenceSync表示是否需要同步訪問緩沖區(qū)
可以從一個OpenGL ES上下文中分離GLConsumer,然后分別使用detachFromContext和attachToContext方法將GLConsumer附加到另一個上下文。
如果設(shè)置tex參數(shù)則會通過attachToContext將GLConsumer附加到OpenGL ES context中。
第一次調(diào)用updateTexImage才會綁定,之后所有對updateTexImage的調(diào)用必須使用相同的當前OpenGL ES context進行
acquireBufferLocked創(chuàng)建EglImage并設(shè)置到EglSlots中
updateAndReleaseLocked 更新 EglImage
createIfNeeded 如果EGLDisplay改變或者crop改變則會創(chuàng)建EglImage
bindToTextureTarget 將調(diào)用glEGLImageTargetTexture2DOES去綁定image到指定的目標紋理
這里創(chuàng)建EGLImageKHR,EGLImageKHR用于共享EGL資源
EGL的ShareContext是常見的共享上下文的方式(iOS平臺的EAGL叫ShareGroup)。
當share_context參數(shù)傳入另一個EGL的context時,這兩個EGLContext就可以共享紋理以及VBO等。
需要注意的是container objects不能被共享,比如:
Framebuffer objects
Vertex array objects
Transform feedback objects
Program pipeline objects
參考:
EGLImageKHR:
本文將從三個方面介紹Android 圖形系統(tǒng)。
圖形系統(tǒng)提供繪圖和圖形處理支持。
Android 框架提供了各種用于 2D 和 3D 圖形渲染的 API、圖片解碼庫,以及各種Driver支持。
? 繪圖API:2D引擎 Skia,3D引擎 OpenGL ES,RenderScript,OpenCV和Vulkan。
? 圖片解碼庫:jpg,png,gif等。
應用開發(fā)者可通過三種方式將圖像繪制到屏幕:
? Canvas : 2D圖形API,Android View樹實際的繪制者。
? OpenGL ES : 嵌入式設(shè)備的OpenGL 三維圖形API子集。
? Vulkan :跨平臺的2D和3D繪圖引擎,Android 7.0后支持,NDK。
整個圖形系統(tǒng)架構(gòu)是一個生產(chǎn)者和消費者模式,五層依次介紹:
2D繪制:Canvas api / view 的子類 (button ,list)/自定義view
3D繪制:應用直接使用OpenGL 接口繪制圖形(PixelFlinger對應的是openGl 1.0 ,GUP driver 對應的是2.0和3.0)
所有情況下的繪圖都渲染到一個包含 GraphicBuffer的Surface上,當一塊 Surface 顯示在屏幕上時,就是用戶所看到的窗口。
? Canvas:畫布,2D圖形API,Android View樹實際的渲染者。
? Skia繪制:Android4.0之前默認使用,主線程通過CPU完成繪圖指令操作,在復雜場景下單幀容易超過16ms導致卡頓。
WindowManagerService(WMS)窗口管理服務,管理系統(tǒng)中所有的窗口。
? 管理window (view的容器)
? Window與surface對應,一塊顯示區(qū)域。添加一個window,就是 WMS 為其分配一塊 Surface 的過程。
Google 在Android source官網(wǎng)提示:
這里就對這些控件進行簡單介紹:
Surface : Handle onto a raw buffer that is being managed by the screen compositor.
Surface 對應一塊屏幕緩沖區(qū)。生產(chǎn)者是: SurfaceTexture、MediaRecorder 等,消費者是: OpenGL、MediaPlayer 或 CameraDevice等。每個window對應一個Surface。Canvas或OpenGL ES等最終都渲染到Surface上。
? Flutter在Android平臺上也是直接渲染到Surface。例如:一個Activity/Dialog都是一個Surface,它承載了上層的圖形數(shù)據(jù),與SurfaceFlinger側(cè)的Layer相對應。
Canvas(畫布)實現(xiàn)由 Skia 圖形庫提供。為了確保兩個客戶端不會同時更新某個緩沖區(qū),使用以下命令處理畫布鎖:
使用雙緩沖機制,有自己的 surface,View只是一個透明的占位符,Surface可以在后臺線程中繪制。雙緩沖機制提高渲染效率,獨立線程
繪制,提升流暢性。適合一些場景:需要界面迅速更新、UI繪制時間長、對幀率要求較高的情況。
提供訪問和控制Surface 相關(guān)的方法 。通過SurfaceView的getHolder()函數(shù)可以獲取SurfaceHolder對象,Surface 就在SurfaceHolder對象內(nèi)。
addCallback(SurfaceHolder.Callbackcallback) /Canvas lockCanvas() /unlockCanvasAndPost(Canvascanvas)
SurfaceTexture: Surface 和 OpenGL ES (GLES) 紋理(Texture)的組合。將圖像流轉(zhuǎn)為 OpenGL 外部紋理。
TextureView:持有 SurfaceTexture,將圖像處理為 OpenGL 紋理更新到 HardwareLayer。
GLSurfaceView:加入 EGL 管理,自帶 GL 上下文和 GL 渲染線程
這些View通常涉及到Android音視頻相關(guān),需要高效的渲染能力。如下面的SurfaceTexture在camera中的應用。
簡稱Buffer, 一個Buffer包含一幀圖像,Buffer由gralloc分配和回收。Buffer 屬性包含:width, height, format, usage等
BufferQueue 的引入是為了解決顯示和性能問題。
? Surface屬于APP進程,Layer屬于系統(tǒng)進程,如果它們之間只用一個Buffer,會存在顯示和性能問題。
? 一些Buffer用于繪制,一些Buffer用于顯示,雙方處理完之后,交換一下Buffer,提高效率。
? BufferQueue中包含多個Buffer對象。
Android圖形系統(tǒng)包含了兩對生產(chǎn)者和消費者模型,它們都通過BufferQueue進行連接:
1.Canvas和OpenGL ES生產(chǎn)圖形數(shù)據(jù),SurfaceFlinger消費圖形數(shù)據(jù)。
2.SurfaceFlinger合成所有圖層的圖形數(shù)據(jù),Display顯示合成結(jié)果。
code:frameworks/native/services/surfaceflinger
? Surface表示APP進程的一個窗口,承載了窗口的圖形數(shù)據(jù)。
? SurfaceFlinger是系統(tǒng)進程合成所有窗口的系統(tǒng)服務,負責合成所有Surface提供的圖形數(shù)據(jù),然后送顯到屏幕。
? SurfaceFlinger既是上層應用的消費者,又是Display的生產(chǎn)者,起到了承上啟下的作用。
數(shù)據(jù)流:
合成示意圖:
在介紹Vsync機制之前先介紹兩個重要概念:
屏幕刷新率:屏幕每秒鐘可以刷新多少次。60HZ刷新率,16.7ms刷新一次。(120HZ/8.3ms),硬件指標。
GPU 繪制幀率:GPU 每秒能夠合成繪制多少幀。
軟件層觸發(fā) View 繪制的時機是隨機的,當下一次屏幕刷新時,屏幕從 Frame Buffer 中拿到的數(shù)據(jù)還是“幀1”的數(shù)據(jù),導致“丟幀”。
每隔 16ms 硬件層發(fā)出 vsync 信號,應用層接收到此信號后會觸發(fā)UI 的渲染流程,同時 vsync 信號也會觸發(fā) SurfaceFlinger 讀取Buffer 中的數(shù)據(jù),進行合成顯示到屏幕上。
總結(jié):Vsync機制將 CPU 和 GPU 的開始時間與屏幕刷新強行拖拽到同一起跑線
Android提供的Graphics流程相對比較復雜對其進行具象后的流程如下兩張圖所示:
文章名稱:fluttergl,Flutterglue
網(wǎng)頁地址:http://chinadenli.net/article12/dsispdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、域名注冊、響應式網(wǎng)站、軟件開發(fā)、營銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)