Preface
最近在做flutter上的音頻和視頻方面的探索。
需要用到一些視屏區域截取,視屏導出成序列圖等等。
這是昨天晚上到今天早上解決的一些問題的彙總,可能先後順序之類的會記錯;
此文目的用於提供一些解決問題的思路,聊以備忘,以使不忘,後事之師。
Contents
設備問題
個人設備過老或者缺失
mac pro early 2015
xcode不能更新,所以最新的flutter項目沒法用 macos 來debug,且硬件所限,運行 idea 都發出拖拉機的聲音,所以 android emulator也是卡成狗
2013年的組裝電腦
windows電腦都這逼樣,超過一定年限,哪怕資源管理器裏面內存和cpu佔用不高,按下 win+e 都能反應半天,最後還是選了在windows上通過android studio加x86 emulator 來排除一些環境問題
唯一的安卓設備 mi pad
由於意氣之下弄壞了
環境問題
使用的部分flutter包只支持 iOS, android, macOS。
Running Gradle task 'assembleDebug'
使用國內源加速maven與gradle
老是卡這裏,開始以爲是 maven 沒有使用國內源加速的原因,
先後在以下文件中替換了 gradle 的國內源
- {flutter_home}/package/flutter_tools/gradle/flutter.gradle
- /app/build.gradle
然而沒什麼鳥用。
直接使用命令行來進行gradle編譯
然後根據網上提示,進入到 android 目錄下,先後運行:
flutter clean
./gradlew clean build
這個時候就可以看到 gradle 真正的報錯信息了.
FAILURE: Build failed with an exception.
Where:
Build file 'F:\workspace\app\android\app\build.gradle' line: 24
What went wrong:
A problem occurred evaluating project ':app'.
Failed to apply plugin 'com.android.internal.application'.
Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
Your current JDK is located in F:\Program Files\Java\jdk1.8.0_60\jre
You can try some of the following options:
- changing the IDE settings.
- changing the JAVA_HOME environment variable.
- changing org.gradle.java.home in gradle.properties.
java版本問題
好嘛,java版本問題,去oracle下載一個不就得了,於是下了個java 20。
多年未更新過java的我,渠道oracle下載java,居然要登陸!!!!!
更新完成,繼續運行:
.\gradlew --status
1個idle的,6個 stopped,沒有問題,繼續:
./gradlew clean build
發現java 20也不行!友邦驚詫!!!
好嘛,寫在java 20,我就給你裝個java 11。
安裝完java 11,尼瑪,明明系統環境變量 \(JAVA_HOME\) 設置的就是新安裝的 java 11的jdk根目錄,缺還是去之前安裝的java 20的目錄下去找了!!!
爲也是服了,在 gradlew.bat 中也打了日誌,就是莫名其妙的在java 11的jdk目錄下的bin中找不到java 執行文件!!!
網上說,java 20卸載不乾淨會有殘留文件無法刪除,導致此問題。
確認了一下,確實在之前的java 20目錄下有殘留文件,立即 shift + DEL, 媽蛋,文件使用中。
折騰之下還是重啓電腦之後刪除掉了。
此事運行運行 clean, 會有什麼有趣的事情發生呢?
javaHome invalid問題
The supplied javaHome seems to be invalid.
於是,修改了 gradle.property:
org.gradle.java.home=f:\\Programe Files\\Java\\jdk-11
此時,項目的源碼可以編譯通過,但是
Unsuppoted class file major version 64
- 首先,在build.gradle中,將最小版本調整爲插件需要的最小版本
- 其次,此插件只能運行與移動平臺與mac上,可以使用模擬器debug一下
事實證明,模擬器中可以運行起來,無報錯。
至此,以及可以完美的運行起來了,可以往項目中加屎了。
資源服務器的問題
app需要用到一些資源,於是打算在wsl裝的ubuntu上搞一個http服務器專門用來提供資源管理。
用golang/gin寫了一個簡單的http靜態資源服務器,打包linux:
set GOOS=linux
set GOARCH=amd64
go build
好了,在 ubuntu 上執行 explore.exe .
之後,將剛纔生成的可執行文件拉進來, 直接運行,完美;
使用 nohup
運行,卡在了命令行,於是,想起來我這臺2013年的拖拉機確實無法承受如此重任,於是想到了上週從垃圾堆裏翻出來的樹莓派 3 B+;
重新將執行文件上傳到樹莓派:
scp /Users/duke/Downloads/reserver [email protected]:/home/pi/res
然後
chmod 777 ./reserver
然後運行
cannot execute binary file: Exec format error
難道是我的樹莓派是32bit的?不應該啊,之前確認過是64bit的。
然後調查了一下,突然想起樹莓派是arm架構的,於是
set GOOS=linux
set GOARCH=arm64
set CGO_ENABLED=0
go build -o reserver.out ./release/raspberry/reserver.out
然後,將此文件上傳至樹莓派,完美運行.
Conclusion
- 目前 flutter 只支持 java 11,官網下載java要登陸,國內其實有免登陸的下載源;
- 無法忍受android項目 assembleDebug 太慢,可以自己手動調試一下;
- gradle最後debug插件遇到問題很有可能其實是本地平臺的問題,