diff --git a/app/build.gradle b/app/build.gradle index 589b1c24b..dde161d00 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,7 +53,7 @@ android { release { minifyEnabled true shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'proguard-rules-media.pro' } } diff --git a/app/proguard-rules-media.pro b/app/proguard-rules-media.pro new file mode 100644 index 000000000..2dc5a56a5 --- /dev/null +++ b/app/proguard-rules-media.pro @@ -0,0 +1,206 @@ +-dontwarn android.content.res.** +-dontwarn org.checkerframework.** +-dontwarn kotlin.annotations.jvm.** +-dontwarn java.lang.ClassValue +-dontwarn java.lang.SafeVarargs +-dontwarn sun.misc.Unsafe +-dontwarn com.google.errorprone.annotations.** +-dontwarn com.google.j2objc.annotations.** +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +-dontwarn org.ietf.jgss.** +-dontwarn org.kxml2.io.** +-dontwarn org.xmlpull.v1.** +-dontwarn org.slf4j.impl.StaticLoggerBinder +-dontwarn org.conscrypt.** +-dontwarn javax.** +-dontwarn okio.** + +-keep class org.xmlpull.** { *; } +-keepclassmembers class org.xmlpull.** { *; } + +-keepclassmembernames class com.google.common.base.Function { *; } + +-keep class com.hierynomus.** { *; } +-keep class net.engio.mbassy.** { *; } + +-keepclasseswithmembernames class * { + native ; +} + +-keep class androidx.media3.decoder.VideoDecoderOutputBuffer { *; } +-keep class androidx.media3.decoder.DecoderInputBuffer { *; } +-keep class androidx.media3.decoder.av1.Dav1dDecoder { *; } +-keep class androidx.media3.decoder.SimpleDecoderOutputBuffer { *; } +-keep class androidx.media3.decoder.mpegh** { *; } + +-keepclassmembers class androidx.media3.datasource.RawResourceDataSource { + public static android.net.Uri buildRawResourceUri(int); +} + +-dontnote androidx.media3.datasource.rtmp.RtmpDataSource +-keepclassmembers class androidx.media3.datasource.rtmp.RtmpDataSource { + (); +} + +-dontnote androidx.media3.decoder.vp9.LibvpxVideoRenderer +-keepclassmembers class androidx.media3.decoder.vp9.LibvpxVideoRenderer { + (long, android.os.Handler, androidx.media3.exoplayer.video.VideoRendererEventListener, int); +} + +-dontnote androidx.media3.decoder.av1.Libdav1dVideoRenderer +-keepclassmembers class androidx.media3.decoder.av1.Libdav1dVideoRenderer { + (long, android.os.Handler, androidx.media3.exoplayer.video.VideoRendererEventListener, int); +} + +-dontnote androidx.media3.decoder.ffmpeg.ExperimentalFfmpegVideoRenderer +-keepclassmembers class androidx.media3.decoder.ffmpeg.ExperimentalFfmpegVideoRenderer { + (long, android.os.Handler, androidx.media3.exoplayer.video.VideoRendererEventListener, int); +} + +-dontnote androidx.media3.decoder.opus.LibopusAudioRenderer +-keepclassmembers class androidx.media3.decoder.opus.LibopusAudioRenderer { + (android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); +} + +-dontnote androidx.media3.decoder.flac.LibflacAudioRenderer +-keepclassmembers class androidx.media3.decoder.flac.LibflacAudioRenderer { + (android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); +} + +-dontnote androidx.media3.decoder.iamf.LibiamfAudioRenderer +-keepclassmembers class androidx.media3.decoder.iamf.LibiamfAudioRenderer { + (android.content.Context, android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); +} + +-dontnote androidx.media3.decoder.ffmpeg.FfmpegAudioRenderer +-keepclassmembers class androidx.media3.decoder.ffmpeg.FfmpegAudioRenderer { + (android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); +} + +-dontnote androidx.media3.decoder.midi.MidiRenderer +-keepclassmembers class androidx.media3.decoder.midi.MidiRenderer { + (android.content.Context, android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); +} + +-dontnote androidx.media3.decoder.mpegh.MpeghAudioRenderer +-keepclassmembers class androidx.media3.decoder.mpegh.MpeghAudioRenderer { + (android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); +} + +-dontnote androidx.media3.exoplayer.dash.offline.DashDownloader$Factory +-keepclassmembers class androidx.media3.exoplayer.dash.offline.DashDownloader$Factory { + (androidx.media3.datasource.cache.CacheDataSource$Factory); +} + +-dontnote androidx.media3.exoplayer.hls.offline.HlsDownloader$Factory +-keepclassmembers class androidx.media3.exoplayer.hls.offline.HlsDownloader$Factory { + (androidx.media3.datasource.cache.CacheDataSource$Factory); +} + +-dontnote androidx.media3.exoplayer.smoothstreaming.offline.SsDownloader$Factory +-keepclassmembers class androidx.media3.exoplayer.smoothstreaming.offline.SsDownloader$Factory { + (androidx.media3.datasource.cache.CacheDataSource$Factory); +} + +-dontnote androidx.media3.exoplayer.dash.DashMediaSource$Factory +-keepclasseswithmembers class androidx.media3.exoplayer.dash.DashMediaSource$Factory { + (androidx.media3.datasource.DataSource$Factory); +} + +-dontnote androidx.media3.exoplayer.hls.HlsMediaSource$Factory +-keepclasseswithmembers class androidx.media3.exoplayer.hls.HlsMediaSource$Factory { + (androidx.media3.datasource.DataSource$Factory); +} + +-dontnote androidx.media3.exoplayer.smoothstreaming.SsMediaSource$Factory +-keepclasseswithmembers class androidx.media3.exoplayer.smoothstreaming.SsMediaSource$Factory { + (androidx.media3.datasource.DataSource$Factory); +} + +-dontnote androidx.media3.exoplayer.rtsp.RtspMediaSource$Factory +-keepclasseswithmembers class androidx.media3.exoplayer.rtsp.RtspMediaSource$Factory { + (); +} + +-if class * implements androidx.media3.exoplayer.ExoPlayer { + public void setVideoEffects(java.util.List); +} +-keepclasseswithmembers class androidx.media3.effect.SingleInputVideoGraph$Factory { + (androidx.media3.common.VideoFrameProcessor$Factory); +} + +-if class * implements androidx.media3.exoplayer.ExoPlayer { + public void setVideoEffects(java.util.List); +} +-keepclasseswithmembers class androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder { + (); + androidx.media3.effect.DefaultVideoFrameProcessor$Factory build(); + androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder setEnableReplayableCache(boolean); +} + +-dontnote androidx.media3.effect.SingleInputVideoGraph$Factory +-dontnote androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder + +-dontnote androidx.media3.decoder.flac.FlacExtractor +-keepclassmembers class androidx.media3.decoder.flac.FlacExtractor { + (int); +} + +-dontnote androidx.media3.decoder.flac.FlacLibrary +-keepclassmembers class androidx.media3.decoder.flac.FlacLibrary { + public static boolean isAvailable(); +} + +-dontnote androidx.media3.decoder.midi.MidiExtractor +-keepclassmembers class androidx.media3.decoder.midi.MidiExtractor { + (); +} + +-dontnote androidx.media3.exoplayer.video.spherical.SphericalGLSurfaceView +-keepclassmembers class androidx.media3.exoplayer.video.spherical.SphericalGLSurfaceView { + (android.content.Context); +} + +-dontnote androidx.media3.exoplayer.video.VideoDecoderGLSurfaceView +-keepclassmembers class androidx.media3.exoplayer.video.VideoDecoderGLSurfaceView { + (android.content.Context); +} + +-keepnames class androidx.media3.exoplayer.ExoPlayer {} +-keepclassmembers class androidx.media3.exoplayer.ExoPlayer { + void setImageOutput(androidx.media3.exoplayer.image.ImageOutput); + void setScrubbingModeEnabled(boolean); + boolean isScrubbingModeEnabled(); +} + +-keepclasseswithmembers class androidx.media3.exoplayer.image.ImageOutput { + void onImageAvailable(long, android.graphics.Bitmap); +} + +-keepnames class androidx.media3.transformer.CompositionPlayer {} +-keepclassmembers class androidx.media3.transformer.CompositionPlayer { + void setScrubbingModeEnabled(boolean); + boolean isScrubbingModeEnabled(); +} + +-dontnote androidx.appcompat.app.AlertDialog.Builder +-keepclassmembers class androidx.appcompat.app.AlertDialog$Builder { + (android.content.Context, int); + public android.content.Context getContext(); + public androidx.appcompat.app.AlertDialog$Builder setTitle(java.lang.CharSequence); + public androidx.appcompat.app.AlertDialog$Builder setView(android.view.View); + public androidx.appcompat.app.AlertDialog$Builder setPositiveButton(int, android.content.DialogInterface$OnClickListener); + public androidx.appcompat.app.AlertDialog$Builder setNegativeButton(int, android.content.DialogInterface$OnClickListener); + public androidx.appcompat.app.AlertDialog create(); +} + +-dontnote android.support.v7.app.AlertDialog.Builder +-keepclassmembers class android.support.v7.app.AlertDialog$Builder { + (android.content.Context, int); + public android.content.Context getContext(); + public android.support.v7.app.AlertDialog$Builder setTitle(java.lang.CharSequence); + public android.support.v7.app.AlertDialog$Builder setView(android.view.View); + public android.support.v7.app.AlertDialog$Builder setPositiveButton(int, android.content.DialogInterface$OnClickListener); + public android.support.v7.app.AlertDialog$Builder setNegativeButton(int, android.content.DialogInterface$OnClickListener); + public android.support.v7.app.AlertDialog create(); +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index e4cb8d4d9..70b1db92a 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -35,16 +35,8 @@ -dontwarn java.awt.** -dontwarn com.sun.net.** -dontwarn org.ietf.jgss.** --keep class org.fourthline.cling.** { *; } -keep class javax.xml.** { *; } - -# EXO --dontwarn org.kxml2.io.** --dontwarn org.xmlpull.v1.** --dontwarn android.content.res.** --dontwarn org.slf4j.impl.StaticLoggerBinder --keep class org.xmlpull.** { *; } --keepclassmembers class org.xmlpull.** { *; } +-keep class org.fourthline.cling.** { *; } # Jianpian -keep class com.p2p.** { *; } @@ -70,10 +62,6 @@ # Sardine -keep class com.thegrizzlylabs.sardineandroid.** { *; } -# Smbj --keep class com.hierynomus.** { *; } --keep class net.engio.mbassy.** { *; } - # TVBus -keep class com.tvbus.engine.** { *; }