一、背景

部分客户对项目存在二次开发的需求,需要对现有的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:组合代码源文件和相关文档发送给客户

Logo

为开发者提供按需使用的算力基础设施。

更多推荐