安卓手机APP开发__媒体开发部分__APK裁剪

embedded/2024/9/23 11:16:27/

安卓手机APP开发__媒体开发部分__APK裁剪

目录

概述

仅使用必要的依赖

启用代码和资源的裁剪

指定你的APP需要哪一个渲染器

指定你的APP需要哪个抽取器

定制媒体源的实例化


概述

最小化APK的大小是开发一个好的安卓APP的一个重要的方面.当面向的是正在开发
的市场时更是如此,当开发一个安卓的小程序时,也是很重要的.对于这些用例,
对于包括在APK中的ExoPlayer库的大小的最小化,就是让人很期待的事了.
这里列出了实现这个任务的几个步骤.

仅使用必要的依赖

仅依赖你实际需要的库的模块.例如,对于一个APP仅播放DASH内容,仅加上如下的
依赖,即ExoPlayer, DASH和用户界面库的模块.

Kotlin

implementation("androidx.media3:media3-exoplayer:1.3.1")
implementation("androidx.media3:media3-exoplayer-dash:1.3.1")
implementation("androidx.media3:media3-ui:1.3.1")

启用代码和资源的裁剪

你应该对你的APP的发布版本,启用代码和资源的裁剪.ExoPlayer是结构化的,支持以一种方式
来允许代码裁剪,来有效地移除没有用的功能.例如,对于一个播放DASH内容的APP,ExoPlayer
通过启用代码裁剪,可以减少40%的自身大小.

阅读裁剪,并且优化你的APP,来学习如何启用代码和资源的裁剪.

指定你的APP需要哪一个渲染器

默认情况下,播放器的渲染器能使用DefaultRenderersFactory来创建.
DefaultRenderersFactory依赖所有的渲染器的实现,结果是在代码裁剪时
没有代码被裁剪掉.如果你知道你的APP仅需要一个渲染器的子集,你能指定你
自己的RenderersFactory来替换原来的.例如,一个APP仅播放音频,能够定义
一个工厂是如下的形式:

Kotlin

val audioOnlyRenderersFactory =RenderersFactory {handler: Handler,videoListener: VideoRendererEventListener,audioListener: AudioRendererEventListener,textOutput: TextOutput,metadataOutput: MetadataOutput,->arrayOf<Renderer>(MediaCodecAudioRenderer(context, MediaCodecSelector.DEFAULT, handler, audioListener))
}
val player = ExoPlayer.Builder(context, audioOnlyRenderersFactory).build()

这将允许在代码裁剪时把其它的渲染器的代码给裁剪掉.在这个特殊的示例视频中,文件和
元数据的渲染器都被移除了.


指定你的APP需要哪个抽取器

默认情况下,播放器创建了抽取器实例来播放先进的媒体,使用的是DefaultExtractorsFactory.
DefaultExtractorsFactory依赖所有的抽取器,结果是没有抽取器被裁剪掉.如果你知道,你的
APP播放很少的容器的格式,或者根本不需要播放先进的媒体,你能指定你的ExtractorsFactory
来替换掉原来的.例如,一个APP仅需要播放MP4文件,能提供如下的工厂:


Kotlin

val mp4ExtractorFactory = ExtractorsFactory {arrayOf<Extractor>(Mp4Extractor(DefaultSubtitleParserFactory()))
}
val player =ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, mp4ExtractorFactory)).build()

这将允许通过代码裁剪,把其它的抽取器的实现优化掉,这能让APK的大小有显著地减少。

如果你的APP不播放先进的内容,你应该把ExtractorsFactory.EMPTY传给
DefaultMediaSourceFactory的组装子,然后,把mediaSourceFactory传给
ExoPlayer.Builder的组装子。


Kotlin

val player =ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, ExtractorsFactory.EMPTY)).build()

定制媒体源的实例化

如果你的APP使用一个定制的MediaSource.Factory,并且你要DefaultMediaSourceFactory
通过代码优化而被优化,你应该把你的MediaSource.Factory直接传给
ExoPlayer.Builder的组装子。


