diff --git a/README.md b/README.md index e268ea97..45e5629c 100644 --- a/README.md +++ b/README.md @@ -36,5 +36,6 @@ If you plan to fork the project to create a new app of your own, please make the 1. Test coverage for Compose code will be low, due to [known limitations](https://github.com/jacoco/jacoco/issues/1208) in the interaction between Compose and Jacoco. 1. Adding the `espresso-contrib` dependency will cause builds to fail, due to conflicting classes. This is a [known issue](https://github.com/zcash/zcash-android-wallet-sdk/issues/306) with the Zcash Android SDK. 1. Android Studio will warn about the Gradle checksum. This is a [known issue](https://github.com/gradle/gradle/issues/9361) and can be safely ignored. +1. [#96](https://github.com/zcash/secant-android-wallet/issues/96) - Release builds print some R8 warnings which can be safely ignored. 1. During app first launch, the following exception starting with `AndroidKeysetManager: keyset not found, will generate a new one` is printed twice. This exception is not an error, and the code is not being invoked twice. 1. The task `ktlintFormat` fails on Java 16 or greater. As a workaround, the task is run under Java 11. This requires that JDK 11 be installed, even if a newer JDK is also installed. While this is configured to use the Java toolchain API, [toolchain support for Java 11 does not work on Apple Silicon](https://github.com/gradle/gradle/issues/19140). [Azul Zulu](https://www.azul.com/downloads/?os=macos&architecture=arm-64-bit&package=jdk) does offer JDK 11, which must be installed manually to run this task from the command line on Apple Silicon. \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1150b65e..d4bb8108 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -43,11 +43,10 @@ android { buildTypes { getByName("release").apply { isMinifyEnabled = project.property("IS_MINIFY_ENABLED").toString().toBoolean() - proguardFiles.addAll( - listOf( - getDefaultProguardFile("proguard-android-optimize.txt"), - File("proguard-project.txt") - ) + isShrinkResources = project.property("IS_MINIFY_ENABLED").toString().toBoolean() + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-project.txt" ) } } @@ -81,6 +80,32 @@ android { jvmTarget = libs.versions.java.get() allWarningsAsErrors = project.property("IS_TREAT_WARNINGS_AS_ERRORS").toString().toBoolean() } + + packagingOptions { + resources.excludes.addAll( + listOf( + "**/*.kotlin_metadata", + ".readme", + "build-data.properties", + "META-INF/*.kotlin_module", + "META-INF/android.arch**", + "META-INF/androidx**", + "META-INF/com.android**", + "META-INF/com.google.android.material_material.version", + "META-INF/com.google.dagger_dagger.version", + "META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor", + "META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar", + "META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages\$Extension", + "firebase-**.properties", + "kotlin/**", + "play-services-**.properties", + "protolite-well-known-types.properties", + "transport-api.properties", + "transport-backend-cct.properties", + "transport-runtime.properties", + ) + ) + } } dependencies { diff --git a/app/proguard-project.txt b/app/proguard-project.txt index 3fd87cff..ef9fcef2 100644 --- a/app/proguard-project.txt +++ b/app/proguard-project.txt @@ -1,9 +1,17 @@ -# This improves obfuscation. --repackageclasses 'cash.z.ecc.android' +# Commenting this out would improve obfuscation. The wallet is already open source so obfuscation doesn't provide much benefit +# and makes analyzing the release build of the app more difficult. +-dontobfuscate # Ensure that stacktraces are reversible. -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable # Generate the combined proguard configuration for debugging. --printconfiguration build/outputs/proguard-config.txt \ No newline at end of file +-printconfiguration build/outputs/proguard-config.txt + +-dontwarn javax.naming.NamingEnumeration +-dontwarn javax.naming.NamingException +-dontwarn javax.naming.directory.Attribute +-dontwarn javax.naming.directory.Attributes +-dontwarn javax.naming.directory.DirContext +-dontwarn javax.naming.directory.InitialDirContext diff --git a/docs/Setup.md b/docs/Setup.md index 92ce700b..a7a7dbbe 100644 --- a/docs/Setup.md +++ b/docs/Setup.md @@ -10,9 +10,8 @@ To get set up for development, there are several steps that you need to go throu Start by making sure the command line with Gradle works first, because **all the Android Studio run configurations use Gradle internally.** The run configurations are not magic—they map directly to command line invocations with different arguments. -1. Install Java +1. Configure Java 1. Java 16 is currently recommended. Java 11 is the minimum requirement for Android Studio. - 1. To simplify installation, use [Oracle's JDK](https://www.oracle.com/java/technologies/javase-jdk16-downloads.html) installer that will place the Java installation in the right place 1. Install Android Studio and the Android SDK 1. Download the [Android Studio Bumblebee Canary](https://developer.android.com/studio/preview) (we're using the Canary version, due to its improved integration with Jetpack Compose) 1. TODO: Fill in step-by-step instructions for setting up a new environment and installing the Android SDK from within Android Studio