diff --git a/.gitignore b/.gitignore index 17db4a8b5..5ccee93d8 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,3 @@ out # Imported libs extern/*/libs/ extern/*/*/libs/ - -# We don't use proguard anywhere -proguard-project.txt diff --git a/F-Droid/build.gradle b/F-Droid/build.gradle index 870157a37..094e903a7 100644 --- a/F-Droid/build.gradle +++ b/F-Droid/build.gradle @@ -153,8 +153,9 @@ android { buildTypes { all { - minifyEnabled false - shrinkResources false // requires minify (proguard) + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { debuggable true diff --git a/F-Droid/proguard-rules.pro b/F-Droid/proguard-rules.pro new file mode 100644 index 000000000..b11202c17 --- /dev/null +++ b/F-Droid/proguard-rules.pro @@ -0,0 +1,39 @@ +-dontobfuscate +-dontoptimize +-keepattributes SourceFile,LineNumberTable,Exceptions +-keep class org.fdroid.fdroid.** {*;} +-dontskipnonpubliclibraryclassmembers +-dontwarn android.test.** +-dontwarn com.android.support.test.** + +-dontwarn javax.naming.** +-dontnote android.support.** +-dontnote **ILicensingService + +# The nature of the Java security suite implementations are that they use a +# lot of reflection to instantiate classes. The end result is that proguard +# excludes classes which may be required, depending on the security algorithms +# required by certain certificates. +# Reference: https://gitlab.com/fdroid/fdroidclient/issues/88 +-keep class org.spongycastle.crypto.* {*;} +-keep class org.spongycastle.crypto.digests.* {*;} +-keep class org.spongycastle.crypto.encodings.* {*;} +-keep class org.spongycastle.crypto.engines.* {*;} +-keep class org.spongycastle.crypto.macs.* {*;} +-keep class org.spongycastle.crypto.modes.* {*;} +-keep class org.spongycastle.crypto.paddings.* {*;} +-keep class org.spongycastle.crypto.params.* {*;} +-keep class org.spongycastle.crypto.prng.* {*;} +-keep class org.spongycastle.crypto.signers.* {*;} + +-keep class org.spongycastle.jcajce.provider.digest.** {*;} +-keep class org.spongycastle.jcajce.provider.keystore.** {*;} +-keep class org.spongycastle.jcajce.provider.symmetric.** {*;} +-keep class org.spongycastle.jcajce.spec.* {*;} +-keep class org.spongycastle.jce.** {*;} + +# This keeps class members used for SystemInstaller IPC. +# Reference: https://gitlab.com/fdroid/fdroidclient/issues/79 +-keepclassmembers class * implements android.os.IInterface { + public *; +}