影视代码结构
整体结构
FongMi影视的release分支,代码结构如下:
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)。
构造变体按照:应用名-mode-api-abi.apk 的文件名后缀输出。
通过视图--工具窗口--build variants打开工具栏
本地编译时,可切换构造变体进行代码编译
主模块结构
以app主模块中的src/mobile手机版代码为例。一般app模块的核心代码在main模块中。这里分文件夹进行统一管理,在打包时,会将main和mobile的配置进行合并输出。
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应用配置