# AndroidHiddenApiBypass **Repository Path**: clg-123/AndroidHiddenApiBypass ## Basic Information - **Project Name**: AndroidHiddenApiBypass - **Description**: 一种纯 Java 安卓实现的解决绕过针对 API 28 或更高版本的应用程序的隐藏 API 限制。 - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-12 - **Last Updated**: 2024-04-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AndroidHiddenApiBypass [![Android CI状态](https://github.com/LSPosed/AndroidHiddenApiBypass/actions/workflows/android.yml/badge.svg?branch=main)](https://github.com/LSPosed/AndroidHiddenApiBypass/actions/workflows/android.yml) 绕过对非SDK接口的限制。 ## 为什么使用AndroidHiddenApiBypass? - 纯Java: 不使用本机代码。 - 可靠: 不依赖于特定的行为,因此不会像元反射或`dexfile`那样被阻止。 - 稳定: `unsafe`,技术结构和`setHiddenApiExemptions`是稳定的API。 [工作原理(中文)](https://lovesykun.cn/archives/android-hidden-api-bypass.html) ## 集成 Gradle: ```gradle repositories { mavenCentral() } dependencies { implementation 'org.lsposed.hiddenapibypass:hiddenapibypass:4.3' } ``` ## 使用 1. 调用受限制的方法: ```java HiddenApiBypass.invoke(ApplicationInfo.class, new ApplicationInfo(), "usesNonSdkApi"/*, args*/) ``` 1. 调用受限构造函数: ```java Object instance = HiddenApiBypass.newInstance(Class.forName("android.app.IActivityManager$Default")/*, args*/); ``` 1. 从类中获取所有方法,包括受限制的方法: ```java var allMethods = HiddenApiBypass.getDeclaredMethods(ApplicationInfo.class); ((Method).stream(allMethods).filter(e -> e.getName().equals("usesNonSdkApi")).findFirst().get()).invoke(new ApplicationInfo()); ``` 1. 从类中获取所有非静态字段,包括受限制的字段: ```java var allInstanceFields = HiddenApiBypass.getInstanceFields(ApplicationInfo.class); ((Method).stream(allInstanceFields).filter(e -> e.getName().equals("longVersionCode")).findFirst().get()).get(new ApplicationInfo()); ``` 1. 从类中获取所有静态字段,包括受限制的字段: ```java var allStaticFields = HiddenApiBypass.getStaticFields(ApplicationInfo.class); ((Method).stream(allStaticFields).filter(e -> e.getName().equals("HIDDEN_API_ENFORCEMENT_DEFAULT")).findFirst().get()).get(null); ``` 1. 获取特定的类方法或类构造函数 ```java var ctor = HiddenApiBypass.getDeclaredConstructor(ClipDrawable.class /*, args */); var method = HiddenApiBypass.getDeclaredMethod(ApplicationInfo.class, "getHiddenApiEnforcementPolicy" /*, args */); ``` 1. 将类添加到豁免列表: ```java HiddenApiBypass.addHiddenApiExemptions( "Landroid/content/pm/ApplicationInfo;", // 一个特定类 "Ldalvik/system" // dalvik.system包中的所有类 "Lx" // 全名以x开头的所有类 ); ``` 如果要将所有类添加到豁免列表中,只需保留一个空前缀: ```java HiddenApiBypass.addHiddenApiExemptions(""); ``` ## 许可证 版权所有 2021-2023 LSPosed 根据Apache许可证2.0版许可("许可证"); 除非符合许可证的规定,否则您不得使用此文件。 您可以在获取许可证副本 https://www.apache.org/licenses/LICENSE-2.0 除非适用法律要求或书面同意,软件根据许可证进行的分发是在“按原样”的基础上进行的, 无任何明示或暗示的保证或条件。 有关管理权限的特定语言,请参阅许可证和许可证下的限制。