Kotlin

val player = ExoPlayer.Builder(context, customMediaSourceFactory).build()

如果你的APP是使用MediaSource直接代替了MediaItem,你应该把
MediaSource.Factory.UNSUPPORTED传给ExoPlayer.Builder的组装子,来确保
DefaultMediaSourceFactory 和 DefaultExtractorsFactory都被优化了。


Kotlin

val player = ExoPlayer.Builder(context, MediaSource.Factory.UNSUPPORTED).build()
val mediaSource =ProgressiveMediaSource.Factory(dataSourceFactory, customExtractorsFactory).createMediaSource(MediaItem.fromUri(uri))


http://www.ppmy.cn/embedded/23870.html

相关文章

[XR806开发板试用] XR806 调用cjson 实现数据序列化

很荣幸获得极术设区提供的这次试用机会&#xff0c;可以接触鸿蒙操作系统。我工作接触最多的是linux 平台的嵌入式ARM平台较多&#xff0c;这次跑了下鸿蒙&#xff0c;也非常有趣。 不过接进年底了&#xff0c;日常大小琐碎事情突然多了起来&#xff0c;测评的比较匆忙&#x…

MySQL Binlog 闪回与分析

文章目录 前言1. 修改 event 实现闪回1.1 binlog 结构1.2 闪回案例1.3 方法总结 2. 解析文本闪回2.1 mysqlbinlog2.2 闪回案例2.3 方法总结 3. 在线订阅闪回3.1 mysql-replication3.2 binlog2sql3.3 方法总结 4. Binlog 分析方法4.1 分析场景4.2 辅助定位事务4.3 方法总结 5. 平…

连锁企业如何通过OceanBase解决数据库瓶颈

本文来自OceanBase客户&#xff0c;重庆三十七度健康管理有限公司的技术负责人Rinvay的分享 背景 足疗养生对于大家来说应该并不陌生&#xff0c;自古以来便有多部古籍记载。尽管现代生活中&#xff0c;人们可能不再严格遵循节气进行泡脚&#xff0c;但在忙碌的工作间隙&#…

AJAX——案例_天气预报

天气预报案例 步骤 获取北京市天气数据&#xff0c;展示搜索城市列表&#xff0c;展示点击城市&#xff0c;显示对应天气数据 index.css代码 html, body {height: 100%; }body {background-image: linear-gradient(135deg, #50B1FF 0%, #1F57D6 100%); }.container {width: 12…

web(微博发布案例)

示例&#xff1a; 1、检测空白内容 2、发布内容 html: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta …

深度学习 --- stanford cs231学习笔记(一)

stanford cs231学习笔记(一) 1&#xff0c;先是讲到了机器学习中的kNN算法&#xff0c;然后因为kNN分类器的一些弊端&#xff0c;引入了线性分类器。 kNN算法的三大弊端&#xff1a; (1)&#xff0c;计算量大&#xff0c;当特征比较多时表示性差 (2)&#xff0c;训练时耗时少…

软件物料清单(SBOM)生成指南 .pdf

如今软件安全攻击技术手段不断升级&#xff0c;攻击数量显著增长。尤其是针对软件供应链的安全攻击&#xff0c;具有高隐秘性、追溯难的特点&#xff0c;对企业软件安全威胁极大。 同时&#xff0c;软件本身也在不断地更新迭代&#xff0c;软件内部成分安全性在持续变化浮动。…

前端实现将二进制文件流,并下载为excel文件

目录 一、关于二进制流二、项目实践三、常见问题及解决 一、关于二进制流 含义&#xff1a;二进制流是一种计算机文件格式&#xff0c;它的数据以二进制形式存储&#xff0c;与文本文件不同。 二进制文件可以包含任意类型的数据&#xff0c;例如&#xff1a;图像、音频、视频…