flutter編譯apk大
A. Android studio flutter 沒有找到build apk,請問怎麼設置
不需要設置,默認都會在根目錄下的build文件夾下,具體的路徑如下圖所示
一般情況下,你直接使用AS運行時,會生成debug版本,不會生成release版本,需要手動執行flutter run --release就可以出現release文件了。
希望可以幫到您!
B. Flutter 的Android 、iOS 打包
Flutter 項目雖說是跨平台項目,但是項目的名稱還是需要在不同的平台設置,不同平台的設置位置是:
1、 Android 項目名字配置是在 android/app/src/main/AndroidManifest.xml 文件中的 application 下的 android:label 。如下圖所示:
2、 iOS 項目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 <key>CFBundleName</key> <string>testapp</string> 。如下圖所示:
Flutter 項目雖說是跨平台項目,但是項目的 Logo 圖標還是需要在不同的平台設置,不同平台的設置位置是:
1、 Android 項目 Logo 配置是在圖片放置在 android/app/src/main/res 下的對應目錄下:
mipmap-mdpi : 48 _ 48
mipmap-hdpi : 72 _ 72
mipmap-xhdpi :96 _ 96
mipmap-xxhdpi :144 _ 144
mipmap-xxxhdpi :192 * 192。如下圖所示:
然後,在 android/app/src/main/AndroidManifest.xml 路徑下的 AndroidManifest.xml 文件中的 android:icon 。如下圖所示:
2、 iOS 項目 Logo 的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文件下,直接更換圖片,名字不要改動 。如下圖所示:
1、使用 cd 指令進入項目(testapp)的根目錄(方便後面操作),如下圖所示:
填寫對應的值,如下圖所示:
1、 build.gradle 文件的位置,如下圖所示:
2、在 build.gradle 中配置 key.propreties 的全局變數,
如下圖所示:
3、 build.gradle 文件中進行簽名配置。
如下圖所示:
注意: buildTypes 中的 signingConfig signingConfigs.debug 可以變更為 signingConfig signingConfigs.release ,這樣在打包的時候,直接可以 flutter build apk ,否則就執行 flutter build apk --release 。如圖所示:
1、 cd 進入功能(testapp) 的根目錄,如下圖所示:
2、執行 flutter build apk 指令,如下圖所示:
我們打包成功, 生成的 apk 包在 build/app/outputs/apk/release/app-release.apk 目錄下,如下圖所示:
1、將真機通過 USB 鏈接到電腦上,如下圖所示:
2、然後,在項目的根目錄執行 flutter install , 如果出現電腦同時有多個設備時,就執行 flutter install -d deviceid 。如下圖所示:
3、設備的安裝過程如下:
1、必須一個 Xcode 開發工具
2、如果是 Window 的電腦,請安裝 Mac 虛擬系統,進行安裝 Xcode .
1、打開目錄下的 Runner.xcworkspace 工程。
如下圖所示:
2、在 ios 工程中配置 Signing & Capabilities , 如下圖所示:
1、進入項目的根目錄
2、打包指令 flutter build ios --release
如圖所示:
3、使用 Xcode 工具進行打包
如圖所示:
注意:進行該步驟,必須執行 flutter build ios --release 否則會報錯。
打包成功,如下圖所示:
C. flutter 提示Unsupported Android Plugin version: 4.2.2
Unsupported Android Plugin version: 4.2.2 看到這個提示著實頭疼,不支持版本,那怎麼辦,降級吧,改為了4.0.2,還是同樣的提示,這就怪了
在StackoverFlow上有這樣一個說法,說是這是由於安卓添加了proctFlavors來設置多渠道打包,看到這里,去看自己工程果不其然,我也添加了這個
解決
1、若是使用AndriodStudio調試flutter工程需要在Run--Editd Configuration--選中左側main文件--在Build flavor處添加一個在proctFlavors內部定義的渠道比如huawei,點擊OK,重啟IDE,此時發現問題解決了
2、若是使用VSCode調試flutter工程 需要在launch.json設置新的launch配置具體
其中huawei即為proctFlavors中設置的某個渠道 此時我們調試會多一個huawei的選項,安卓使用該選項調試即可
同時若是打包需要使用
flutter build apk --flavor huawei
run需要使用
flutter run --flavor huawei
D. Flutter Android打包基本配置及包體積優化
https://github.com/saucxs/full_stack_knowledge_list/blob/master/article/flutter/flutter_build_apk.md
E. 【百度地圖篇】1.Flutter+百度Sdk實現地圖功能 & 百度地圖顯示網格問題
我是初學者小白,所以很多看法不深,理解也不夠透徹。但是很適合小白們一起從低角度往高處探索。文中有錯誤的,感謝指正,一起進步。
趁著假期做一個Flutter的地圖功能,因為後端選用了網路地圖,所以前端沒得挑。找了遍插件,並沒有現成可用的。(不過發現了網路官方也自開發Flutter插件,目前功能只有一個獲取本地位置信息,後期會繼續增加吧?很期待!)
參考帖子: https://blog.csdn.net/sjm19901003/article/details/53128375
這個實際上跟功能之間沒太大關系,只是我按照個人摸索的過程來寫。
當對一個「領域/知識塊」完全不懂的時候,360°的方向都不確定的話。先了解基礎概念,有利於你確定自己的摸索方向。
參考帖子: https://www.jianshu.com/p/742b15d38404
中間我跳過了幾十,上百個帖子的摸索過程。這個才是關鍵能夠真正做事的參考。
因為網路的sdk還算是很完善的,所以一旦出問題,都會有對應的報錯提示。
我是使用flutter插件:permission_handler,來解決安卓的動態授權問題,用法簡單而且設計合理。
這個錯誤直接來看,就是簽名有問題。怎麼查看SHA1碼和包名,這里不多說,網上有極其多的方法,網路Sdk開發指南里也有。沒那麼復雜,也沒那麼麻煩。按照流程操作就是對的。
實在不放心?跟我一樣,flutter打包後,把apk反過來解SHA1碼不就行了?
參考帖子: https://www.daimajiaoliu.com/daima/4858f130f900409#heading-1
紅色框框基本就是帖子講解的那樣。
藍色框框見下圖:release標簽里好像是自己設置了。所以debug標簽裡面,箭頭指向的位置,是我多設置的一個參數。
uid: -1 appid -1 msg: httpsPost failed,IOException:Unable to resolve host "api.map..com": No address associated with hostname
這一步我是哭笑不得,一開始老是和問題(2)混淆,導致浪費很多時間。仔細閱讀後,發現是不能連接到「api.map..com」。
我打開模擬器的chrome瀏覽器,發現不能上網。查看手機的dns是10.0.2.3(默認的),和家裡wifi不一樣,所以不能上網也正常,之前居然沒發現這個問題!!!
終端執行:adb shell 和 getprop,就可以查看所有的屬性參數了。(window小夥伴自行網路,這個沒多大差別。如果你有多個設備,記得自己選好設備。)
在裡面找到這一項,就是你的dns參數。有些人是net.dns1,我的是net.eth0.dns1。這個沒關系,只是等下指令 稍微改動 就行。
修改dns指令:setprop net.eth0.dns1 192.168.2.1
後面的192.168.2.1是我自己的dns,這個根據自己的情況來填寫。不懂的網路下怎麼查看自己的dns。
雖然提示設置失敗,但是回到模擬器一看,地圖已經顯示出來了。
嘿嘿,在flutter設定多大的區域,地圖就是多大的區域。用起來就很方便了。
過程十分痛苦,因為對flutter不是很熟悉,對Android原生更是了解很少。所以自己就像突然不能講話,被丟到一個陌生的環境,卻要我去找一個人。所以細心很重要,一定要看清楚錯誤提示,不要錯過每一個細節和可能性。
幸好最後解決了問題,開心~
其實如果你仔細閱讀過網路官方的文檔,會發現裡面有關於 地圖的生命周期管理 。然後在這裡面沒有提及到,這一點雖然沒提,但不可或缺,小夥伴就自行思考吧。
最後還有一點,其實我的初衷是想實現一個網路地圖的plugin,但是苦於能力有限,對Android的不熟悉,最後折戟。我不得已另起項目,然後重新實現地圖sdk接入。經過這次對於這些有更多更全面的認知後,有空會再次研究flutter 插件的開發,共勉,奧利給!!!
F. Flutter 集成ShareSDK分享功能
項目分享中需要用到這兩項,需要到官網進行注冊。
下面是官網的官方文檔:
http://www.mob.com/wiki/detailed?wiki=ShareSDK_for_Flutter&id=14
根據官網指示,在pubspec.yaml文件中加入下面依賴
dependencies:
sharesdk_plugin:
安卓的mobsdk.gradle客服說是可以自動生成,也有存在部分未自動生成,所以未自動生成需要手動添加,然後再重新自定義編輯。具體可以直接挪官網demo的文件。
另外手動添mobsdk.gradle文件後,需要在gradle文件中添加mobsdk.gradle的引用
apply from:'../MobSDK.gradle'(在android{}之外添加)
此外,ios的 sharesdk_plugin.podspec會自動生成,就照著官網編輯即可,到了這步就算是sdk的成功引用了, 。
1.需要打包簽名,不然微信等部分應用分享失敗。
2.flutter簽名沒有快捷方式了,需要用命令來生成,具體網路吧!
3.打包,在命令行flutter build apk,會在項目下/build/app/outputs/apk/release/下。
通過cd到項目,運行adb install <apk的路徑>的方式,進行測試。
G. flutter從WIN10轉移到MAC生成APK失敗
項目在WIN10上生成apk沒問題,到mac出問題了,可是android sdk也安裝完成的。
運行flutter build apk
提示以下錯誤
解決:
只需輸入flutter clean
清理干凈之後,再build就行了,成功
flutter build apk
H. flutter-android打包
android打包教程:
1、在AndroidManifest中確定app的名字:
2、在app/build.gradle中設置安卓兼容版本targetSdkVersion和最低版本minSdkVersion,還有編譯版本compileSdkVersion,還有設置包名applicationId,一般不用設置,除非你是要變更
4、添加啟動圖標,圖標資源文件的位置如下:
看到這個文件的時候,就說明創建證書成功了
6、配置項目證書
在android目錄下新建一個file文件key.properties,然後填寫證書的信息如下:
7、啟用混淆
在app路徑中添加proguard-rules.pro文件(這個網路下就好了)
8、構建flutter build apk
I. flutter如何進行icloud
flutter用一個插件進行icloud。
拓展資料:為何flutter構建的App體積較大?
細心的開發者會發現flutter構建的App體積比native的大一些,是什麼原因造成App體積大呢?
其實flutter 在release時App體積和native的大小差不多,而debug時體積通常會大。debug版本體積較大是為了Hot reload和快速編譯。如果有flutter開發經驗的朋友都體驗過,如果您修改一下App的背景顏色,只需save一下就可以立刻看到修改後效果。我稱之為「像藝術家一樣在創造App」,因此為了實現這些目標,提高開發的效率,debug將佔用全部資源。而當我們構建release版時,flutter又會採用AOT策略,提高App運行效率,release版只打包必需的資源,因而體積又會減少。
另外,flutter團隊也一直在尋找減小程序大小的方法。
J. flutter 反編譯
>You are building a fat APK that includes binaries for android-arm, android-arm64.
>If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to rece the APK size.
> To generate an app bundle, run:
> flutter build appbundle --target-platform android-arm,android-arm64
> Learn more on: https://developer.android.com/guide/app-bundle
> To split the APKs per ABI, run:
> flutter build apk --target-platform android-arm,android-arm64 --split-per-abi
> Learn more on: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
>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\\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\\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\\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\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\work-runtime-2.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\fragment-1.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\room-runtime-2.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\room-runtime-2.1.0.aar\\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\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\loader-1.0.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\activity-1.0.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\customview-1.0.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\core-1.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\versionedparcelable-1.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\moles-2\files-2.1\androidx.collection\collection\1.1.0\\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\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-livedata-core-2.0.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\core-runtime-2.0.1.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\moles-2\files-2.1\androidx.room\room-common\2.1.0\\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\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\sqlite-2.0.1.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-service-2.0.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-runtime-2.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\lifecycle-viewmodel-2.1.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\transforms-1\files-1.1\savedstate-1.0.0.aar\\jars\classes.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\moles-2\files-2.1\androidx.lifecycle\lifecycle-common\2.1.0\\lifecycle-common-2.1.0.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\moles-2\files-2.1\androidx.arch.core\core-common\2.1.0\\core-common-2.1.0.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\moles-2\files-2.1\androidx.annotation\annotation\1.1.0\\annotation-1.1.0.jar] (filtered)
>Reading program jar [C:\Users\Administrator\.gradle\caches\moles-2\files-2.1\com.google.guava\listenablefuture\1.0\\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\moles-2\files-2.1\androidx.annotation\annotation\1.0.0\\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.
> (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
>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.
> (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
>Warning: there were 2 unresolved references to library class members.
> You probably need to update the library versions.
> (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)
>
>FAILURE: Build failed with an exception.
>
>* What went wrong:
>Execution failed for task ':app:'.
>> 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 https://help.gradle.org
>
>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 https://goo.gl/CP92wY for more information on the problem and how to fix it.
>*******************************************************************************************
>Gradle task assembleRelease failed with exit code 1