diff --git a/app/src/main/java/org/lsposed/corepatch/Config.kt b/app/src/main/java/org/lsposed/corepatch/Config.kt index c712fda9..2e7063a6 100644 --- a/app/src/main/java/org/lsposed/corepatch/Config.kt +++ b/app/src/main/java/org/lsposed/corepatch/Config.kt @@ -5,6 +5,7 @@ import org.lsposed.corepatch.XposedHelper.prefs object Config { const val BYPASS_DOWNGRADE = "downgrade" + const val BYPASS_MIN_SDK = "bypass_min_sdk" const val BYPASS_VERIFICATION = "bypass_verification" const val BYPASS_RESOURCE_ARSC_RESTRICTIONS = "bypass_resource_arsc_restrictions" const val BYPASS_DIGEST = "bypass_digest" @@ -17,6 +18,7 @@ object Config { private val allConfig = arrayOf( BYPASS_DOWNGRADE, + BYPASS_MIN_SDK, BYPASS_VERIFICATION, BYPASS_RESOURCE_ARSC_RESTRICTIONS, BYPASS_DIGEST, @@ -36,6 +38,10 @@ object Config { return prefs.getBoolean(BYPASS_DOWNGRADE, false) } + fun isBypassMinSdkEnabled(): Boolean { + return prefs.getBoolean(BYPASS_MIN_SDK, false) + } + fun isBypassVerificationEnabled(): Boolean { return prefs.getBoolean(BYPASS_VERIFICATION, false) } diff --git a/app/src/main/java/org/lsposed/corepatch/MainActivity.kt b/app/src/main/java/org/lsposed/corepatch/MainActivity.kt index ef72db0c..34dd6f47 100644 --- a/app/src/main/java/org/lsposed/corepatch/MainActivity.kt +++ b/app/src/main/java/org/lsposed/corepatch/MainActivity.kt @@ -56,6 +56,9 @@ class MainActivity : Activity() { val bypassDowngrade = SwitchData( getString(R.string.bypass_downgrade), getString(R.string.bypass_downgrade_summary), Config.BYPASS_DOWNGRADE ) + val bypassMinSdk = SwitchData( + getString(R.string.bypass_min_sdk), getString(R.string.bypass_min_sdk_summary), Config.BYPASS_MIN_SDK + ) val bypassVerification = SwitchData( getString(R.string.bypass_verification), getString(R.string.bypass_verification_summary), Config.BYPASS_VERIFICATION ) @@ -95,6 +98,7 @@ class MainActivity : Activity() { val dataSet = arrayListOf( bypassDowngrade, + bypassMinSdk, bypassVerification, bypassResourceArscRestrictions, bypassDigest, diff --git a/app/src/main/java/org/lsposed/corepatch/XposedMain.kt b/app/src/main/java/org/lsposed/corepatch/XposedMain.kt index 3ef04eb3..63ae426a 100644 --- a/app/src/main/java/org/lsposed/corepatch/XposedMain.kt +++ b/app/src/main/java/org/lsposed/corepatch/XposedMain.kt @@ -8,6 +8,7 @@ import org.lsposed.corepatch.hook.ApkSignatureVerifierHook import org.lsposed.corepatch.hook.ApkSigningBlockUtilsHook import org.lsposed.corepatch.hook.ApplicationInfoHook import org.lsposed.corepatch.hook.AssetManagerHook +import org.lsposed.corepatch.hook.FrameworkParsingPackageUtilsHook import org.lsposed.corepatch.hook.InstallPackageHelperHook import org.lsposed.corepatch.hook.KeySetManagerServiceHook import org.lsposed.corepatch.hook.MessageDigestHook @@ -42,6 +43,7 @@ class XposedMain : XposedModule() { ApkSigningBlockUtilsHook, ApplicationInfoHook, AssetManagerHook, + FrameworkParsingPackageUtilsHook, InstallPackageHelperHook, KeySetManagerServiceHook, MessageDigestHook, diff --git a/app/src/main/java/org/lsposed/corepatch/hook/FrameworkParsingPackageUtilsHook.kt b/app/src/main/java/org/lsposed/corepatch/hook/FrameworkParsingPackageUtilsHook.kt new file mode 100644 index 00000000..39298604 --- /dev/null +++ b/app/src/main/java/org/lsposed/corepatch/hook/FrameworkParsingPackageUtilsHook.kt @@ -0,0 +1,42 @@ +package org.lsposed.corepatch.hook + +import android.annotation.SuppressLint +import org.lsposed.corepatch.Config +import org.lsposed.corepatch.XposedHelper.findClassIfExists +import org.lsposed.corepatch.XposedHelper.hookBefore + +object FrameworkParsingPackageUtilsHook : BaseHook() { + override val name = "FrameworkParsingPackageUtilsHook" + + @SuppressLint("PrivateApi") + override fun hook() { + // https://cs.android.com/android/platform/superproject/+/android-9.0.0_r61:frameworks/base/core/java/android/content/pm/PackageParser.java;l=2625 + // public static int computeMinSdkVersion(int minVers, String minCode, int platformSdkVersion, String[] platformSdkCodenames, String[] outError) + // https://cs.android.com/android/platform/superproject/+/android-11.0.0_r1:frameworks/base/core/java/android/content/pm/parsing/ParsingPackageUtils.java;l=1382 + // https://cs.android.com/android/platform/superproject/+/android-13.0.0_r1:frameworks/base/core/java/android/content/pm/parsing/FrameworkParsingPackageUtils.java;l=298 + // public static ParseResult computeMinSdkVersion(int minVers, String minCode, int platformSdkVersion, String[] platformSdkCodenames, ParseInput input) + listOf( + "android.content.pm.PackageParser", + "android.content.pm.parsing.ParsingPackageUtils", + "android.content.pm.parsing.FrameworkParsingPackageUtils", + ).mapNotNull { findClassIfExists(it) } + .flatMap { clazz -> + clazz.declaredMethods.filter { m -> + m.name == "computeMinSdkVersion" && m.parameterTypes.take(3) == + listOf(Int::class.java, String::class.java, Int::class.java) + } + } + .forEach { computeMinSdkVersionMethod -> + hookBefore(computeMinSdkVersionMethod) { callback -> + if (Config.isBypassMinSdkEnabled()) { + val minVers = callback.args[0] as Int + val minCode = callback.args[1] as String? + val platformSdkVersion = callback.args[2] as Int + if (minCode == null && minVers > platformSdkVersion) { + callback.args[0] = platformSdkVersion + } + } + } + } + } +} diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index faa83326..ce221e69 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -4,6 +4,8 @@ Βεβαιωθείτε ότι το πλαίσιο Xposed εκτελείται και ότι αυτή η μονάδα είναι ενεργοποιημένη. Επιτρεπόμενη υποβάθμιση Επιτρέπει την υποβάθμιση εφαρμογών. + Παράκαμψη περιορισμού ελάχιστης έκδοσης SDK + Επιτρέπει την εγκατάσταση APK των οποίων το minSdkVersion είναι μεγαλύτερο από την έκδοση του συστήματος. Απενεργοποίηση επαλήθευσης σύνοψης Επιτρέπει την εγκατάσταση εφαρμογών μετά την τροποποίηση ενός αρχείου στο APK (αγνοεί το σφάλμα μη έγκυρης σύνοψης). Παράκαμψη περιορισμού στοίχισης του resources.arsc diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c9b03d0b..80a1cd82 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -4,6 +4,8 @@ Assurez-vous que le framework Xposed est en cours d’exécution et que ce module est activé. Permettre la rétrogradation Permettre la rétrogradation d\’applications. + Contourner la version minimale du SDK + Autoriser l’installation des APK dont le minSdkVersion est supérieur à la version du système. Désactiver la vérification digest Permettre l\’installation d\’applications après avoir modifier le fichier dans l\’apk (ignorer les erreures invalid digest). Contourner la contrainte d’alignement de resources.arsc diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index fc183265..f1dd69c5 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -4,6 +4,8 @@ Pastikan framework Xposed berjalan dan modul ini diaktifkan. Izinkan turun versi Izinkan turun versi aplikasi. + Lewati pembatasan versi SDK minimum + Izinkan pemasangan APK dengan minSdkVersion yang lebih tinggi dari versi sistem. Matikan verifikasi digest Izinkan pemasangan aplikasi setelah file dalam apk dimodifikasi (abaikan kesalahan digest yang tidak valid). Lewati pembatasan penyelarasan resources.arsc diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 290e378e..86f3e9d5 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -4,6 +4,8 @@ Assicurati che il framework Xposed sia in esecuzione e che questo modulo sia abilitato. Consenti ​​Downgrade Consenti il ​​downgrade delle applicazioni. + Ignora il vincolo di versione minima dell’SDK + Consenti l’installazione di APK con minSdkVersion superiore alla versione del sistema. Disabilita verifica digest Consente l\'installazione di app dopo aver modificato il file nell\'apk (ignora l\'errore digest non valido). Ignora il vincolo di allineamento di resources.arsc diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 387412b9..274f1c3c 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -4,6 +4,8 @@ Xposed フレームワークが実行中で、このモジュールが有効になっていることを確認してください。 ダウングレードを許可する アプリのダウングレードを許可します。 + 最小 SDK バージョンの制限を回避 + minSdkVersion が現在のシステムバージョンより高い APK のインストールを許可します。 ダイジェストの検証を無効化する APK ファイルの変更後にアプリをインストールできるようにします。(無効なダイジェストのエラーを無視します) resources.arsc のアラインメント制限を回避 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 2f22ea8a..0ee8e211 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -4,6 +4,8 @@ Xposed 프레임워크가 실행 중이고 이 모듈이 활성화되어 있는지 확인하세요. 다운그레이드 허용 애플리케이션 다운그레이드를 허용합니다. + 최소 SDK 버전 제한 우회 + minSdkVersion이 현재 시스템 버전보다 높은 APK 설치를 허용합니다. 다이제스트 확인 비활성화 apk의 파일을 수정한 후 앱을 설치할 수 있습니다. (잘못된 다이제스트 오류를 무시). resources.arsc 정렬 제한 우회 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 99af18eb..013db26b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -4,6 +4,8 @@ Verifique se o framework Xposed está em execução e se este módulo está ativado. Permitir downgrade Permite o downgrade de apps + Ignorar restrição de versão mínima do SDK + Permitir a instalação de APKs cujo minSdkVersion seja maior que a versão do sistema. Desativar verificação de integridade Permite instalar apps após modificar um arquivo no APK (ignore o erro de integridade inválido) Ignorar restrição de alinhamento do resources.arsc diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c97b019f..89b78cee 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -4,6 +4,8 @@ Убедитесь, что фреймворк Xposed запущен, а этот модуль включён. Разрешить понижать версию. Разрешить переустановку приложений на прошлые версии. + Обойти ограничение минимальной версии SDK + Разрешить установку APK, у которых minSdkVersion выше версии системы. Отключить проверку дайджеста Позволяет устанавливать приложения после изменения файла в apk (игнорировать недопустимую ошибку дайджеста). Обойти ограничение выравнивания resources.arsc diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index c60e6c9f..5eac1d3b 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -4,6 +4,8 @@ Xposed altyapısının çalıştığından ve bu modülün etkinleştirildiğinden emin olun. Sürüm düşürmeye izin ver Uygulamaların sürüm düşürmesine izin ver. + Minimum SDK sürümü kısıtlamasını atla + minSdkVersion değeri sistem sürümünden yüksek olan APK’ların yüklenmesine izin ver. Özet doğrulamayı devre dışı bırak APK içindeki dosya değiştirildikten sonra uygulama yüklenmesine izin verir (geçersiz özet hatasını yoksayar). resources.arsc hizalama kısıtlamasını atla diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index f830aa8c..4f71e73f 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -4,6 +4,8 @@ 请确认 Xposed 框架正在运行,并且已启用本模块。 允许降级安装应用 允许应用在安装新版本的情况下直接覆盖安装旧版本 + 绕过最低 SDK 版本限制 + 允许安装 minSdkVersion 高于当前系统版本的 APK 禁用软件包管理器签名验证 关闭安装应用时的签名验证,可以安装被篡改的应用 绕过 resources.arsc 对齐限制 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 18d3f2cc..a24aecaf 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -4,6 +4,8 @@ 請確認 Xposed 框架正在執行,並且已啟用本模組。 允許降版安裝應用程式 允許應用程式在安裝新版本的情況下直接覆蓋安裝舊版本 + 略過最低 SDK 版本限制 + 允許安裝 minSdkVersion 高於目前系統版本的 APK 停用套裝安裝程式簽名驗證 停用安裝應用程式時的簽名驗證,可以安裝被修改的應用程式 略過 resources.arsc 對齊限制 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f5e9259a..7054b3e7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,6 +11,8 @@ Bypass shared user verification Disable Package Verification Agent Allow installing an older version over a newer version. + Bypass minimum SDK version check + Allow installing APKs whose minSdkVersion is higher than the system SDK version. Allow installing APKs with invalid or modified signatures. Bypass resources.arsc alignment restriction Allow installing APKs whose resources.arsc is compressed or not 4-byte aligned on Android 11 and later.