APK boyutunu en aza indirmek, iyi bir Android uygulaması geliştirmenin önemli bir yönüdür. Bu durum, özellikle gelişmekte olan pazarları hedeflerken ve Android Anında Uygulaması geliştirirken geçerlidir. Bu gibi durumlarda, APK'ya dahil edilen ExoPlayer kitaplığının boyutunu en aza indirmek istenebilir. Bu sayfada, bu amaca ulaşmanıza yardımcı olabilecek bazı basit adımlar açıklanmaktadır.
Yalnızca gerekli bağımlılıkları kullanın
Yalnızca gerçekten ihtiyacınız olan kitaplık modüllerini kullanın. Örneğin, yalnızca DASH içeriği oynatan bir uygulama için gerekebileceği gibi, aşağıdakiler ExoPlayer, DASH ve kullanıcı arayüzü kitaplığı modüllerine bağımlılıklar ekler:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.7.1") implementation("androidx.media3:media3-exoplayer-dash:1.7.1") implementation("androidx.media3:media3-ui:1.7.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.7.1" implementation "androidx.media3:media3-exoplayer-dash:1.7.1" implementation "androidx.media3:media3-ui:1.7.1"
Kod ve kaynak küçültmeyi etkinleştirme
Uygulamanızın yayın derlemeleri için kod ve kaynak küçültmeyi etkinleştirmeniz gerekir. ExoPlayer, kod küçültmenin kullanılmayan işlevleri etkili bir şekilde kaldırmasına olanak tanıyacak şekilde yapılandırılmıştır. Örneğin, DASH içeriği oynatan bir uygulamada kod küçültme etkinleştirilerek ExoPlayer'ın APK boyutuna katkısı yaklaşık% 40 oranında azaltılabilir.
Kod ve kaynak küçültmeyi nasıl etkinleştireceğinizi öğrenmek için Uygulamanızı küçültme, karartma ve optimize etme başlıklı makaleyi okuyun.
Uygulamanızın hangi oluşturuculara ihtiyacı olduğunu belirtin
Varsayılan olarak, oynatıcının oluşturucuları DefaultRenderersFactory
kullanılarak oluşturulur. DefaultRenderersFactory
, ExoPlayer kitaplığında sağlanan tüm Renderer
uygulamalarına bağlıdır ve sonuç olarak hiçbiri kod küçültme ile kaldırılmaz. Uygulamanızın yalnızca bir alt küme oluşturucuya ihtiyacı olduğunu biliyorsanız bunun yerine kendi RenderersFactory
öğenizi belirtebilirsiniz. Örneğin, yalnızca ses çalan bir uygulama, ExoPlayer
örneklerini oluştururken aşağıdaki gibi bir fabrika tanımlayabilir:
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()
Java
RenderersFactory audioOnlyRenderersFactory = (handler, videoListener, audioListener, textOutput, metadataOutput) -> new Renderer[] { new MediaCodecAudioRenderer( context, MediaCodecSelector.DEFAULT, handler, audioListener) }; ExoPlayer player = new ExoPlayer.Builder(context, audioOnlyRenderersFactory).build();
Bu sayede, diğer Renderer
uygulamaları kod küçültme işlemiyle kaldırılabilir. Bu örnek videoda, metin ve meta veri oluşturucular kaldırılır.Bu nedenle, altyazılar veya yayın içi meta veriler (ör. ICY) oynatıcı tarafından işlenmez ya da yayınlanmaz.
Uygulamanızın hangi ayıklayıcılara ihtiyacı olduğunu belirtin
Varsayılan olarak, oynatıcı Extractor
kullanarak aşamalı medya oynatmak için DefaultExtractorsFactory
örnekleri oluşturur. DefaultExtractorsFactory
, ExoPlayer kitaplığında sağlanan tüm Extractor
uygulamalarına bağlıdır ve sonuç olarak hiçbiri kod küçültme ile kaldırılmaz. Uygulamanızın yalnızca az sayıda kapsayıcı biçim oynatması gerektiğini veya hiç aşamalı medya oynatmadığını biliyorsanız bunun yerine kendi ExtractorsFactory
değerinizi belirtebilirsiniz. Örneğin, yalnızca mp4 dosyalarını oynatması gereken bir uygulama şu gibi bir fabrika sağlayabilir:
Kotlin
val mp4ExtractorFactory = ExtractorsFactory { arrayOf<Extractor>(Mp4Extractor(DefaultSubtitleParserFactory())) } val player = ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, mp4ExtractorFactory)).build()
Java
ExtractorsFactory mp4ExtractorFactory = () -> new Extractor[] {new Mp4Extractor(new DefaultSubtitleParserFactory())}; ExoPlayer player = new ExoPlayer.Builder(context, new DefaultMediaSourceFactory(context, mp4ExtractorFactory)) .build();
Bu sayede, diğer Extractor
uygulamaları kod küçültme ile kaldırılabilir. Bu da boyutta önemli bir azalmaya yol açabilir.
Uygulamanızda hiç progresif içerik oynatılmıyorsa ExtractorsFactory.EMPTY
öğesini DefaultMediaSourceFactory
oluşturucusuna, ardından bu mediaSourceFactory
öğesini ExoPlayer.Builder
oluşturucusuna iletmeniz gerekir.
Kotlin
val player = ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, ExtractorsFactory.EMPTY)).build()
Java
ExoPlayer player = new ExoPlayer.Builder( context, new DefaultMediaSourceFactory(context, ExtractorsFactory.EMPTY)) .build();
Özel MediaSource oluşturma
Uygulamanız özel bir MediaSource.Factory
kullanıyorsa ve DefaultMediaSourceFactory
öğesinin kod temizleme işlemiyle kaldırılmasını istiyorsanız MediaSource.Factory
öğenizi doğrudan ExoPlayer.Builder
oluşturucusuna iletmeniz gerekir.
Kotlin
val player = ExoPlayer.Builder(context, customMediaSourceFactory).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context, mediaSourceFactory).build();
Uygulamanız MediaItem
yerine doğrudan MediaSource
kullanıyorsa DefaultMediaSourceFactory
ve DefaultExtractorsFactory
öğelerinin kod küçültme işlemiyle kaldırılabilmesi için MediaSource.Factory.UNSUPPORTED
öğesini ExoPlayer.Builder
oluşturucusuna iletmeniz gerekir.
Kotlin
val player = ExoPlayer.Builder(context, MediaSource.Factory.UNSUPPORTED).build() val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory, customExtractorsFactory) .createMediaSource(MediaItem.fromUri(uri))
Java
ExoPlayer player = new ExoPlayer.Builder(context, MediaSource.Factory.UNSUPPORTED).build(); ProgressiveMediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory, customExtractorsFactory) .createMediaSource(MediaItem.fromUri(uri));