Skip to content

影视代码结构

整体结构

FongMi影视的release分支,代码结构如下:

shell
TV
├── app
│   └── libs
│   └── src
│   │   └── main
│   │   └── leanback
│   │   └── mobile
│   │   └── 其它api&abi(x86、arm64_v8a、armeabi_v7a)
│   └── build.gradle
│   └── proguard-rules.pro
├── xxx模块(catvod、ijkplayer、jianpian、quickjs、thunder...)
├── build.gradle
├── setting.gradle

项目结构是安卓开发的常见结构,主模块为app,依赖其它模块如catvod、ijkplayer、thunder等。

在项目的setting.gradle中定义:

  • pluginManagement 插件管理器,定义项目的插件仓库,一般是外网仓库,需要梯子加速
  • dependencyResolutionManagement 依赖管理器,定义项目依赖的仓库,也是外网居多
  • include 项目模块导入

在项目的build.gradle中,置顶需要的插件及版本等。

app模块是项目的主应用模块,从app/build.gradle文件看出:

  • dependencies 定义依赖,依赖包括项目的其它模块及依赖包
  • plugins 定义app模块的插件
  • android 安卓设置,由于FongMi影视壳的一个release分支,适配tv版、手机版、java或python等多版本,采用了安卓的构造变体进行编译打包。
  • proguard-rules.pro 指定代码混淆时的保留规则,一般不动

build.gradle定义了一系列基础配置:defaultConfig

  • applicationId 应用id,用于安卓打包apk时的唯一标识
  • minSdk 指定最小兼容的sdk版本
  • targetSdk 目标sdk版本
  • versionCode 版本编码,升级版本时根据该字段校验
  • versionName 版本号

构造变体分3个维度:mode、api、abi。分别指定(电视或手机leanback、mobile)、(语言java、python)、(服务器架构x86、arm64_v8a、armeabi_v7a)。

1714033027529

构造变体按照:应用名-mode-api-abi.apk 的文件名后缀输出。

通过视图--工具窗口--build variants打开工具栏

1714033204681

本地编译时,可切换构造变体进行代码编译

1714033119550

主模块结构

以app主模块中的src/mobile手机版代码为例。一般app模块的核心代码在main模块中。这里分文件夹进行统一管理,在打包时,会将main和mobile的配置进行合并输出。

bash
TV
├── app
│   └── libs
│   └── src
│   │   └── main
│   │   └── mobile
│   │   │   └── java
│   │   │   │   └── cast #广播相关
│   │   │   │   └── receiver #接收器相关
│   │   │   │   └── service #后端进程相关,执行一些后台任务
│   │   │   │   └── ui #核心ui控件
│   │   │   │   │   └── activity #安卓控件
│   │   │   │   │   └── adapter #适配器,用于给控件绑定值
│   │   │   │   │   └── base #基础类,公告操作
│   │   │   │   │   └── custom #一些自定义
│   │   │   │   │   └── dialog # 弹窗
│   │   │   │   │   └── fragment #片段,类似于activity下的控制器或者组件
│   │   │   │   │   └── holder #用户缓存绑定数据
│   │   │   │   │   └── xxx #在main包下可能还有其他模块,主要是公共bean,model,api,callback等
│   │   │   │   └── utils
│   │   │   └── res #静态资源文件
│   │   │   │   └── color #用于定义颜色
│   │   │   │   └── drawable #用于定义图表
│   │   │   │   └── layout #核心,布局文件
│   │   │   │   └── menu #用于定义菜单
│   │   │   │   └── value #用于定义字符串文本,支持国际化
│   │   │   └── AndroidManifest.xml #安卓配置文件
│   └── build.gradle

主模块里的AndroidManifest.xml是安卓应用的配置清单,描述应用的基本信息、所需权限、组件等:

  • 元数据定义:指定了xml文件使用的命名空间和工具。

  • 权限申请:应用需要的权限。

  • 查询配置:应用可能查询的外部应用类型,如打开文档、查看视频、发送文本等。

  • 应用配置:应用的基本信息,如应用名、图标、类别等。

  • 提供者配置:应用中使用的文件提供者和QuickJS提供者。

  • 组件配置:定义使用到的一些列控件Activity。

  • 接收器配置:定义接收器。

    该文件用于配置应用的各种属性和权限,以便系统正确运行和管理应用。

一般需要改应用的图标,包名(一般通过build.gradle里的applicationId修改),应用名等,即是改main包的配置清单里的application应用配置