assembleDebug太慢的問題調查以及其他

Preface

最近在做flutter上的音頻和視頻方面的探索。
需要用到一些視屏區域截取,視屏導出成序列圖等等。
這是昨天晚上到今天早上解決的一些問題的彙總,可能先後順序之類的會記錯;
此文目的用於提供一些解決問題的思路,聊以備忘,以使不忘,後事之師。

Contents

設備問題

個人設備過老或者缺失

mac pro early 2015

xcode不能更新,所以最新的flutter項目沒法用 macos 來debug,且硬件所限,運行 idea 都發出拖拉機的聲音,所以 android emulator也是卡成狗

2013年的組裝電腦

windows電腦都這逼樣,超過一定年限,哪怕資源管理器裏面內存和cpu佔用不高,按下 win+e 都能反應半天,最後還是選了在windows上通過android studiox86 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插件遇到問題很有可能其實是本地平臺的問題,
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章