From e5018a02d1abbade2995b670078a7b93fd53b883 Mon Sep 17 00:00:00 2001 From: Christian Hagau Date: Tue, 5 Dec 2017 00:00:00 +0000 Subject: [PATCH] Modify ProGuard rules to automatically shrink object files --- OpenKeychain/build.gradle | 21 ++++++++++++++++---- OpenKeychain/proguard-rules-base.pro | 17 ++++++++++++++++ OpenKeychain/proguard-rules-bouncycastle.pro | 3 +++ OpenKeychain/proguard-rules-okhttp.pro | 2 ++ OpenKeychain/proguard-rules-okio.pro | 2 ++ OpenKeychain/proguard-rules-release.pro | 21 -------------------- OpenKeychain/proguard-rules-support.pro | 1 + OpenKeychain/proguard-rules-test.pro | 11 ++++++++++ 8 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 OpenKeychain/proguard-rules-base.pro create mode 100644 OpenKeychain/proguard-rules-bouncycastle.pro create mode 100644 OpenKeychain/proguard-rules-okhttp.pro create mode 100644 OpenKeychain/proguard-rules-okio.pro delete mode 100644 OpenKeychain/proguard-rules-release.pro create mode 100644 OpenKeychain/proguard-rules-support.pro create mode 100644 OpenKeychain/proguard-rules-test.pro diff --git a/OpenKeychain/build.gradle b/OpenKeychain/build.gradle index a45c9c348..a1ac2c526 100644 --- a/OpenKeychain/build.gradle +++ b/OpenKeychain/build.gradle @@ -191,7 +191,13 @@ android { buildTypes { release { minifyEnabled true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules-release.pro' + + proguardFiles getDefaultProguardFile('proguard-android.txt'), + 'proguard-rules-base.pro', + 'proguard-rules-bouncycastle.pro', + 'proguard-rules-okio.pro', + 'proguard-rules-okhttp.pro', + 'proguard-rules-support.pro' // Reference them in the java files with e.g. BuildConfig.ACCOUNT_TYPE. buildConfigField "String", "ACCOUNT_TYPE", "\"org.sufficientlysecure.keychain.account\"" @@ -207,10 +213,17 @@ android { } debug { - // disable ProGuard for faster compile times for debug builds - minifyEnabled false + minifyEnabled true - multiDexEnabled true + proguardFiles = buildTypes.release.proguardFiles + + testProguardFiles getDefaultProguardFile('proguard-android.txt'), + 'proguard-rules-base.pro', + 'proguard-rules-bouncycastle.pro', + 'proguard-rules-okio.pro', + 'proguard-rules-okhttp.pro', + 'proguard-rules-support.pro', + 'proguard-rules-test.pro' applicationIdSuffix ".debug" diff --git a/OpenKeychain/proguard-rules-base.pro b/OpenKeychain/proguard-rules-base.pro new file mode 100644 index 000000000..72cf893ae --- /dev/null +++ b/OpenKeychain/proguard-rules-base.pro @@ -0,0 +1,17 @@ +# Documentation for ProGuard: +# http://developer.android.com/guide/developing/tools/proguard.html +# http://proguard.sourceforge.net/ + +-dontoptimize +-dontpreverify + +-dontnote ** + +-keepattributes ** + +-keep class org.sufficientlysecure.keychain.** { *; } + +# * Obfuscate android.support.v7.view.menu.** to fix Samsung Android 4.2 bug +# https://code.google.com/p/android/issues/detail?id=78377 +# * Disable obfuscation for all other classes +-keepnames class !android.support.v7.view.menu.**, ** { *; } diff --git a/OpenKeychain/proguard-rules-bouncycastle.pro b/OpenKeychain/proguard-rules-bouncycastle.pro new file mode 100644 index 000000000..e050ded81 --- /dev/null +++ b/OpenKeychain/proguard-rules-bouncycastle.pro @@ -0,0 +1,3 @@ +-keep class org.bouncycastle.jcajce.provider.** { *; } + +-dontwarn javax.naming.** diff --git a/OpenKeychain/proguard-rules-okhttp.pro b/OpenKeychain/proguard-rules-okhttp.pro new file mode 100644 index 000000000..c44a0142d --- /dev/null +++ b/OpenKeychain/proguard-rules-okhttp.pro @@ -0,0 +1,2 @@ +-dontwarn javax.annotation.Nullable +-dontwarn javax.annotation.ParametersAreNonnullByDefault diff --git a/OpenKeychain/proguard-rules-okio.pro b/OpenKeychain/proguard-rules-okio.pro new file mode 100644 index 000000000..0050a4291 --- /dev/null +++ b/OpenKeychain/proguard-rules-okio.pro @@ -0,0 +1,2 @@ +-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement +-dontwarn okio.** diff --git a/OpenKeychain/proguard-rules-release.pro b/OpenKeychain/proguard-rules-release.pro deleted file mode 100644 index 68905babf..000000000 --- a/OpenKeychain/proguard-rules-release.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Documentation for ProGuard: -# http://developer.android.com/guide/developing/tools/proguard.html -# http://proguard.sourceforge.net/ - -#-dontshrink # shrinking enabled, see below -#-dontobfuscate # obfuscation enabled for one class (see below) --dontoptimize --dontpreverify --keepattributes ** --dontwarn ** --dontnote ** - -# Rules are defined as negation filters! -# (! = negation filter, ** = all subpackages) -# Keep everything (** {*;}) except... - -# * Obfuscate android.support.v7.view.menu.** to fix Samsung Android 4.2 bug -# https://code.google.com/p/android/issues/detail?id=78377 -# * Remove unneeded Bouncy Castle packages to be under 64K limit -# http://developer.android.com/tools/building/multidex.html --keep class !android.support.v7.view.menu.**,!org.bouncycastle.crypto.tls.**,!org.bouncycastle.pqc.**,!org.bouncycastle.x509.**,!org.bouncycastle.jcajce.provider.asymmetric.dstu.**,!org.bouncycastle.jcajce.provider.asymmetric.ecgost.**,!org.bouncycastle.jcajce.provider.asymmetric.gost.**,!org.bouncycastle.jcajce.provider.asymmetric.DSTU4145,!org.bouncycastle.jcajce.provider.asymmetric.ECGOST,!org.bouncycastle.jcajce.provider.asymmetric.GOST,!org.bouncycastle.asn1.cmp.**,!org.bouncycastle.asn1.crmf.**,!org.bouncycastle.asn1.dvcs.**,!org.bouncycastle.asn1.smime.**,!org.bouncycastle.asn1.tsp.**,** {*;} diff --git a/OpenKeychain/proguard-rules-support.pro b/OpenKeychain/proguard-rules-support.pro new file mode 100644 index 000000000..4a08510d6 --- /dev/null +++ b/OpenKeychain/proguard-rules-support.pro @@ -0,0 +1 @@ +-keep class android.support.v7.widget.SearchView { *; } diff --git a/OpenKeychain/proguard-rules-test.pro b/OpenKeychain/proguard-rules-test.pro new file mode 100644 index 000000000..ea635c170 --- /dev/null +++ b/OpenKeychain/proguard-rules-test.pro @@ -0,0 +1,11 @@ +-dontwarn android.test.** +-dontwarn com.android.support.test.** +-dontwarn android.databinding.** +-dontwarn javax.annotation.** + +-dontwarn org.hamcrest.** +-dontwarn org.junit.** + +-dontwarn com.squareup.** + +-dontobfuscate