2026新版Android Studio依赖framework.jar来实现对系统隐藏API的调用
1. 背景1.1 Android隐藏API是什么Android 系统中存在大量隐藏 APIHidden API这些 API 被标记为hide意味着它们不在官方 SDK 中公开。简单来说这些接口是系统内部自己用的不是给第三方 App 开发者调用的官方也不会保证你调用后能在不同设备 / 版本上正常工作。1.2 Android 官方为什么要隐藏API稳定性考虑: 隐藏 API 可能在不同 Android 版本之间发生变化Google 不希望第三方应用依赖这些不稳定的接口安全性考虑某些 API 涉及系统底层操作不当使用可能导致安全问题兼容性考虑隐藏 API 的行为可能因设备厂商定制而异内部实现细节某些 API 是 Android 内部实现的一部分不适合外部使用1.3 隐藏 API 的典型使用场景尽管存在风险但在某些特定场景下如系统应用、车载应用、IoT 设备等我们仍然需要调用这些隐藏 API//调用 PowerManager.wakeUp() 唤醒屏幕valpowerManagergetSystemService(POWER_SERVICE)asPowerManagerif(powerManager.isInteractive.not()){powerManager.wakeUp(SystemClock.uptimeMillis(),com.zeekr.flexiscreen.launcher:systemdialog)}//调用 WifiManager.connect() 连接 WiFivalwifiManagergetSystemService(Context.WIFI_SERVICE)asWifiManager wifiManager.connect(WifiConfiguration(),object:WifiManager.ActionListener{overridefunonSuccess(){Log.i(TAG,onSuccess)}overridefunonFailure(reason:Int){Log.i(TAG,onFailure)}})但是直接调用隐藏API会报错 :file:///D:/WorkSpace/Test/FrameApiTest/app/src/main/java/com/example/frameapitest/MainActivity.kt:27:26 Unresolved reference wakeUp.那么需要怎么办呢 ?2. 原本可行的方案原本的Android Studio中存在可行的方案我们先来回顾下 :2.1 步骤一 : 复制framework.jar到app/libs目录下官方给开发者的android.jarSDK 目录下是阉割版—— 移除了hide标记的隐藏 API而framework.jar是包含完整 Android 框架层接口公开 隐藏 API的 jar 包是调用隐藏 API 的核心依赖。有三种方式可以获取到framework.jar从已 Root 的设备 / 模拟器中提取从 Android 源码编译生成使用第三方现成包比如github上有现成已经编译好的framework.jar : aosp-android-jar2.2 步骤二 : 引入 framework.jar使用compileOnly来引入 framework.jardependencies{compileOnly(files(libs/framework.jar))// 其他依赖...}注意这里要用compileOnly而不是implementation否则会报错 :com.android.tools.r8.internal.wx: Absent Code attribute in method that is not native or abstract2.3 步骤三 : 增加gradle配置这一步骤的作用是将你本地的framework.jar包含隐藏 API优先加入到 编译器的引导类路径中让编译器优先使用这个完整的framework.jar而非官方 SDK 中被阉割的android.jar。2.1 方案一在app模块的build.gradle中增加如下配置 :gradle.projectsEvaluated{tasks.withTypeJavaCompile{if(options.bootstrapClasspathnull){options.bootstrapClasspathfiles(libs/framework.jar)}else{valfileSetoptions.bootstrapClasspath!!.filesvalnewFileListmutableListOfFile()newFileList.add(File(libs/framework.jar))newFileList.addAll(fileSet)options.bootstrapClasspathfiles(*newFileList.toTypedArray())}}}2.2 方案二在app模块的build.gradle中增加如下配置 :gradle.projectsEvaluated{tasks.withTypeorg.jetbrains.kotlin.gradle.tasks.KotlinCompile{// 使用新的 compilerOptions DSLcompilerOptions{valframeworkJarfile(libs/framework.jar)// 使用 add 方法添加编译参数freeCompilerArgs.add(-Xbootclasspath/p:${frameworkJar.absolutePath})}}}2.3 方案三在app模块的build.gradle中增加如下配置 :tasks.withTypeorg.jetbrains.kotlin.gradle.tasks.KotlinCompile().configureEach{compilerOptions{valframeworkJarproject.file(libs/framework.jar)freeCompilerArgs.add(-Xbootclasspath/p:${frameworkJar.absolutePath})}}3. 新版Android Studio中失效我使用的是Android Studio Otter 3 Feature Drop | 2025.2.3使用的kotlin版本是2.2.21agp版本是9.0.1在此版本中新建项目依赖framework.jar上述配置会失效。例如在使用方案二的时候会提示 :w:Flagisnot supportedbythisversion of the compiler:-Xbootclasspath/p:D:\WorkSpace\Test\FrameApiTest\app\libs\framework.jar e:file:///D:/WorkSpace/Test/FrameApiTest/app/src/main/java/com/example/frameapitest/MainActivity.kt:27:26 Unresolved reference wakeUp.e:file:///D:/WorkSpace/Test/FrameApiTest/app/src/main/java/com/example/frameapitest/MainActivity.kt:34:21 Unresolved reference connect.原因是由于 Kotlin 编译器在较新版本中已不再支持 -Xbootclasspath/p 参数因此导致了 Flag is not supported 的警告并且因为 framework.jar 未能正确优先加载导致了 Unresolved reference 错误。故需修改 app/build.gradle.kts 配置。移除了不被支持的 -Xbootclasspath/p 参数改为通过调整 KotlinCompile 任务的 libraries classpath顺序来确保 framework.jar 优先于 android.jar 加载从而能够正确访问隐藏 API。4. 新版解决方案还是按照2. 原本可行的方案中的步骤一到步骤二进行操作区别在于步骤三 : 在app模块的build.gradle中增加如下配置 :gradle.projectsEvaluated{/**tasks.withTypeJavaCompile().configureEach { val frameworkJar file(libs/framework.jar) val bootstrapClasspath options.bootstrapClasspath?.files?.toMutableList() ?: mutableListOf() bootstrapClasspath.add(0, frameworkJar) options.bootstrapClasspath files(bootstrapClasspath) }**/tasks.withTypeorg.jetbrains.kotlin.gradle.tasks.KotlinCompile().configureEach{valframeworkJarfile(libs/framework.jar)// 将 framework.jar 添加到 libraries (classpath) 的最前面libraries.setFrom(files(frameworkJar)libraries)}}再次运行项目可以发现powerManager.wakeUp和wifiManager.connect这种隐藏API就不再报错了能够正常运行了。

