diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 166c55d5e..119452b38 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -232,16 +232,6 @@ public static ** valueOf(java.lang.String); } - -# Keep all of Cronet API as it's used by the Cronet module. --keep public class org.chromium.net.* { - !private *; - *; -} --keep class org.chromium.** {*;} --keep class com.google.android.gms.net.PlayServicesCronetProvider{*;} --keep class com.google.android.gms.net.GmsCoreCronetProvider{*;} - ## 保证该私有变量不被混淆 -keepclassmembers class com.google.android.exoplayer2.upstream.cache.CacheDataSource$Factory { #noinspection ShrinkerUnresolvedReference @@ -250,3 +240,153 @@ ## 对外提供api -keep class io.legado.app.api.ReturnData{*;} + + +#-------------------Cronet------------------------------------ +# Contains flags that can be safely shared with Cronet, and thus would be +# appropriate for third-party apps to include. + +# Keep all annotation related attributes that can affect runtime +-keepattributes RuntimeVisible*Annotations +-keepattributes AnnotationDefault + +# Keep the annotations, because if we don't, the ProGuard rules that use them +# will not be respected. These classes then show up in our final dex, which we +# do not want - see crbug.com/628226. +-keep @interface org.chromium.base.annotations.AccessedByNative +-keep @interface org.chromium.base.annotations.CalledByNative +-keep @interface org.chromium.base.annotations.CalledByNativeUnchecked +-keep @interface org.chromium.base.annotations.DoNotInline +-keep @interface org.chromium.base.annotations.UsedByReflection +-keep @interface org.chromium.base.annotations.IdentifierNameString + +# Android support library annotations will get converted to androidx ones +# which we want to keep. +-keep @interface androidx.annotation.Keep +-keep @androidx.annotation.Keep class * +-keepclasseswithmembers,allowaccessmodification class * { + @androidx.annotation.Keep ; +} +-keepclasseswithmembers,allowaccessmodification class * { + @androidx.annotation.Keep ; +} + +# Keeps for class level annotations. +-keep,allowaccessmodification @org.chromium.base.annotations.UsedByReflection class ** {} + +# Keeps for method level annotations. +-keepclasseswithmembers,allowaccessmodification class ** { + @org.chromium.base.annotations.AccessedByNative ; +} +-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** { + @org.chromium.base.annotations.CalledByNative ; +} +-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class ** { + @org.chromium.base.annotations.CalledByNativeUnchecked ; +} +-keepclasseswithmembers,allowaccessmodification class ** { + @org.chromium.base.annotations.UsedByReflection ; +} +-keepclasseswithmembers,allowaccessmodification class ** { + @org.chromium.base.annotations.UsedByReflection ; +} +# Even unused methods kept due to explicit jni registration: +# https://crbug.com/688465. +-keepclasseswithmembers,includedescriptorclasses,allowaccessmodification class !org.chromium.base.library_loader.**,** { + native ; +} +-keepclasseswithmembernames,includedescriptorclasses,allowaccessmodification class org.chromium.base.library_loader.** { + native ; +} + +# Use assumevalues block instead of assumenosideeffects block because Google3 proguard cannot parse +# assumenosideeffects blocks which overwrite return value. +-assumevalues class org.chromium.base.Log { + static boolean isDebug() return false; +} + +# Never inline classes, methods, or fields with this annotation, but allow +# shrinking and obfuscation. +# Relevant to fields when they are needed to store strong references to objects +# that are held as weak references by native code. +-if @org.chromium.base.annotations.DoNotInline class * { + *** *(...); +} +-keep,allowobfuscation,allowaccessmodification class <1> { + *** <2>(...); +} +-keepclassmembers,allowobfuscation,allowaccessmodification class * { + @org.chromium.base.annotations.DoNotInline ; +} +-keepclassmembers,allowobfuscation,allowaccessmodification class * { + @org.chromium.base.annotations.DoNotInline ; +} + +# Never merge classes horizontally or vertically with this annotation. +# Relevant to classes being used as a key in maps or sets. +-keep,allowaccessmodification,allowobfuscation,allowshrinking @org.chromium.base.annotations.DoNotClassMerge class * + +# Keep all CREATOR fields within Parcelable that are kept. +-keepclassmembers class org.chromium.** implements android.os.Parcelable { + public static *** CREATOR; +} + +# Don't obfuscate Parcelables as they might be marshalled outside Chrome. +# If we annotated all Parcelables that get put into Bundles other than +# for saveInstanceState (e.g. PendingIntents), then we could actually keep the +# names of just those ones. For now, we'll just keep them all. +-keepnames,allowaccessmodification class org.chromium.** implements android.os.Parcelable {} + +# Keep all enum values and valueOf methods. See +# http://proguard.sourceforge.net/index.html#manual/examples.html +# for the reason for this. Also, see http://crbug.com/248037. +-keepclassmembers enum org.chromium.** { + public static **[] values(); +} + +# Mark members annotated with IdentifierNameString as identifier name strings +-identifiernamestring class * { + @org.chromium.base.annotations.IdentifierNameString *; +} + +# -identifiernamestring doesn't keep the module impl around, we have to +# explicitly keep it. +-if @org.chromium.components.module_installer.builder.ModuleInterface interface * +-keep,allowobfuscation,allowaccessmodification class * extends <1> { + (); +} +# Proguard config for apps that depend on cronet_impl_native_java.jar. + +# This constructor is called using the reflection from Cronet API (cronet_api.jar). +-keep class * extends org.chromium.net.CronetProvider{ + public (android.content.Context); +} + +# Suppress unnecessary warnings. +-dontnote org.chromium.net.ProxyChangeListener$ProxyReceiver +-dontnote org.chromium.net.AndroidKeyStore +# Needs 'void setTextAppearance(int)' (API level 23). +-dontwarn org.chromium.base.ApiCompatibilityUtils +# Needs 'boolean onSearchRequested(android.view.SearchEvent)' (API level 23). +-dontwarn org.chromium.base.WindowCallbackWrapper + +# Generated for chrome apk and not included into cronet. +-dontwarn org.chromium.base.multidex.ChromiumMultiDexInstaller +-dontwarn org.chromium.base.library_loader.LibraryLoader +-dontwarn org.chromium.base.SysUtils +-dontwarn org.chromium.build.NativeLibraries + +# Objects of this type are passed around by native code, but the class +# is never used directly by native code. Since the class is not loaded, it does +# not need to be preserved as an entry point. +-dontnote org.chromium.net.UrlRequest$ResponseHeadersMap +# https://android.googlesource.com/platform/sdk/+/marshmallow-mr1-release/files/proguard-android.txt#54 +-dontwarn android.support.** + +# This class should be explicitly kept to avoid failure if +# class/merging/horizontal proguard optimization is enabled. +-keep class org.chromium.base.CollectionUtil +#-------------------Cronet------------------------------------ + + +