• 代码开源设计实现思路


    一、背景

    部分客户对项目存在二次开发的需求,需要对现有的APK进行自定义的功能扩展开发。
    为了满足其二次开发的需求,需要对源码进行部分开放。
    对于开源的原则主要是最小知道原则。
    主要需要完成几个目标:
    1、只开源与UI相关的相关代码,将其他部分代码代码不进行开源。
    2、对于不进行开源的文件,要提供文档说明,说明相关作用以及相关接口。
    3、最终形成一份客户可编译、可修改的源码文件包发送给客户使用。

    二、设计目标

    1、对项目代码进行开源给客户,提供一份源代码文件。
    2、所开源的文件只涉及UI,不涉及具体逻辑。
    3、开源给客户的源文件要满足可编译、正常运行。
    4、要求本次开源过程要做到尽量少修改代码。

    三、详细实现方案与实现思路

    由于项目前期已经做过对应的模块化解耦处理,本次的方案在模块化耦合关系解除的基础上去完成。
    基本的方案是:
    1、将涉及UI的lib且需开源给用户二次开发的代码进行开源,这部分代码按照原来的文件结构保留。
    2、对于不涉及UI相关的lib包打包成arr包后进行导入,将这部分的源代码进行保留,且对逻辑代码进行混淆处理,避免出现代码层面的安全问题。
    3、最终形成一份用户对无需暴露部分隐藏后的可编译、可修改的源码文件包发送给客户使用。

    基本思路与步骤

    目前的项目模块图:
    在这里插入图片描述

    步骤1:确定需开源部分与无需开源部分(约0.5天)

    其中开源将组件分为两个部分:
    1、无需开源部分:

    1. 基础组件部分与gate-lib部分数据数据逻辑的处理以及一些底层的硬件控制逻辑,与UI无相关,因此无需将其开源。
    2. 后端交互相关lib:与后端交互相关,此部分建议进行保留,暴露可能存在一定的安全问题,无需开源。

    2、需开源部分:

    1. 注册相关lib:涉及用户注册相关UI界面,客户需要修改一些人脸采集逻辑时,用户可以进行修改,需要开源给客户。
    2. 设置相关模块lib:涉及apk系统设置的所有场景,客户在二次开发时容易涉及,与UI相关,需要开源给客户。
    3. 采集相关lib:人脸采集相关,用户若对人脸采集有场景需求需要用到,需要开源给客户。
    4. 平台UI相关lib:主界面UI相关,客户在修改时的重点场景,需要开源给客户。
    5. app-lib:app整体入口所在,需要开源给客户。

    总的来说,本次开源按照最小知道原则,只将与UI相关且客户开源修改的部分开源给客户。其余部分均选择打成arr包进行导入。

    步骤2:将无需开源部分打包成arr包

    1、使用Android Studio自带的gradle编译插件生成aar文件,同时对aar包进行混淆处理,避免出现代码层面安全问题。
    2、将该arr包导入到app目录下,在app目录下引用相关功能。
    3、不断重复该步骤,完成所有需要打包成aar包的lib。

    步骤3:将打包后的arr包与需开源部分代码组成新的代码工程文件。

    组合打包后的aar文件和开源的代码文件,将已经打包的aar文件lib删除,形成新的、可运行的代码文件工程。

    步骤4:自测打包是否能够正常编译、运行。

    编译工程,查看是否正常。
    编译完成后运行APK,测试主流程是否正常,模拟客户二次开发场景,是否能够满足客户需求。

    步骤5:编写必要的接口文档、解释说明文档。

    开源部分对非开源部分的相关接口,需要补一个接口文档开源部分的二次开发,需要一个二次开发文档

    步骤6:组合代码源文件和相关文档发送给客户

  • 相关阅读:
    Linux之GPIO应用
    【Spring Cloud】全面解析服务容错中间件 Sentinel 持久化两种模式
    《C++primer》第八章课后习题
    写书写到一半,强迫症发作跑去给HotChocolate修bug
    11-js事件基础
    golang中for循环的使用详解
    技术分享 | 常见接口协议解析
    SummaryWriter基本使用
    前端自动识别CAD图纸提取信息方法总结
    Navicat 下载
  • 原文地址:https://blog.csdn.net/Nimrod__/article/details/126014802