Skip to content

Commit

Permalink
optimize apk size
Browse files Browse the repository at this point in the history
  • Loading branch information
qhy040404 committed Nov 25, 2024
1 parent 89dc4b8 commit 07e5d5c
Show file tree
Hide file tree
Showing 24 changed files with 88 additions and 181 deletions.
13 changes: 11 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.compose")
id("com.qhy04.gradle.android.res_opt")
}

android {
Expand All @@ -14,10 +15,16 @@ android {
targetSdk = 35
versionCode = 10
versionName = "1.4.0"

resourceConfigurations.addAll(
setOf(
"en",
"zh-rCN"
)
)
}

buildFeatures {
buildConfig = true
compose = true
}

Expand All @@ -30,9 +37,11 @@ android {
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
ndk.abiFilters.add("")
packagingOptions.resources.excludes += setOf(
"DebugProbesKt.bin",
"META-INF/*.version"
"META-INF/*.version",
"**LICENSE**"
)
dependenciesInfo.includeInApk = false
}
Expand Down
10 changes: 2 additions & 8 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,6 @@

-dontwarn java.lang.ClassValue

# ViewBinding
-keep public class * extends androidx.viewbinding.ViewBinding {*;}
-keep,allowoptimization public class * extends androidx.viewbinding.ViewBinding {
public static * inflate(android.view.LayoutInflater);
}

# Custom
-keep public class com.qhy040404.fxxkmiuiad.base.**{*;}
-keep public class com.qhy040404.fxxkmiuiad.utils.**{*;}
#-keep public class com.qhy040404.fxxkmiuiad.utils.OsUtils{*;}
-keep public class com.qhy040404.fxxkmiuiad.utils.PackageUtils{*;}
7 changes: 1 addition & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,11 @@
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

<application
android:name=".FxxkMIUIAdApp"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.FxxkMIUIAd"
tools:targetApi="31">
tools:targetApi="35">
<activity
android:name=".MainComposeActivity"
android:exported="true">
Expand Down
30 changes: 18 additions & 12 deletions app/src/main/java/com/qhy040404/fxxkmiuiad/Constants.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package com.qhy040404.fxxkmiuiad

object Constants {
const val SHIZUKU = "moe.shizuku.privileged.api"
const val SHIZUKU_RELEASE = "https://github.com/RikkaApps/Shizuku/releases/"
// Packages
const val SHIZUKU = "moe.shizuku.privileged.api"
const val SHIZUKU_RELEASE = "https://github.com/RikkaApps/Shizuku/releases/"

const val MIUI_ROM = "com.miui.rom"
val FUCKLIST = listOf(
// CN
"com.miui.hybrid",
"com.miui.systemAdSolution",
const val MIUI_ROM = "com.miui.rom"
val FUCKLIST = listOf(
// CN
"com.miui.hybrid",
"com.miui.systemAdSolution",

// GLOBAL
"com.miui.msa.global"
)
}
// GLOBAL
"com.miui.msa.global"
)

// Shizuku Status
const val Ok = 0
const val Outdated = 1
const val NotRunning = 2
const val NotAuthorized = 3
const val NotInstalled = 4
14 changes: 0 additions & 14 deletions app/src/main/java/com/qhy040404/fxxkmiuiad/FxxkMIUIAdApp.kt

This file was deleted.

59 changes: 28 additions & 31 deletions app/src/main/java/com/qhy040404/fxxkmiuiad/MainComposeActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,14 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.core.net.toUri
import com.qhy040404.fxxkmiuiad.theme.DayNightTheme
import com.qhy040404.fxxkmiuiad.utils.OsUtils
import com.qhy040404.fxxkmiuiad.utils.PackageUtils
import com.qhy040404.fxxkmiuiad.utils.PackageUtils.getApplicationEnableStateAsString
import com.qhy040404.fxxkmiuiad.utils.ShizukuStatus
import com.qhy040404.fxxkmiuiad.utils.PackageUtils.isPackageInstalled
import com.qhy040404.fxxkmiuiad.utils.ShizukuUtils
import rikka.shizuku.Shizuku

Expand All @@ -50,7 +49,7 @@ class MainComposeActivity : ComponentActivity() {
trigger.value = !trigger.value
} else {
runCatching {
PackageUtils.startLaunchAppActivity(this, Constants.SHIZUKU)
PackageUtils.startLaunchAppActivity(this, SHIZUKU)
Toast.makeText(this, "授权失败,跳转到 Shizuku 手动授权", Toast.LENGTH_LONG).show()
}.onFailure {
Toast.makeText(this, "未检测到 Shizuku, 请手动前往 Sui 授权", Toast.LENGTH_LONG).show()
Expand All @@ -62,13 +61,8 @@ class MainComposeActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Shizuku.addRequestPermissionResultListener(callback)
packageList = Constants.FUCKLIST.filter {
try {
packageManager.getPackageInfo(it, 0)
true
} catch (e: PackageManager.NameNotFoundException) {
false
}
packageList = FUCKLIST.filter {
packageManager.isPackageInstalled(it)
}

enableEdgeToEdge()
Expand All @@ -92,21 +86,23 @@ class MainComposeActivity : ComponentActivity() {
return@Scaffold
}

InternalRefresh(trigger.value)
ReloadTrigger(trigger.value)
val shizukuStatus = ShizukuUtils.checkStatus(context)
Column {
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceAround) {
Text(
text = when (shizukuStatus) {
ShizukuStatus.Ok, ShizukuStatus.Outdated, ShizukuStatus.NotAuthorized -> "Shizuku 已运行"
ShizukuStatus.NotRunning, ShizukuStatus.NotInstalled -> "Shizuku 未运行"
Ok, Outdated, NotAuthorized -> "Shizuku 已运行"
NotRunning, NotInstalled -> "Shizuku 未运行"
else -> throw IllegalStateException()
}, textAlign = TextAlign.Center
)

Text(
text = when (shizukuStatus) {
ShizukuStatus.Ok, ShizukuStatus.Outdated -> "Shizuku 已授权"
ShizukuStatus.NotRunning, ShizukuStatus.NotAuthorized, ShizukuStatus.NotInstalled -> "Shizuku 未授权"
Ok, Outdated -> "Shizuku 已授权"
NotRunning, NotAuthorized, NotInstalled -> "Shizuku 未授权"
else -> throw IllegalStateException()
}, textAlign = TextAlign.Center
)
}
Expand All @@ -118,13 +114,14 @@ class MainComposeActivity : ComponentActivity() {
contentAlignment = Alignment.Center
) {
Text(text = when (shizukuStatus) {
ShizukuStatus.Ok -> packageList.associateWith {
Ok -> packageList.associateWith {
packageManager.getApplicationEnableStateAsString(it)
}.entries.joinToString("\n") { (name, state) -> "$name: $state" }

ShizukuStatus.Outdated -> "Shizuku 版本过低,请更新"
ShizukuStatus.NotInstalled -> "Shizuku 未安装"
ShizukuStatus.NotRunning, ShizukuStatus.NotAuthorized -> ""
Outdated -> "Shizuku 版本过低,请更新"
NotInstalled -> "Shizuku 未安装"
NotRunning, NotAuthorized -> ""
else -> throw IllegalStateException()
}, textAlign = TextAlign.Center)
}

Expand All @@ -135,14 +132,14 @@ class MainComposeActivity : ComponentActivity() {
horizontalArrangement = Arrangement.SpaceAround
) {
when (shizukuStatus) {
ShizukuStatus.Ok -> {
Ok -> {
EnableBtn()
DisableBtn()
}

ShizukuStatus.Outdated, ShizukuStatus.NotInstalled -> InstallBtn()
ShizukuStatus.NotRunning -> JumpBtn()
ShizukuStatus.NotAuthorized -> RequestPermissionBtn()
Outdated, NotInstalled -> InstallBtn()
NotRunning -> JumpBtn()
NotAuthorized -> RequestPermissionBtn()
}
}
}
Expand Down Expand Up @@ -176,7 +173,7 @@ fun EnableBtn() {

showToast.value = true
}) {
Text(stringResource(id = R.string.enable))
Text("启用")
}

LaunchedEffect(showToast.value) {
Expand Down Expand Up @@ -207,7 +204,7 @@ fun DisableBtn() {

showToast.value = true
}) {
Text(stringResource(id = R.string.disable))
Text("禁用")
}

LaunchedEffect(showToast.value) {
Expand All @@ -225,11 +222,11 @@ fun InstallBtn() {
Button(onClick = {
runCatching {
context.startActivity(Intent(Intent.ACTION_VIEW).apply {
data = Constants.SHIZUKU_RELEASE.toUri()
data = SHIZUKU_RELEASE.toUri()
})
}
}) {
Text(stringResource(id = R.string.install_shizuku))
Text("安装 Shizuku")
}
}

Expand All @@ -238,10 +235,10 @@ fun JumpBtn() {
val context = LocalContext.current
Button(onClick = {
runCatching {
PackageUtils.startLaunchAppActivity(context, Constants.SHIZUKU)
PackageUtils.startLaunchAppActivity(context, SHIZUKU)
}
}) {
Text(stringResource(id = R.string.open_shizuku))
Text("跳转到 Shizuku")
}
}

Expand All @@ -252,10 +249,10 @@ fun RequestPermissionBtn() {
Shizuku.requestPermission(0)
}
}) {
Text(stringResource(id = R.string.request_shizuku))
Text("申请 Shizuku 授权")
}
}

@Composable
fun InternalRefresh(trigger: Any) {
fun ReloadTrigger(trigger: Any) {
}

This file was deleted.

11 changes: 3 additions & 8 deletions app/src/main/java/com/qhy040404/fxxkmiuiad/utils/OsUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,16 @@ package com.qhy040404.fxxkmiuiad.utils
import android.content.Context
import android.os.Build
import androidx.annotation.ChecksSdkIntAtLeast
import com.qhy040404.fxxkmiuiad.Constants
import com.qhy040404.fxxkmiuiad.compat.PackageManagerCompat.Companion.asCompat
import com.qhy040404.fxxkmiuiad.MIUI_ROM
import com.qhy040404.fxxkmiuiad.utils.PackageUtils.isPackageInstalled

object OsUtils {
@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU)
fun atLeastT(): Boolean {
return Build.VERSION.SDK_INT >= 33
}

@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.VANILLA_ICE_CREAM)
fun atLeastV(): Boolean {
return Build.VERSION.SDK_INT >= 35
}

fun isMiui(context: Context): Boolean {
return context.packageManager.asCompat().getPackageInfo(Constants.MIUI_ROM, 0) != null
return context.packageManager.isPackageInstalled(MIUI_ROM)
}
}
14 changes: 10 additions & 4 deletions app/src/main/java/com/qhy040404/fxxkmiuiad/utils/PackageUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import android.content.Context
import android.content.Intent
import android.content.pm.IPackageManager
import android.content.pm.PackageManager
import com.qhy040404.fxxkmiuiad.BuildConfig
import com.qhy040404.fxxkmiuiad.compat.PackageManagerCompat.Companion.asCompat
import org.lsposed.hiddenapibypass.HiddenApiBypass
import rikka.shizuku.ShizukuBinderWrapper
import rikka.shizuku.SystemServiceHelper
Expand All @@ -30,6 +28,14 @@ object PackageUtils {
}
}

