From 87cd644d003564bde5a1c0ed1fe3b5113b5a1bbf Mon Sep 17 00:00:00 2001 From: tonihei Date: Thu, 26 Nov 2020 16:28:22 +0000 Subject: [PATCH] Add remaining proguard config tests. This ensures we have full test coverage for proguard configs now. The only configs not covered by tests are: - IMA and OkHttp which copy recommended configs from the respective library. I couldn't reproduce failures by removing them (and thus couldn't write a test that ensures they are correct). - Some dontwarn lines that just suppress warnings. In addition, this change fixes a couple of related issues: - Moved AV1 proguard config to correct module. - Removed mentioning of deprecated ExtractorMediaSource from README - Suppressed warning from IMA code that prevent proguarding under strict rules - Fixed wrong proguard exclusion in VP9 module. - Moved FLAC exclusion (DefaultExtractorsFactory) to correct module. - Added AlertDialog suppression for de-jetified code. - Removed unusued dependency from UI module that causes large APK size increase. #exofixit #minor-release PiperOrigin-RevId: 344427532 --- extensions/av1/proguard-rules.txt | 4 ++++ .../android/exoplayer2/ext/av1/Gav1Decoder.java | 5 ++++- extensions/av1/src/main/proguard-rules.pgcfg | 1 + extensions/flac/README.md | 2 +- .../android/exoplayer2/ext/flac/FlacDecoder.java | 12 +++++++----- extensions/ima/proguard-rules.txt | 1 + .../android/exoplayer2/ext/opus/OpusDecoder.java | 6 +++++- extensions/vp9/proguard-rules.txt | 2 +- .../android/exoplayer2/ext/vp9/VpxDecoder.java | 6 +++++- library/core/proguard-rules.txt | 11 ----------- library/extractor/proguard-rules.txt | 6 +++++- library/ui/proguard-rules.txt | 10 ++++++++++ 12 files changed, 44 insertions(+), 22 deletions(-) create mode 120000 extensions/av1/src/main/proguard-rules.pgcfg diff --git a/extensions/av1/proguard-rules.txt b/extensions/av1/proguard-rules.txt index 9d73f7e2b5..c4ef2286f2 100644 --- a/extensions/av1/proguard-rules.txt +++ b/extensions/av1/proguard-rules.txt @@ -5,3 +5,7 @@ native ; } +# Some members of this class are being accessed from native methods. Keep them unobfuscated. +-keep class com.google.android.exoplayer2.video.VideoDecoderOutputBuffer { + *; +} diff --git a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java index ad8c8a682c..08d48e9699 100644 --- a/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java +++ b/extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Gav1Decoder.java @@ -15,10 +15,12 @@ */ package com.google.android.exoplayer2.ext.av1; +import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE; import static java.lang.Runtime.getRuntime; import android.view.Surface; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.SimpleDecoder; @@ -28,7 +30,8 @@ import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import java.nio.ByteBuffer; /** Gav1 decoder. */ -/* package */ final class Gav1Decoder +@VisibleForTesting(otherwise = PACKAGE_PRIVATE) +public final class Gav1Decoder extends SimpleDecoder { // LINT.IfChange diff --git a/extensions/av1/src/main/proguard-rules.pgcfg b/extensions/av1/src/main/proguard-rules.pgcfg new file mode 120000 index 0000000000..499fb08b36 --- /dev/null +++ b/extensions/av1/src/main/proguard-rules.pgcfg @@ -0,0 +1 @@ +../../proguard-rules.txt \ No newline at end of file diff --git a/extensions/flac/README.md b/extensions/flac/README.md index a9d4c3094e..47c74d1148 100644 --- a/extensions/flac/README.md +++ b/extensions/flac/README.md @@ -68,7 +68,7 @@ renderer. ### Using `FlacExtractor` ### -`FlacExtractor` is used via `ExtractorMediaSource`. If you're using +`FlacExtractor` is used via `ProgressiveMediaSource`. If you're using `DefaultExtractorsFactory`, `FlacExtractor` will automatically be used to read `.flac` files. If you're not using `DefaultExtractorsFactory`, return a `FlacExtractor` from your `ExtractorsFactory.createExtractors` implementation. diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java index 84cb081b29..f6c5f6a6a7 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacDecoder.java @@ -15,7 +15,10 @@ */ package com.google.android.exoplayer2.ext.flac; +import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE; + import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; @@ -27,11 +30,10 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.List; -/** - * Flac decoder. - */ -/* package */ final class FlacDecoder extends - SimpleDecoder { +/** Flac decoder. */ +@VisibleForTesting(otherwise = PACKAGE_PRIVATE) +public final class FlacDecoder + extends SimpleDecoder { private final FlacStreamMetadata streamMetadata; private final FlacDecoderJni decoderJni; diff --git a/extensions/ima/proguard-rules.txt b/extensions/ima/proguard-rules.txt index feef3daf7a..a46014de75 100644 --- a/extensions/ima/proguard-rules.txt +++ b/extensions/ima/proguard-rules.txt @@ -1,5 +1,6 @@ # Proguard rules specific to the IMA extension. +-dontwarn com.google.ads.interactivemedia.** -keep class com.google.ads.interactivemedia.** { *; } -keep interface com.google.ads.interactivemedia.** { *; } -keep class com.google.obf.** { *; } diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java index 6b96cc5e49..f6da031a7a 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/OpusDecoder.java @@ -15,7 +15,10 @@ */ package com.google.android.exoplayer2.ext.opus; +import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE; + import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.audio.OpusUtil; import com.google.android.exoplayer2.decoder.CryptoInfo; @@ -30,7 +33,8 @@ import java.nio.ByteBuffer; import java.util.List; /** Opus decoder. */ -/* package */ final class OpusDecoder +@VisibleForTesting(otherwise = PACKAGE_PRIVATE) +public final class OpusDecoder extends SimpleDecoder { private static final int NO_ERROR = 0; diff --git a/extensions/vp9/proguard-rules.txt b/extensions/vp9/proguard-rules.txt index d64773da2f..c3cd063680 100644 --- a/extensions/vp9/proguard-rules.txt +++ b/extensions/vp9/proguard-rules.txt @@ -6,6 +6,6 @@ } # Some members of this class are being accessed from native methods. Keep them unobfuscated. --keep class com.google.android.exoplayer2.ext.vp9.VpxOutputBuffer { +-keep class com.google.android.exoplayer2.video.VideoDecoderOutputBuffer { *; } diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java index ce0873ad40..021ce3a946 100644 --- a/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java +++ b/extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/VpxDecoder.java @@ -15,8 +15,11 @@ */ package com.google.android.exoplayer2.ext.vp9; +import static androidx.annotation.VisibleForTesting.PACKAGE_PRIVATE; + import android.view.Surface; import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.decoder.CryptoInfo; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; @@ -30,7 +33,8 @@ import com.google.android.exoplayer2.video.VideoDecoderOutputBuffer; import java.nio.ByteBuffer; /** Vpx decoder. */ -/* package */ final class VpxDecoder +@VisibleForTesting(otherwise = PACKAGE_PRIVATE) +public final class VpxDecoder extends SimpleDecoder { // These constants should match the codes returned from vpxDecode and vpxSecureDecode functions in diff --git a/library/core/proguard-rules.txt b/library/core/proguard-rules.txt index 67c33679cd..3623e8f926 100644 --- a/library/core/proguard-rules.txt +++ b/library/core/proguard-rules.txt @@ -5,17 +5,6 @@ public static android.net.Uri buildRawResourceUri(int); } -# Methods accessed via reflection in DefaultExtractorsFactory --dontnote com.google.android.exoplayer2.ext.flac.FlacLibrary --keepclassmembers class com.google.android.exoplayer2.ext.flac.FlacLibrary { - public static boolean isAvailable(); -} - -# Some members of this class are being accessed from native methods. Keep them unobfuscated. --keep class com.google.android.exoplayer2.video.VideoDecoderOutputBuffer { - *; -} - # Constructors accessed via reflection in DefaultRenderersFactory -dontnote com.google.android.exoplayer2.ext.vp9.LibvpxVideoRenderer -keepclassmembers class com.google.android.exoplayer2.ext.vp9.LibvpxVideoRenderer { diff --git a/library/extractor/proguard-rules.txt b/library/extractor/proguard-rules.txt index d79f79a4a1..c39f894dfe 100644 --- a/library/extractor/proguard-rules.txt +++ b/library/extractor/proguard-rules.txt @@ -1,10 +1,14 @@ # Proguard rules specific to the extractor module. -# Constructors accessed via reflection in DefaultExtractorsFactory +# Methods accessed via reflection in DefaultExtractorsFactory -dontnote com.google.android.exoplayer2.ext.flac.FlacExtractor -keepclassmembers class com.google.android.exoplayer2.ext.flac.FlacExtractor { (int); } +-dontnote com.google.android.exoplayer2.ext.flac.FlacLibrary +-keepclassmembers class com.google.android.exoplayer2.ext.flac.FlacLibrary { + public static boolean isAvailable(); +} # Don't warn about checkerframework and Kotlin annotations -dontwarn org.checkerframework.** diff --git a/library/ui/proguard-rules.txt b/library/ui/proguard-rules.txt index ad7c139ea8..111a79c916 100644 --- a/library/ui/proguard-rules.txt +++ b/library/ui/proguard-rules.txt @@ -11,6 +11,16 @@ 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(); +} # Don't warn about checkerframework and Kotlin annotations -dontwarn org.checkerframework.**