From 74b79d9faa6e3bd153350b4777e62f840061b5d6 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Wed, 8 Nov 2023 21:58:36 +0800 Subject: [PATCH] Use built-in proguard rules and @Keep annotation `-keepattributes LineNumberTable,SourceFile` is not needed since R8 v8.2 APK size is increased by 1.7% though --- app/build.gradle.kts | 2 +- app/proguard-rules.pro | 32 ------------------- .../ehviewer/client/data/BaseGalleryInfo.kt | 2 ++ .../client/parser/GalleryListParser.kt | 2 ++ .../ehviewer/client/parser/HomeParser.kt | 2 ++ .../ehviewer/client/parser/TorrentParser.kt | 2 ++ .../hippo/ehviewer/ui/scene/SearchBarScene.kt | 3 ++ 7 files changed, 12 insertions(+), 33 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 797f505ae..bdcc0c8dd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -173,7 +173,7 @@ android { release { isMinifyEnabled = true isShrinkResources = true - proguardFiles("proguard-rules.pro") + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") signingConfig = signConfig buildConfigField("String", "BUILD_TIME", "\"$buildTime\"") } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 4c1fd9767..f564895e9 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -1,34 +1,2 @@ --keepclassmembers class * implements android.os.Parcelable { - public static final ** CREATOR; -} - --keepclasseswithmembernames,includedescriptorclasses class * { - native ; -} - -# https://issuetracker.google.com/issues/190382641 --keepclassmembers class kotlin.SafePublicationLazyImpl { - java.lang.Object _value; -} - --keepclassmembers enum androidx.compose.material3.DrawerValue { - values(); -} - --keep class androidx.viewpager.widget.ViewPager$LayoutParams { int position; } - --keep class com.hippo.ehviewer.client.parser.Torrent { *; } --keep class com.hippo.ehviewer.client.parser.GalleryListResult { *; } --keep class com.hippo.ehviewer.client.parser.Limits { *; } --keep class com.hippo.ehviewer.client.data.BaseGalleryInfo { *; } --keep class com.hippo.ehviewer.ui.scene.SearchBarScene { getBinding(); } - -# Ktor logger --dontwarn org.slf4j.impl.StaticLoggerBinder - --keepattributes LineNumberTable,SourceFile --renamesourcefileattribute SourceFile - -repackageclasses --allowaccessmodification -overloadaggressively diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt index 261c2225d..d03e61018 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/BaseGalleryInfo.kt @@ -16,6 +16,7 @@ package com.hippo.ehviewer.client.data import android.os.Parcelable +import androidx.annotation.Keep import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.Ignore @@ -23,6 +24,7 @@ import androidx.room.PrimaryKey import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED import kotlinx.parcelize.Parcelize +@Keep @Parcelize @Entity(tableName = "GALLERIES") data class BaseGalleryInfo( diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt index 311a3e998..6c8aac367 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/GalleryListParser.kt @@ -1,5 +1,6 @@ package com.hippo.ehviewer.client.parser +import androidx.annotation.Keep import com.hippo.ehviewer.EhDB import com.hippo.ehviewer.R import com.hippo.ehviewer.client.data.BaseGalleryInfo @@ -31,6 +32,7 @@ object GalleryListParser { val emptyResult = GalleryListResult(null, null, arrayListOf()) } +@Keep class GalleryListResult( val prev: String?, val next: String?, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/HomeParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/HomeParser.kt index 4447e8b42..819395921 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/HomeParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/HomeParser.kt @@ -1,6 +1,7 @@ package com.hippo.ehviewer.client.parser import android.os.Parcelable +import androidx.annotation.Keep import com.hippo.ehviewer.client.exception.InsufficientFundsException import com.hippo.ehviewer.client.exception.ParseException import java.nio.ByteBuffer @@ -34,6 +35,7 @@ object HomeParser { class Result(val limits: Limits, val funds: Funds) } +@Keep @Parcelize data class Limits(val current: Int, val maximum: Int, val resetCost: Int) : Parcelable diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/TorrentParser.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/TorrentParser.kt index 8e1d7deda..192fd349c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/parser/TorrentParser.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/parser/TorrentParser.kt @@ -1,5 +1,6 @@ package com.hippo.ehviewer.client.parser +import androidx.annotation.Keep import com.hippo.ehviewer.client.exception.ParseException import java.nio.ByteBuffer @@ -9,6 +10,7 @@ object TorrentParser { }.getOrElse { throw ParseException("Can't parse torrent list", it) } } +@Keep class Torrent( val posted: String, val size: String, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/SearchBarScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/SearchBarScene.kt index 4db3bdb93..ef23f977b 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/SearchBarScene.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/SearchBarScene.kt @@ -8,6 +8,7 @@ import android.view.View import android.view.ViewGroup import androidx.activity.OnBackPressedCallback import androidx.annotation.CallSuper +import androidx.annotation.Keep import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.imePadding @@ -56,6 +57,8 @@ import kotlinx.coroutines.flow.toList abstract class SearchBarScene : BaseScene(), ToolBarScene { private var _binding: SceneSearchbarBinding? = null + + @get:Keep private val binding get() = _binding!! private var mSuggestionList by mutableStateOf(emptyList()) private var mSuggestionProvider: SuggestionProvider? = null