diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5cda18337..5068c371a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,6 +32,12 @@ jobs: with: name: build-reports path: ./app/build/reports + + - name: Upload build mapping + uses: actions/upload-artifact@v2 + with: + name: build-mapping + path: ./app/build/outputs/mapping unit-test: runs-on: ubuntu-latest diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ca31a7f4a..d1f43f954 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -113,7 +113,8 @@ android { if (hasSigningProps) { signingConfig = signingConfigs.getByName("twidere") } - isMinifyEnabled = false + isMinifyEnabled = true + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb4348..08f49e699 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,83 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +-keepattributes *Annotation*, InnerClasses +-dontnote kotlinx.serialization.AnnotationsKt # core serialization annotations + +# kotlinx-serialization-json specific. Add this if you have java.lang.NoClassDefFoundError kotlinx.serialization.json.JsonObjectSerializer +-keepclassmembers class kotlinx.serialization.json.** { + *** Companion; +} +-keepclasseswithmembers class kotlinx.serialization.json.** { + kotlinx.serialization.KSerializer serializer(...); +} + +-keep,includedescriptorclasses class com.twidere.services.**$$serializer { *; } +-keepclassmembers class com.twidere.services.** { + *** Companion; +} +-keepclasseswithmembers class com.twidere.services.** { + kotlinx.serialization.KSerializer serializer(...); +} + +-keep,includedescriptorclasses class com.twidere.twiderex.**$$serializer { *; } +-keepclassmembers class com.twidere.twiderex.** { + *** Companion; +} +-keepclasseswithmembers class com.twidere.twiderex.** { + kotlinx.serialization.KSerializer serializer(...); +} + +-keepclassmembers class * extends androidx.datastore.preferences.protobuf.GeneratedMessageLite { + ; +} + + +# ServiceLoader support +-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {} +-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {} + +# Most of volatile fields are updated with AFU and should not be mangled +-keepclassmembers class kotlinx.coroutines.** { + volatile ; +} + +# Same story for the standard library's SafeContinuation that also uses AtomicReferenceFieldUpdater +-keepclassmembers class kotlin.coroutines.SafeContinuation { + volatile ; +} + +# These classes are only required by kotlinx.coroutines.debug.AgentPremain, which is only loaded when +# kotlinx-coroutines-core is used as a Java agent, so these are not needed in contexts where ProGuard is used. +-dontwarn java.lang.instrument.ClassFileTransformer +-dontwarn sun.misc.SignalHandler +-dontwarn java.lang.instrument.Instrumentation +-dontwarn sun.misc.Signal + +# JSR 305 annotations are for embedding nullability information. +-dontwarn javax.annotation.** + +# A resource is loaded with a relative path so the package of this class must be preserved. +-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase + +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* + +# OkHttp platform used only on JVM and when Conscrypt dependency is available. +-dontwarn okhttp3.internal.platform.ConscryptPlatform +-dontwarn org.conscrypt.ConscryptHostnameVerifier + +# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. +-dontwarn org.codehaus.mojo.animal_sniffer.* + +-keeppackagenames org.jsoup.nodes + +-keep class * extends com.google.protobuf.GeneratedMessageLite { *; } + +-keep class com.twidere.services.nitter.model.** + +-keepclassmembers class ** { + @moe.tlaster.hson.annotations.HtmlSerializable public *; +}