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 hedefe ulaşmanıza yardımcı olabilecek bazı basit adımlar özetlenmektedir.
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.10.1")
implementation("androidx.media3:media3-exoplayer-dash:1.10.1")
implementation("androidx.media3:media3-ui:1.10.1")
Modern
implementation "androidx.media3:media3-exoplayer:1.10.1"
implementation "androidx.media3:media3-exoplayer-dash:1.10.1"
implementation "androidx.media3:media3-ui:1.10.1"
Kod ve kullanılmayan kaynakları kaldırmayı etkinleştirme
Uygulamanızın yayın derlemeleri için kod ve kaynak küçültmeyi etkinleştirmeniz gerekir. ExoPlayer, kod daraltmanın 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 daraltma işlemiyle 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 daraltma işlemiyle 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 DefaultMediaSourceFactory oluşturucusuna ExtractorsFactory.EMPTY değerini, ardından ExoPlayer.Builder oluşturucusuna mediaSourceFactory değerini 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 daraltma 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));