openharmony
deveco 4.1支持armeabi-v7a
deveco 5.0后不支持arm32位系統
boost編譯
使用deveco的寫cmake集成boost
boost使用1.88的最新版本,帶cmake工具鏈
https://github.com/boostorg/boost.git
boost的源碼都在sub_module中
deveco 4.1的版本sdk最高到9,cmake版本比較低,類似下面的錯誤(sdk9中兼容性不太好,很多函數頭文件中沒有定義,sdk高版本中才有)
- The property “CMAKE_CXX_STANDARD_REQUIRED” is not allowed
通過使用sdk13等高版本的cmake可以解決,cmake版本3.22
通過subdirs集成boost項目到項目中,點擊deveco run執行編譯
subdirs(d:/opensource/boost //deveco中項目只能一個個添加后注釋的方式編譯,一個項目錯誤,其他項目都會停止編譯
)
編譯生成的文件都在本項目中,即使subdirs不在本項目中
- a文件在.cxx目錄中的
- so文件在build/intermediates
使用boost
編譯完成后可以注釋掉subdirs模塊
subdirs(d:/opensource/boost
)
使用find_package查找boost庫信息,編譯好的so和a通過手動指定路徑的方式導入
如何還是找不到,使用set的方式手動添加定義
set(Boost_DIR d:/opensource/boost)
set(Boost_INCLUDE_DIR d:/opensource/boost/libs/config/include)
鏈接問題
使用objdump查看完整的函數信息
objdump -tC libboost_log.so.1.88.0 |grep boost::log::v2_mt_posix::aux::default_attribute_names::line_id
鴻蒙中cmake設置輸出so文件,通過查找源碼函數定義,發現cmake添加如下定義才能鏈接成功
add_definitions(-DBOOST_ALL_DYN_LINK)
c++后端server
后端使用drogon搭建webserver,前端js使用瀏覽器嵌入的方式
import { webview } from '@kit.ArkWeb';@Entry
@Component
struct WebComponent {controller: webview.WebviewController = new webview.WebviewController();@State mode: MixedMode = MixedMode.All;aboutToAppear() {// 配置Web開啟調試模式webview.WebviewController.setWebDebuggingAccess(true);}build() {Column() {Web({src:$rawfile('dist/index.html'),controller: this.controller }).mixedMode(this.mode).domStorageAccess(true).fileAccess(true)}}
}
權限問題:
module.json5中需要配置相應的權限,且低于1024的網絡端口需要特殊權限,最好修改端口
"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.DISTRIBUTED_DATASYNC", //可以不用,局域網數據傳輸用"reason": "$string:app_name","usedScene": {"abilities": ["com.example.EntryAbility"],"when": "always"}}
drogon+boost跨windows、linux、openharmony的應用,完全沒問題^_^
唯一的問題是openharmony的很多目錄是只讀的,只有部分目錄能訪問,且需要權限才行
程序自生能訪問的路徑,通過沙盒路徑訪問,直接訪問物理路徑不行
物理路徑需要和沙盒中的路徑對應
應用沙箱路徑 | 物理路徑 |
---|---|
/data/storage/el1/bundle | 應用安裝包目錄: /data/app/el1/bundle/public/<PACKAGENAME> |
/data/storage/el1/base | 應用el1級別加密數據目錄: - 非獨立沙箱運行的應用:/data/app/el1/<USERID>/base/<PACKAGENAME> - 以獨立沙箱運行的Extension應用: /data/app/el1/<USERID>/base/+extension-<EXTENSIONPATH>+<PACKAGENAME> |
/data/storage/el2/base | 應用el2級別加密數據目錄: - 非獨立沙箱運行的應用:/data/app/el2/<USERID>/base/<PACKAGENAME> - 以獨立沙箱運行的Extension應用: /data/app/el2/<USERID>/base/+extension-<EXTENSIONPATH>+<PACKAGENAME> |
/data/storage/el1/database | 應用el1級別加密數據庫目錄: - 非獨立沙箱運行的應用:/data/app/el1/<USERID>/database/<PACKAGENAME> - 以獨立沙箱運行的Extension應用:/data/app/el1/<USERID>/database/+extension-<EXTENSIONPATH>+<PACKAGENAME> |
/data/storage/el2/database | 應用el2級別加密數據庫目錄: - 非獨立沙箱運行的應用:/data/app/el2/<USERID>/database/<PACKAGENAME> - 以獨立沙箱運行的Extension應用:/data/app/el2/<USERID>/database/+extension-<EXTENSIONPATH>+<PACKAGENAME> |
/data/storage/el2/distributedfiles | /mnt/hmdfs/<USERID>/account/merge_view/data/<PACKAGENAME> |
onDestroyx
鴻蒙onDestroy不會銷毀進程(除非系統配置里面強制停止,或者hdc shell kill),套接字重復打開可能有問題,需要定義結束進程的接口