fun PackageManager.isPackageInstalled(pkg: String): Boolean {
return try {
getPackageInfo(pkg, 0) != null
} catch (_: PackageManager.NameNotFoundException) {
false
}
}

fun startLaunchAppActivity(context: Context, packageName: String?) {
if (packageName == null) {
return
Expand All @@ -38,7 +44,7 @@ object PackageUtils {
val intent = Intent(Intent.ACTION_MAIN, null)
.addCategory(Intent.CATEGORY_LAUNCHER)
.setPackage(packageName)
val info = context.packageManager.asCompat().queryIntentActivities(intent, 0)
val info = context.packageManager.queryIntentActivities(intent, 0)
launcherActivity = info.getOrNull(0)?.activityInfo?.name.orEmpty()
val launchIntent = Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
Expand All @@ -50,7 +56,7 @@ object PackageUtils {
fun setApplicationEnabledSetting(packageName: String, state: Int) {
IPackageManager.Stub.asInterface(
ShizukuBinderWrapper(SystemServiceHelper.getSystemService("package"))
).setApplicationEnabledSetting(packageName, state, 0, 0, BuildConfig.APPLICATION_ID)
).setApplicationEnabledSetting(packageName, state, 0, 0, "com.qhy040404.fxxkmiuiad")
}

fun setPackagesSuspendedAsUser(packageName: String, suspended: Boolean) {
Expand Down
Loading

0 comments on commit 07e5d5c

Please sign in to comment.