From e7b38b2b1d0e8e5b18e28fa66cd12c2ded5bf3cf Mon Sep 17 00:00:00 2001 From: Nullptr <52071314+Dr-TSNG@users.noreply.github.com> Date: Mon, 4 Jul 2022 11:17:10 +0800 Subject: [PATCH] Proguard --- .github/workflows/main.yml | 2 +- build.gradle.kts | 2 ++ common/proguard-rules.pro | 27 +++++++++++++++++++++++++++ xposed/proguard-rules.pro | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 968e807..5ca6202 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: fail-fast: false matrix: os: [ ubuntu-latest ] - if: ${{ !startsWith(github.event.head_commit.message, 'docs:') }} + if: ${{ !startsWith(github.event.head_commit.message, '[skip ci]') }} steps: - name: Checkout diff --git a/build.gradle.kts b/build.gradle.kts index d000041..9703e1f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,6 +62,8 @@ fun Project.configureBaseExtension() { versionName = appVerName if (localProperties.getProperty("buildWithGitSuffix").toBoolean()) versionNameSuffix = ".r${gitCommitCount}.${gitCommitHash}" + + consumerProguardFiles("proguard-rules.pro") } val signingCfg = signingConfigs.create("config") { diff --git a/common/proguard-rules.pro b/common/proguard-rules.pro index 54b7608..ef72633 100644 --- a/common/proguard-rules.pro +++ b/common/proguard-rules.pro @@ -1,2 +1,29 @@ +# Keep `Companion` object fields of serializable classes. +# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. +-if @kotlinx.serialization.Serializable class ** +-keepclassmembers class <1> { + static <1>$Companion Companion; +} + +# Keep `serializer()` on companion objects (both default and named) of serializable classes. +-if @kotlinx.serialization.Serializable class ** { + static **$* *; +} +-keepclassmembers class <2>$<3> { + kotlinx.serialization.KSerializer serializer(...); +} + +# Keep `INSTANCE.serializer()` of serializable objects. +-if @kotlinx.serialization.Serializable class ** { + public static ** INSTANCE; +} +-keepclassmembers class <1> { + public static <1> INSTANCE; + kotlinx.serialization.KSerializer serializer(...); +} + +# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. +-keepattributes RuntimeVisibleAnnotations,AnnotationDefault + -keep class icu.nullptr.hidemyapplist.common.JsonConfig { *; } -keep class icu.nullptr.hidemyapplist.common.JsonConfig$* { *; } diff --git a/xposed/proguard-rules.pro b/xposed/proguard-rules.pro index 1ddb109..539cdff 100644 --- a/xposed/proguard-rules.pro +++ b/xposed/proguard-rules.pro @@ -1 +1 @@ --keep class icu.nullptr.hidemyapplist.xposed.XposedEntry +-keep class icu.nullptr.hidemyapplist.xposed.XposedEntry { *; }