在 Windows 操作系統上開發套件, 不僅希望這個套件能夠在 Mac OS X 與 Linux 上運行, 而且整個程式環境都能放入一個 USB 隨身碟, 在任何一台乾淨的 64 位元 Windows 10 操作系統中都能正常運行. 不受限制, 因此需要打造一個隨身程式系統.
啟動批次檔案
從以下這個 start.bat 批次啟動檔案, 大致可以看出此一可攜程式系統所包含的內容:
@echo off set Disk=y subst %Disk%: "data" %Disk%: set HomePath=%Disk%:\home_no_proxy set HomeDrive=%Disk%:\home_no_proxy set Home=%Disk%:\home_no_proxy set USERPROFILE=%Disk%:\home_no_proxy REM 將系統 Python 程式的 io 設為 utf-8 set PYTHONIOENCODING="utf-8" set PYTHONPATH=%Disk%:\Python38\DLLs;%Disk%:\Python38\Lib;%Disk%:\Python38\Lib\site-packages; set PYTHONHOME=%Disk%:\Python38 REM for Java and Android SDK set java_home=%Disk%:\java\jdk8u222-b10 set ANDROID_SDK_home=%Disk%:\home_no_proxy set GRADLE_USER_home=%Disk%:\home_no_proxy set ANDROID_SDK_ROOT=%Disk%:\android\sdk set ANDROID_Home=%Disk%:\android\sdk set REPO_OS_OVERRIDE=windows REM 設定跟 Python 有關的命令搜尋路徑 set path_python=%Disk%:\Python38;%Disk%:\Python38\Scripts; REM 設定跟Git 有關的命令搜尋路徑 set path_git=%Disk%:\portablegit\bin; REM 設定 msys2 64 位元的執行路徑 set path_msys2=%Disk%:\msys64\mingw64\bin; REM set for LaTeX set path_miketex=%Disk%:\miktex-portable\texmfs\install\miktex\bin\x64; REM Flutter path set path_flutter=%Disk%:\flutter\bin;%java_home%\bin;%Disk%:\Android\sdk;%Disk%:\Android\sdk\tools;%Disk%:\Android\sdk\tools\bin;%Disk%:\Android\sdk\emulator;%Disk%:\Android\sdk\platform-tools;%Disk%:\flutter\bin\cache\dart-sdk\bin;%Disk%:\vscode; path=%Disk%:;%path_python%;%path_git%;%path_msys2%;%path_miketex%;%path_flutter%;%path%; start /MIN cmd.exe start /MIN cmd.exe start /MIN cmd.exe start /MIN cmd.exe start /MIN %Disk%:\wScite\SciTE.exe start /MIN %Disk%:\wScite\SciTE.exe Exit
關閉隨身系統的批次檔案 stop.bat, 只將 python, scite 與 dos 命令列關閉, 若需要關閉其他可能開啟的套件, 可以自行加入:
@echo off set Disk=y path=%PATH%; taskkill /IM python.exe /F taskkill /IM pythonw.exe /F taskkill /IM scite.exe /F REM 終止虛擬硬碟與目錄的對應 subst %Disk%: /D REM 關閉 cmd 指令視窗 taskkill /IM cmd.exe /F EXIT
此一隨身系統安裝配置以 MSYS2 與 Flutter 較具挑戰性.
MSYS2
首先與 MSYS2 的代理主機設定位於 Y:\msys64\etc\wgetrc. 接下來為了可以編譯 C++ 程式, 必須安裝
pacman -S mingw-w64-x86_64-gcc
與
pacman -S mingw-w64-x86_64-toolchain
而列出 MSYS2 中所安裝的模組:
pacman -Q
為了編譯 [Range3], 必須額外安裝:
pacman -S mingw-w64-x86_64-ffmpeg pacman -S mingw-w64-x86_64-qt5 pacman -S mingw-w64-x86_64-qt5-static
編譯 Range3
git clone https://github.com/Range-Software/range3.git
start Y:\msys64\mingw64.exe
cd \y\tmp\fem_ex\range3
./scripts/build.sh --clean && ./scripts/create_package.sh
而為了讓 svg 格式的 icons 能夠正確顯示, 必須納入 Qt5Svg.dll
Flutter
至於現階段 Flutter 的安裝配置問題源自 Android sdk 的最新版 tools 與最新版的 Flutter 並不相容. 具體原因是: 目前的 Flutter 必須使用舊版的 Android sdk 中的舊版 tools.
使用者若從 Android 官方網站下載 tools 工具, 試圖與 Flutter 配合, 將會在執行:
flutter doctor
時將出現 Android sdk licenses 尚未完成. 但是若再以:
flutter doctor --android-licenses
就會出現 Java setting 錯誤.
解決方案
處理上述 Flutter 與最新版 Android 無法相容的問題, 必須借助:
sdkmanager --sdk_root=y:\android\sdk tools
安裝舊版的 Android sdk tools, 問題是 sdkmanager 工具就位於 tools 目錄中, 因此必須先將新版的 tools 目錄改名為 tools_new, 並配合將 tools_new/bin 設為 start.bat 中的 PATH, 可攜系統啟動後, 以:
sdkmanager --sdk_root=y:\android\sdk tools
安裝舊版的 Android sdk tools 後, 再將 PATH 路徑改為舊版 tools/bin.
之後再以
flutter doctor --android-licenses
同意使用授權後, 就可以接續進行 Flutter 套件的開發.
No comments:
Post a Comment