系列文章
- LIBDSM库对多平台、多方案支持的开发与探索 - 准备
- LIBDSM库对多平台、多方案支持的开发与探索 - Native Common
- LIBDSM库对多平台、多方案支持的开发与探索 - iOS
- LIBDSM库对多平台、多方案支持的开发与探索 - Android
- LIBDSM库对多平台、多方案支持的开发与探索 - Flutter
- LIBDSM库对多平台、多方案支持的开发与探索 - Unity
项目地址 - https://github.com/biezhihua/libdsm
前言
已经入行很久了,心中一直有个想法,就是写个能够为大家所用的、支持多平台的基础库。
主要目标有如下:
- 一个是能带来一些成就感
- 一个是能够熟悉更多一些的技术细节
- 一个是能够对多平台支持的架构设计能有一些心得
奈何种种情况之下,这个想法一直没有达成,趁着春节,花了不少时间,终于完成了该想法。
目前针对于客户端iOS和Android平台,从底层到上层的的实现,各自有如下技术栈:
-
Android:
- Java/Kotlin + JNI + C/C++
- 产物: .aar
- Java/Kotlin + JNI + C/C++
-
iOS:
- OC/Swift + Birdge + C/C++
- 产物: .framework
- OC/Swift + Birdge + C/C++
-
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
- Dart + Dart Channel + Platform Plugin:
-
Unity3D (仅Android):
- C# + AndroidJNIModule + aar
这次的Code,也同时涉及这四个方面,分别会给出各自方案的实现。
对于DSM,这里简单介绍一下,这是一个用C写的,SMB的客户端简版实现,由VLC团队维护。
无意中发现该DSM库,在各个平台上并没有开源的实现,故此,造一个轮子。
架构
架构以简单明了为原则,选取已实现的部分,作为子项。
可以看到,整个的实现方案是以双端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