LIBDSM庫對多平臺、多方案支持的開發與探索 - 準備

系列文章

項目地址 - https://github.com/biezhihua/libdsm

前言

已經入行很久了,心中一直有個想法,就是寫個能夠爲大家所用的、支持多平臺的基礎庫。

主要目標有如下:

  • 一個是能帶來一些成就感
  • 一個是能夠熟悉更多一些的技術細節
  • 一個是能夠對多平臺支持的架構設計能有一些心得

奈何種種情況之下,這個想法一直沒有達成,趁着春節,花了不少時間,終於完成了該想法。

目前針對於客戶端iOS和Android平臺,從底層到上層的的實現,各自有如下技術棧:

  • Android:

    • Java/Kotlin + JNI + C/C++
      • 產物: .aar
  • iOS:

    • OC/Swift + Birdge + C/C++
      • 產物: .framework
  • Flutter:

    • Dart + Dart Channel + Platform Plugin:
      • Android Plugin: Java/Kotlin + AAR
      • iOS Plugin: OC/Swift + Framework
    • Dart + Dart FFI + C/C++:
      • https://flutter.dev/docs/development/platform-integration/c-interop
  • Unity3D (僅Android):

    • C# + AndroidJNIModule + aar

這次的Code,也同時涉及這四個方面,分別會給出各自方案的實現。

對於DSM,這裏簡單介紹一下,這是一個用C寫的,SMB的客戶端簡版實現,由VLC團隊維護。

無意中發現該DSM庫,在各個平臺上並沒有開源的實現,故此,造一個輪子。

架構

架構以簡單明瞭爲原則,選取已實現的部分,作爲子項。

image.png

可以看到,整個的實現方案是以雙端Android和iOS的實現方案爲基礎,擴展到Flutter和Unity3D的。

並且,爲了能夠最大程度的複用,是將純C/C++作爲一個獨立的模塊。

以此圖爲架構,就能完成一個,適用於雙端的、支持原生Android、原生iOS、Flutter、Unity3D的DSM庫。

構建

由於目前的方案是基於DSM©在雙端平臺的封裝實現,自然一個前提就是首先構建出來DSM用於支持雙端架構(ARCH)的的靜態庫(.so)和動態庫(.a)。

DSM實現的很好,但是奈何在編譯產出這一步,比較繁瑣艱難。

這裏使用libs-build-tool,可以快速協助構建產物。

Android:

/android.sh -c && ./android.sh --enable-libdsm --arch-all

iOS:

./ios.sh -c && ./ios.sh --arch-all --enable-libdsm

最後的產物結果目錄如下:

Android:

libdsm
  |
  |---- include
  |
  |---- lib
          |
          |---- arch
                  |
                  |---- libcharset.a
                  |---- libdsm.a
                  |---- libiconv.a
                  |---- libtasn1.a

iOS:

libdsm
  |
  |---- include
  |
  |---- lib
         |
         |---- libcharset.a
         |---- libdsm.a
         |---- libiconv.a
         |---- libtasn1.a

構建好產物之後,現在開始各個平臺的開發。

引用

  • https://github.com/videolabs/libdsm/
  • https://github.com/biezhihua/libdsm
  • http://videolabs.github.io/libdsm
  • https://github.com/biezhihua/libs-build-tool
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章