在软件开发领域,一个项目常常有多种技术方案可选。这些不同的技术搭配,可能会导致开发过程和最终成果出现显著差异。这样的情况,既带来了机遇,也带来了挑战。
SDK源码的价值
源码在开发过程中被视为宝贵的资源。在我们项目所用的众多软件中,其SDK源码是公开的,这就像是在黑暗中点亮了一盏灯。记得当初我刚开始接触这个项目时,看到源码就感到非常高兴。对于开发者而言,阅读源码能让我们更深入地了解其中的“核心技术”,这样的机会难得一见。在我们公司,由于保密协议的限制,我们的源码不能对外开源,这使得阅读SDK源码显得尤为珍贵。通过阅读源码,我能学到许多前人的智慧,为我的项目开发打下了坚实的思想基础。
项目的具体规划
这个项目主要是开发一个抖音App,但重点在于实现其中的特效功能。我将依据阅读源码的收获来搭建项目。在公司提供的开发环境中,我计划不会在服务器交互和界面交互上花费太多时间。这个选择是基于项目实际需求做出的。鉴于资源和时间都有限,我需要把精力集中在特效这一核心环节。我们的目标是在有限的资源和交付时间内,尽可能地将特效部分做到最好。
根据以往项目经验,类似问题确实曾出现。过分追求全面性,往往会使关键环节出现问题。因此,本项目必须明确方向和重点。
Rxjava组件的考量
Rxjava功能强大,其扩展库内容丰富。本项目中有些功能可通过其扩展库实现,但我最终选择不使用该组件。这并非轻率决定。通过分析过往类似项目,我发现使用它可能会引入额外的不必要复杂性。例如,在之前的一个小项目中,使用类似组件后,代码维护费用极高。结合当前项目的特效实现需求和技术栈,经过权衡,我认为不使用它更为合适。
此外,考虑到团队对其他技术手段的熟悉度,本项目采用Rxjava并非必需。团队成员对替代方案更为了解,这有助于降低学习成本和可能出现的开发风险。
AOP技术框架选择
AOP技术在多个领域都有应用,比如日志记录和自动埋点,都少不了它的身影。现在,我们有AspectJ、APT和ASM等框架可供挑选。在以往的项目中,挑选框架时,我们会考虑其易用性和对特定功能的适应性。以日志管理项目为例,我们最终选择了AspectJ,因为它在日志记录方面表现突出。目前,我们还未确定最终的选择。等到实际着手实现日志和埋点框架时,我们会根据业务场景、性能需求等因素进行评估,挑选最合适的框架。
JNA框架选择原因
JNA这个框架可能部分开发者不太了解,但它对Java开发者来说非常友好,可以用来调用本地方法,是JNI的替代品。在我们项目里,主要任务是开发抖音特效,而这需要用到JNI。从项目组同事对JNI的使用反馈来看,JNI操作起来有些繁琐,而JNA恰好能解决这一问题。引入这个便捷的库能提升开发效率。在我们的开发工作室,同事们在进行了简单的调研和测试后,发现JNA完全符合项目需求,因此我们最终选择了它。
其他技术的待定选择
目前我们在opencv的使用上还处于起步阶段,由于尚未明确公司视频特效的具体技术实现,我们暂且选择了opencv。待我们深入到核心代码层面,再考虑是否做出调整。至于深度学习框架,之前尝试过tensorflow lite,但效果不尽人意,现正考虑使用腾讯的ncnn作为替代。不过,这还需等到实际应用深度学习技术的时机。至于WebView,尽管hybird app很流行,我们先预留位置,以后再决定是否开发一个简易的与js交互的WebView容器。最后,我们决定采用grpc作为项目的rpc后端框架,开发语言上,首选python,辅以java,若有余力,可能还会用go来构建小服务。每种技术的选用都充满变数和探索,如同在未知路途中摸索,但只要根据实际情况,总能找到合适的技术路径。