APK boyutunu en aza indirmek, iyi bir Android uygulaması geliştirmenin önemli bir yönüdür. Bu, özellikle gelişmekte olan pazarlar hedeflenirken ve Android Hazır Uygulama geliştirirken geçerlidir. Bu gibi durumlarda, APK'ya dahil olan ExoPlayer kitaplığının boyutunu en aza indirmek istenebilir. Bu sayfada, bunu başarmanı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üllerine bağlıdır. Örneğin, aşağıdakiler yalnızca DASH içeriğini oynatan bir uygulama için gerekli olabileceği gibi ExoPlayer, DASH ve UI kitaplığı modüllerine bağımlılıklar ekler:
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")
Modern
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"
Kod ve kaynak daraltmayı etkinleştir
Uygulamanızın sürüm derlemeleri için kod ve kaynak daraltmayı etkinleştirmeniz gerekir. ExoPlayer, kullanılmayan işlevleri etkili bir şekilde kaldırmak için kodun küçültülmesini sağlayacak şekilde yapılandırılmıştır. Örneğin, DASH içeriği oynatan bir uygulama için ExoPlayer'ın APK boyutuna katkısı, kod daraltma özelliğini etkinleştirerek yaklaşık% 40 oranında azaltılabilir.
Kod ve kaynak daraltmayı nasıl etkinleştireceğinizi öğrenmek için Uygulamanızı küçültme, gizleme ve optimize etme bölümünü okuyun.
Uygulamanızın hangi oluşturuculara ihtiyacı olduğunu belirtin
Oynatıcının oluşturucuları varsayılan olarak DefaultRenderersFactory
kullanılarak oluşturulur. DefaultRenderersFactory
, ExoPlayer kitaplığında sağlanan tüm Renderer
uygulamalarına bağlıdır ve sonuç olarak bunların hiçbiri kod daraltma işlemiyle kaldırılmaz. Uygulamanızın yalnızca bir oluşturucu alt kümesine ihtiyacı olduğunu biliyorsanız bunun yerine kendi RenderersFactory
öğenizi belirtebilirsiniz. Örneğin, yalnızca ses çalan bir uygulama, ExoPlayer
örneklerini örneklerken 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, diğer Renderer
uygulamalarının kod daraltma işlemiyle kaldırılmasına olanak tanır. Bu örnek videoda, metin ve meta veri oluşturucuları kaldırılı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 hangi ayıklayıcılara ihtiyaç duyduğunu belirtin
Oynatıcı, DefaultExtractorsFactory
kullanarak progresif medya oynatmak için varsayılan olarak Extractor
örnek oluşturur. DefaultExtractorsFactory
, ExoPlayer kitaplığında sağlanan tüm Extractor
uygulamalarına bağlıdır ve sonuç olarak bunların hiçbiri kod daraltma işlemiyle kaldırılmaz. Uygulamanızın yalnızca az sayıda kapsayıcı biçimini oynatması gerektiğini veya progresif medya oynatmadığını biliyorsanız bunun yerine kendi ExtractorsFactory
öğenizi belirtebilirsiniz. Örneğin, sadece mp4 dosyalarını çalması gereken bir uygulama şunun 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, kod küçültme ile diğer Extractor
uygulamalarının kaldırılmasına olanak tanır ve bu da boyutta önemli bir küçülmeye neden olabilir.
Uygulamanızda progresif içerik oynatılmıyorsa ExtractorsFactory.EMPTY
öğesini DefaultMediaSourceFactory
oluşturucuya iletmeniz, ardından bu mediaSourceFactory
öğesini ExoPlayer.Builder
oluşturucuya 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
Uygulamanız özel bir MediaSource.Factory
kullanıyorsa ve DefaultMediaSourceFactory
öğesinin kod kaldırma işlemiyle kaldırılmasını istiyorsanız MediaSource.Factory
öğenizi doğrudan ExoPlayer.Builder
oluşturucuya 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 ExoPlayer.Builder
oluşturucuya MediaSource.Factory.UNSUPPORTED
öğesini iletmeniz gerekir. Böylece DefaultMediaSourceFactory
ve DefaultExtractorsFactory
öğelerinin kod küçültme işlemiyle soyulabilmesini sağlarsınız.
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));