APK boyutunu küçültmek, iyi bir Android uygulaması geliştirmenin önemli bir parçasıdır. Bu durum özellikle gelişmekte olan pazarları hedeflerken ve Android Anında Uygulama geliştirirken geçerlidir. Bu gibi durumlarda, APK'ya dahil edilen ExoPlayer kitaplığının boyutunu küçültmek isteyebilirsiniz. Bu sayfada, bu hedefe ulaşmanıza yardımcı olabilecek bazı basit adımlar özetlenmiştir.
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, aşağıdaki kod, yalnızca DASH içeriği oynatan bir uygulama için gerekli olabileceği gibi ExoPlayer, DASH ve kullanıcı arayüzü kitaplık modüllerine bağımlılık ekler:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
Kod ve kaynak küçültmeyi etkinleştirme
Uygulamanızın sürüm derlemeleri için kod ve kaynak küçültmeyi etkinleştirmeniz gerekir. ExoPlayer, kullanılmayan işlevleri etkili bir şekilde kaldırmak için kod küçültme işlemine olanak tanıyacak şekilde yapılandırılmıştır. Örneğin, DASH içeriği oynatan bir uygulamada kod küçültme özelliği 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 ihtiyaç duyduğu oluşturma araçlarını belirtme
Oynatıcının oluşturma araçları varsayılan olarak DefaultRenderersFactory
kullanılarak oluşturulur. DefaultRenderersFactory
, ExoPlayer kitaplığında sağlanan tüm Renderer
uygulamalarından yararlanır. Bu nedenle, kod küçültme işlemiyle bunların hiçbiri kaldırılmaz. Uygulamanızın yalnızca bir alt küme oluşturma aracına ihtiyacı olduğunu biliyorsanız bunun yerine kendi RenderersFactory
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, kod küçültme işlemiyle diğer Renderer
uygulamalarının kaldırılması sağlanır. Bu örnek videoda metin ve meta veri oluşturma araçları kaldırılmıştır (yani altyazılar veya yayın içi meta veriler (ör. ICY) oynatıcı tarafından işlenmez veya yayınlanmaz).
Uygulamanızın ihtiyaç duyduğu ayıklayıcıları belirtme
Oynatıcı, varsayılan olarak DefaultExtractorsFactory
kullanarak aşamalı medyayı oynatmak için Extractor
örneği oluşturur. DefaultExtractorsFactory
, ExoPlayer kitaplığında sağlanan tüm Extractor
uygulamalarından yararlanır. Bu nedenle, kod küçültme işlemiyle bunların hiçbiri kaldırılmaz. Uygulamanızın yalnızca az sayıda kapsayıcı biçimi oynatması gerektiğini veya hiç aşamalı medya oynatmadığını biliyorsanız bunun yerine kendi ExtractorsFactory
öğenizi belirtebilirsiniz. Örneğin, yalnızca mp4 dosyalarını oynatması gereken bir uygulama aşağıdaki 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, kod küçültme işlemiyle diğer Extractor
uygulamalarının kaldırılması sağlanır. Bu da boyutta önemli bir düşüşe neden olabilir.
Uygulamanız hiç aşamalı içerik oynatmı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 örneği oluşturma
Uygulamanız özel bir MediaSource.Factory
kullanıyorsa ve DefaultMediaSourceFactory
'nin kod ayıklamayla kaldırılmasını istiyorsanız MediaSource.Factory
'nizi doğrudan ExoPlayer.Builder
kurucusuna 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
'nin kod küçültme işlemiyle kaldırılabilmesi için MediaSource.Factory.UNSUPPORTED
değerini 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));