前言
最近因工作之需,研究了一下如何 Build CHIPTool 的 apk,因為按照官方文件步驟實作會有錯誤,自己一步一步解決最後終於成功,因此想寫一篇文章紀錄,幫助我自己進行複習,也希望能對其他開發者提供幫助。🙂
簡介
Matter(前稱為Project CHIP,即Connected Home over IP)是一個統一的開源連接標準,旨在增強智能家居設備之間的互操作性和兼容性。這個標準由連接標準聯盟(CSA)開發,成員包括亞馬遜、蘋果、谷歌和Zigbee聯盟等主要行業參與者。
Matter的目標是簡化製造商的開發過程,確保智能家居產品的安全性、可靠性和易用性。它利用互聯網協議(IP)來實現各種設備、移動應用和雲服務之間的通信,支持Thread和Wi-Fi網絡傳輸。
Matter的目標是創建一個無縫且互操作的智能家居生態系統,使不同製造商的設備能夠順利協同工作。
事前準備
因為在個人開發環境 Build 容易破壞環境,會需要修改 ANDROID_HOME & ANDROID_NDK_HOME 等等…,因為 CHIP 有提供 build 環境的 image,所以這邊我選擇用 docker 使用 CHIP 的 image 啟 container 來 build.
- Docker
Pull Docker Image
這個步驟會需要一點時間,可以去喝杯咖啡
docker pull ghcr.io/project-chip/chip-build-android:latest
Run container
docker run -it -v ~/workspace/connectedhomeip:/connectedhomeip ghcr.io/project-chip/chip-build-android:latest
上面簡單的兩個步驟,我們就將乾淨可 Build CHIPTool 的環境建構好了.
將目錄標示為安全,方便git操作
git config --global --add safe.directory /connectedhomeip
git config --global --add safe.directory /connectedhomeip/third_party/pigweed/repo
Download source code & sync submodule
這個步驟會超級久,因為資料量非常大,可以先去做其他事或睡一覺😂
git clone https://github.com/project-chip/connectedhomeip.git
git submodule sync && git submodule update --init
同意 Android sdk 的 licenses
我們需要先同意 Android sdk licenses,不然等等 build 的時候會出現錯誤(如下),因為我們沒有同意 licenses
FAILURE: Build failed with an exception.
2024-07-16 09:31:40 WARNING
2024-07-16 09:31:40 WARNING * What went wrong:
2024-07-16 09:31:40 WARNING Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
2024-07-16 09:31:40 WARNING > Failed to install the following Android SDK packages as some licences have not been accepted.
2024-07-16 09:31:40 WARNING build-tools;30.0.2 Android SDK Build-Tools 30.0.2
2024-07-16 09:31:40 WARNING platforms;android-31 Android SDK Platform 31
2024-07-16 09:31:40 WARNING To build this project, accept the SDK license agreements and install the missing components using the Android Studio SDK Manager.
2024-07-16 09:31:40 WARNING Alternatively, to transfer the license agreements from one workstation to another, see http://d.android.com/r/studio-ui/export-licenses.html
2024-07-16 09:31:40 WARNING
2024-07-16 09:31:40 WARNING Using Android SDK: /opt/android/sdk
2024-07-16 09:31:40 WARNING
2024-07-16 09:31:40 WARNING * Try:
2024-07-16 09:31:40 WARNING 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.
2024-07-16 09:31:40 WARNING
2024-07-16 09:31:40 WARNING * Get more help at https://help.gradle.org
2024-07-16 09:31:40 WARNING
2024-07-16 09:31:40 WARNING BUILD FAILED in 1m 50s
為了方便我們先將PATH export,使其能在任何目錄下呼叫
export PATH=$PATH:/opt/android/sdk/tools/bin
同意所有 licenses
sdkmanager --licenses
全部輸入 y
or yes
檢查環境變數
用 docker 使用 CHIP 提供的 image 環境好處之一就是我們不用再去下載指定的 sdk 及 ndk 版本,也不需要重新指向環境變數
root@f39e36c15675:/connectedhomeip# echo $ANDROID_HOME
> /opt/android/sdk
root@f39e36c15675:/connectedhomeip# echo $ANDROID_NDK_HOME
> /opt/android/android-ndk-r23c
Preparing for build
- 切換到 Matter repositoy
cd /connectedhomeip
- Run bootstrap (only required first time) 此步驟也需要一段時間
source scripts/bootstrap.sh
Android CHIPTool from scripts
- 執行 script
./scripts/build/build_examples.py --target android-arm64-chip-tool build
但這個步驟跑到最後會出現錯誤說找不到 build.ninja
ninja: error: loading 'build.ninja': No such file or directory
我猜這邊是 CHIP 官方文件沒有寫完整,會無法進行下去,這邊我的解決方式是到 /out/android-arm64-chip-tool
目錄下去建立 build.ninja
,很簡單如下
cd /connectedhomeip/out/android-arm64-chip-tool
gn gen .
這樣就會產生 build.ninja
檔案了
接下來回到 /connectedhomeip
目錄下
cd ../..
再執行一次就大功告成了! (Build 的過程會花比較久時間)
./scripts/build/build_examples.py --target android-arm64-chip-tool build
Build 完後可以在下面路徑找到 apk
out/android-$TARGET_CPU-chip-tool/outputs/apk/debug/app-debug.apk
Leave a comment