diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 31967b4..901f58f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -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 { @@ -14,10 +15,16 @@ android { targetSdk = 35 versionCode = 10 versionName = "1.4.0" + + resourceConfigurations.addAll( + setOf( + "en", + "zh-rCN" + ) + ) } buildFeatures { - buildConfig = true compose = true } @@ -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 } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 438f4b3..33ac4e1 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -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{*;} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d4ad9a4..2e5d2b7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,16 +5,11 @@ + tools:targetApi="35"> diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/Constants.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/Constants.kt index 89f6e73..e623476 100644 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/Constants.kt +++ b/app/src/main/java/com/qhy040404/fxxkmiuiad/Constants.kt @@ -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" - ) -} \ No newline at end of file + // 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 \ No newline at end of file diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/FxxkMIUIAdApp.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/FxxkMIUIAdApp.kt deleted file mode 100644 index 03392b4..0000000 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/FxxkMIUIAdApp.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.qhy040404.fxxkmiuiad - -import android.app.Application - -class FxxkMIUIAdApp : Application() { - override fun onCreate() { - super.onCreate() - app = this - } - - companion object { - lateinit var app: Application - } -} \ No newline at end of file diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/MainComposeActivity.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/MainComposeActivity.kt index 3bfdc77..cf2448e 100644 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/MainComposeActivity.kt +++ b/app/src/main/java/com/qhy040404/fxxkmiuiad/MainComposeActivity.kt @@ -28,7 +28,6 @@ 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 @@ -36,7 +35,7 @@ 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 @@ -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() @@ -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() @@ -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 ) } @@ -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) } @@ -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() } } } @@ -176,7 +173,7 @@ fun EnableBtn() { showToast.value = true }) { - Text(stringResource(id = R.string.enable)) + Text("启用") } LaunchedEffect(showToast.value) { @@ -207,7 +204,7 @@ fun DisableBtn() { showToast.value = true }) { - Text(stringResource(id = R.string.disable)) + Text("禁用") } LaunchedEffect(showToast.value) { @@ -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") } } @@ -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") } } @@ -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) { } diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/compat/PackageManagerCompat.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/compat/PackageManagerCompat.kt deleted file mode 100644 index 8a2408b..0000000 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/compat/PackageManagerCompat.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.qhy040404.fxxkmiuiad.compat - -import android.content.Intent -import android.content.pm.PackageInfo -import android.content.pm.PackageManager -import android.content.pm.ResolveInfo -import com.qhy040404.fxxkmiuiad.utils.OsUtils - -class PackageManagerCompat(private val packageManager: PackageManager) { - fun getPackageInfo(packageName: String, flags: Int): PackageInfo? { - return runCatching { - if (OsUtils.atLeastT()) { - packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong())) - } else { - packageManager.getPackageInfo(packageName, flags) - } - }.getOrNull() - } - - fun queryIntentActivities(intent: Intent, flags: Int): List { - return if (OsUtils.atLeastT()) { - packageManager.queryIntentActivities( - intent, - PackageManager.ResolveInfoFlags.of(flags.toLong()) - ) - } else { - packageManager.queryIntentActivities(intent, flags) - } - } - - companion object { - fun PackageManager.asCompat(): PackageManagerCompat { - return PackageManagerCompat(this) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/OsUtils.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/OsUtils.kt index d0fc306..830bd9d 100644 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/OsUtils.kt +++ b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/OsUtils.kt @@ -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) } } \ No newline at end of file diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/PackageUtils.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/PackageUtils.kt index cfb8324..b5c49ba 100644 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/PackageUtils.kt +++ b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/PackageUtils.kt @@ -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 @@ -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 @@ -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) @@ -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) { diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuStatus.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuStatus.kt deleted file mode 100644 index dc65b9a..0000000 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuStatus.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.qhy040404.fxxkmiuiad.utils - -enum class ShizukuStatus { - Ok, - Outdated, - NotRunning, - NotAuthorized, - NotInstalled -} \ No newline at end of file diff --git a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuUtils.kt b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuUtils.kt index 113d713..5e5dc47 100644 --- a/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuUtils.kt +++ b/app/src/main/java/com/qhy040404/fxxkmiuiad/utils/ShizukuUtils.kt @@ -2,23 +2,24 @@ package com.qhy040404.fxxkmiuiad.utils import android.content.Context import android.content.pm.PackageManager -import com.qhy040404.fxxkmiuiad.Constants -import com.qhy040404.fxxkmiuiad.compat.PackageManagerCompat.Companion.asCompat +import com.qhy040404.fxxkmiuiad.NotAuthorized +import com.qhy040404.fxxkmiuiad.NotInstalled +import com.qhy040404.fxxkmiuiad.NotRunning +import com.qhy040404.fxxkmiuiad.Ok +import com.qhy040404.fxxkmiuiad.Outdated +import com.qhy040404.fxxkmiuiad.SHIZUKU +import com.qhy040404.fxxkmiuiad.utils.PackageUtils.isPackageInstalled import rikka.shizuku.Shizuku import rikka.sui.Sui object ShizukuUtils { - fun checkStatus(context: Context): ShizukuStatus { - if (context.packageManager.asCompat().getPackageInfo( - Constants.SHIZUKU, - 0 - ) == null && !Sui.isSui() - ) return ShizukuStatus.NotInstalled - if (!Shizuku.pingBinder()) return ShizukuStatus.NotRunning - if (Shizuku.checkSelfPermission() != PackageManager.PERMISSION_GRANTED && context.checkSelfPermission("moe.shizuku.manager.permission.API_V23") != PackageManager.PERMISSION_GRANTED) return ShizukuStatus.NotAuthorized - if (Shizuku.getVersion() < 10) return ShizukuStatus.Outdated + fun checkStatus(context: Context): Int { + if (!context.packageManager.isPackageInstalled(SHIZUKU) && !Sui.isSui()) return NotInstalled + if (!Shizuku.pingBinder()) return NotRunning + if (Shizuku.checkSelfPermission() != PackageManager.PERMISSION_GRANTED && context.checkSelfPermission("moe.shizuku.manager.permission.API_V23") != PackageManager.PERMISSION_GRANTED) return NotAuthorized + if (Shizuku.getVersion() < 10) return Outdated - return ShizukuStatus.Ok + return Ok } } diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index c209e78..0000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index b2dfe3d..0000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 4f0f1d6..0000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 62b611d..0000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 948a307..0000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 1b9a695..0000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 28d4b77..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9287f50..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f8adde..40fc866 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,8 +1,3 @@ - FxxkMIUIAd - 启用 - 禁用 - 安装 Shizuku - 跳转到 Shizuku - 申请 Shizuku 授权 + FxxkMIUIAd \ No newline at end of file diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml deleted file mode 100644 index fa0f996..0000000 --- a/app/src/main/res/xml/backup_rules.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml deleted file mode 100644 index 9ee9997..0000000 --- a/app/src/main/res/xml/data_extraction_rules.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 50f74ab..239b2e1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,4 +4,5 @@ plugins { id("com.android.library") version "8.7.2" apply false id("org.jetbrains.kotlin.android") version "2.0.21" apply false id("org.jetbrains.kotlin.plugin.compose") version "2.0.21" apply false + id("com.qhy04.gradle.android.res_opt") version "1.0.3" apply false } diff --git a/gradle.properties b/gradle.properties index e0a6e73..44541a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,5 +3,4 @@ org.gradle.parallel=true org.gradle.caching=true org.gradle.configuration-cache=true android.enableAppCompileTimeRClass=true -android.enableBuildConfigAsBytecode=true android.useAndroidX=true \ No newline at end of file