相关新闻

嵌入式项目总结,几个嵌入式的项目。 说明文档+项目要求+实现方案+软件思路+软件代码+相关资料

嵌入式项目总结,几个嵌入式的项目。 说明文档+项目要求+实现方案+软件思路+软件代码+相关资料

嵌入式项目总结,几个嵌入式的项目。 说明文档项目要求实现方案软件思路软件代码相关资料干了三年嵌入式开发,攒了几个有意思的项目想跟大家唠唠。这几个玩意儿都是甲方爸爸拿着需求追着屁股要的实战项目,今天挑三个带劲的,顺便把当…

2026/7/4 9:59:14 阅读更多 →
互联网大厂Java岗位面试模拟:电商订单处理系统全栈解析

互联网大厂Java岗位面试模拟:电商订单处理系统全栈解析

互联网大厂Java岗位面试模拟:电商订单处理系统全栈解析 面试场景与背景介绍 本次模拟面试聚焦于互联网电商领域订单处理系统,涵盖核心Java技术、Spring生态、微服务架构及安全模块。面试官严肃而专业,谢飞机则幽默应答,通过三轮递…

2026/5/17 11:58:30 阅读更多 →
【极大似然估计/最大化后验】为什么逻辑回归要使用交叉熵损失函数

【极大似然估计/最大化后验】为什么逻辑回归要使用交叉熵损失函数

问题:在逻辑回归(Logistic Regression)中,我们通常使用交叉熵(Cross-Entropy)作为损失函数,那么为什么逻辑回归要使用交叉熵损失函数? 原理:伯努利分布与极大似然估计 (M…

2026/7/2 19:25:20 阅读更多 →

最新新闻

Anaconda+pycharm安装及环境配置

Anaconda+pycharm安装及环境配置

目录 一:工具准备 二:Anaconda安装及环境配置 2.1 Anaconda安装 2.2注意点: 2.3 环境搭建 2.4 确认环境是否搭建成功 三:pycharm安装及基础设置 3.1Pycharm安装 3.2 pycharm设置 3.21 环境设置 3.22 其他设置 安装过程中&a…

2026/7/4 9:59:42 阅读更多 →
vivo vcl远程真机调试折叠屏使用教程

vivo vcl远程真机调试折叠屏使用教程

简介vivo已于2018年上线了远程真机平台 目的地就是为了一些开发者通过其平台进行远程调试app或者小程序。vivo云真机平台已覆盖目前在售的vivo和iqoo机型。登陆账号输入vcl.vivo.com.cn。然后登陆账号即可登陆后找到远程真机选项。然后进入远程真机页面然后在远程真机调试页面选…

2026/7/4 9:59:42 阅读更多 →
.NET Core 的 重要问题

.NET Core 的 重要问题

.NET Core 的 重要问题 什么是 C# ?.NET 中主要的开发语言,.NET 只是一个开发平台,他提供了一些类,一些运行时等等;他不是一门语言,除了 C# , 还有 VB.NET,F# 等等;但是用的最多的,…

2026/7/4 9:53:40 阅读更多 →
Agent Skills技能缓存策略:优化技能加载速度的3层缓存架构

Agent Skills技能缓存策略:优化技能加载速度的3层缓存架构

Agent Skills技能缓存策略:优化技能加载速度的3层缓存架构 【免费下载链接】agentskills Specification and documentation for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/ag/agentskills 在AI应用开发中,Agent Skills的加载速…

2026/7/4 9:51:40 阅读更多 →
Windows Research Kernel (WRK) 本地过程调用(LPC):Windows进程间通信的内核实现

Windows Research Kernel (WRK) 本地过程调用(LPC):Windows进程间通信的内核实现

Windows Research Kernel (WRK) 本地过程调用(LPC):Windows进程间通信的内核实现 【免费下载链接】Windows-Research-Kernel-WRK- Windows Research Kernel Source Code 项目地址: https://gitcode.com/gh_mirrors/wi/Windows-Research-Kernel-WRK- Windows …

2026/7/4 9:49:40 阅读更多 →
BLDC无感控制:脉冲注入与电感法优化方案

BLDC无感控制:脉冲注入与电感法优化方案

1. 项目背景与核心挑战在电机控制领域,无刷直流电机(BLDC)因其高效率、长寿命和低维护成本等优势,正逐步取代传统有刷电机。但无感控制方案(即不使用霍尔传感器)的性能提升一直是行业痛点。传统反电动势法在…

2026/7/4 9:47:39 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