From 4cef6ca1cde76d7552197968dc41ce5cd72a6ce2 Mon Sep 17 00:00:00 2001 From: hd Date: Mon, 23 Jun 2025 03:34:36 +0800 Subject: [PATCH] fix: create XmlBlock on android 16 --- .../hikage/bypass/XmlBlockBypass.kt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/hikage-core/src/main/java/com/highcapable/hikage/bypass/XmlBlockBypass.kt b/hikage-core/src/main/java/com/highcapable/hikage/bypass/XmlBlockBypass.kt index 008adc3..793fd27 100644 --- a/hikage-core/src/main/java/com/highcapable/hikage/bypass/XmlBlockBypass.kt +++ b/hikage-core/src/main/java/com/highcapable/hikage/bypass/XmlBlockBypass.kt @@ -120,7 +120,7 @@ internal object XmlBlockBypass { // Context may be loaded from the preview and other non-Android platforms, ignoring this. if (context.javaClass.name.endsWith("BridgeContext")) return init(context.applicationContext.applicationInfo) - } + } /** * Initialize. @@ -148,9 +148,18 @@ internal object XmlBlockBypass { ).apply { isAccessible = true }.invoke(null, sourceDir, false, false, false) else -> error("Unsupported Android version.") } as? Long? ?: error("Failed to create ApkAssets.") - blockParser = HiddenApiBypass.getDeclaredConstructor(XmlBlockClass, AssetManagerClass, LongType) - .apply { isAccessible = true } - .newInstance(null, xmlBlock) as? AutoCloseable? ?: error("Failed to create XmlBlock\$Parser.") + blockParser = when { + SystemVersion.isHighOrEqualsTo(36) -> + // XmlBlock(@Nullable AssetManager assets, long xmlBlock, boolean usesFeatureFlags) + HiddenApiBypass.getDeclaredConstructor(XmlBlockClass, AssetManagerClass, LongType, BooleanType) + .apply { isAccessible = true } + .newInstance(null, xmlBlock, false) + else -> + // XmlBlock(@Nullable AssetManager assets, long xmlBlock) + HiddenApiBypass.getDeclaredConstructor(XmlBlockClass, AssetManagerClass, LongType) + .apply { isAccessible = true } + .newInstance(null, xmlBlock) + } as? AutoCloseable? ?: error("Failed to create XmlBlock\$Parser.") isInitOnce = true } @@ -166,7 +175,7 @@ internal object XmlBlockBypass { * @return [XmlResourceParser] */ fun createViewAttrs() = context.layoutInflater.inflateOrNull(R.layout.layout_hikage_attrs_view)?.attrs - as? XmlResourceParser? ?: error("Failed to create AttributeSet.") + as? XmlResourceParser? ?: error("Failed to create AttributeSet.") return if (SystemVersion.isHighOrEqualsTo(SystemVersion.P)) { if (!isInitOnce) return createViewAttrs() require(blockParser != null) { "Hikage initialization failed." }