[#302] Add ProGuard consumer rules

This allows consumers of the SDK to use ProGuard without breaking the SDK
This commit is contained in:
Carter Jernigan 2021-11-22 10:14:21 -05:00 committed by GitHub
parent 7236fd718d
commit 4994718549
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 52 additions and 52 deletions

View File

@ -1,6 +1,11 @@
Change Log
==========
Next version
------------------------------------
- Fix: Added ProGuard rules so that SDK clients can use R8 to shrink their apps
- Updated dependencies
Version 1.3.0-beta19 *(2021-11-22)*
------------------------------------
- New: Updated checkpoints for Mainnet and Testnet

View File

@ -36,7 +36,7 @@ android {
buildTypes {
getByName("release").apply {
isMinifyEnabled = project.property("IS_MINIFY_ENABLED").toString().toBoolean()
isMinifyEnabled = project.property("IS_MINIFY_APP_ENABLED").toString().toBoolean()
proguardFiles.addAll(
listOf(
getDefaultProguardFile("proguard-android-optimize.txt"),

View File

@ -0,0 +1,3 @@
# Allow for debuggable stacktraces
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile

View File

@ -1,21 +0,0 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -41,7 +41,10 @@ IS_COVERAGE_ENABLED=false
IS_USE_TEST_ORCHESTRATOR=false
# Optionally configure minification
IS_MINIFY_ENABLED=false
# For now, don't minify the SDK but do minify the app. Minifying the app helps us test
# the proguard-consumer rules in the SDK.
IS_MINIFY_SDK_ENABLED=false
IS_MINIFY_APP_ENABLED=true
# Set keystore details to enable build signing. Typically these
# are overridden via ~/.gradle/gradle.properties to allow secure injection.

View File

@ -38,6 +38,8 @@ android {
argument("room.schemaLocation", "$projectDir/schemas")
}
}
consumerProguardFiles("proguard-consumer.txt")
}
buildTypes {
@ -45,20 +47,14 @@ android {
// test builds exceed the dex limit because they pull in large test libraries
multiDexEnabled = true
isMinifyEnabled = false
proguardFiles.addAll(
listOf(
getDefaultProguardFile("proguard-android-optimize.txt"),
File("proguard-rules.pro")
)
)
}
getByName("release").apply {
multiDexEnabled = false
isMinifyEnabled = project.property("IS_MINIFY_ENABLED").toString().toBoolean()
isMinifyEnabled = project.property("IS_MINIFY_SDK_ENABLED").toString().toBoolean()
proguardFiles.addAll(
listOf(
getDefaultProguardFile("proguard-android-optimize.txt"),
File("proguard-rules.pro")
File("proguard-project.txt")
)
)
}

View File

@ -0,0 +1,11 @@
-keepclasseswithmembernames,includedescriptorclasses class * {
native <methods>;
}
# https://github.com/grpc/grpc-java/blob/master/android/proguard-rules.txt
-keepclassmembers class io.grpc.okhttp.OkHttpChannelBuilder {
io.grpc.okhttp.OkHttpChannelBuilder forTarget(java.lang.String);
io.grpc.okhttp.OkHttpChannelBuilder scheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
io.grpc.okhttp.OkHttpChannelBuilder sslSocketFactory(javax.net.ssl.SSLSocketFactory);
io.grpc.okhttp.OkHttpChannelBuilder transportExecutor(java.util.concurrent.Executor);
}

View File

@ -0,0 +1,24 @@
# This improves obfuscation and moves non-public classes to their own namespace.
-repackageclasses 'cash.z.ecc.android.sdk.internal'
# This makes it easier to autocomplete methods in an IDE using this obfuscated library.
-keepparameternames
# The ProGuard manual recommends keeping these attributes for libraries.
-keepattributes EnclosingMethod,InnerClasses,Signature,Exceptions,*Annotation*
# Ensure that stacktraces are reversible.
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
# Keep the public interface of the library.
# Some of these will need to be tuned in the future, as they shouldn't ALL be considered part of the
# public API. Much of this will be improved by further repackaging of the classes.
-keep public class cash.z.ecc.android.sdk.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.block.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.db.entity.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.exception.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.ext.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.jni.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.tool.* { public protected *; }
-keep public class cash.z.ecc.android.sdk.type.* { public protected *; }

View File

@ -1,21 +0,0 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile