Platform: Android Studio 4.3.1
OS: Ubuntu14.04
1. 修改Android源码,将需要用到的API的"@hide"注解去掉
然后单独编译frameworks (即mmm frameworks/base);
编译生成的中间文件在out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/
2.将编译好的framework放到AndroidStudio项目中
将源码目录out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar文件,复制到AndroidStudio项目的app/sdk下面并重命名为android23.jar(即android$(api-level).jar).
修改AndroidStudio项目中的build.gradle(Project),在allprojects节点中添加以下内容,配置在编译时使用android23.jar
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:app/sdk/android23.jar')
}
}
修改AndroidStudio项目中的build.gradle(Module),在dependencies节点中添加以下内容,配置让android23.jar只在编译时使用,不会打包到apk中.
compileOnly files('sdk/android23.jar')
如果不想自己修改源代码,但要用隐藏API,github上有已经编译好的: https://github.com/anggrayudi/android-hidden-api
使用自己编译的framework存在的问题
- 为什么不将android23.jar放到app/libs下面呢?如果放到app/libs下面,会与下面的dependencies冲突,最终编译出来的apk会很大(compileOnly失效)
implementation fileTree(dir: 'libs', include: ['*.jar'])
- Cannot resolve symbol 'SERIAL_SERVICE’问题
这只是解析错误提示,并不影响编译;是因为Android Studio将SDK作为第一个语法解析的jar包.
可以手动修改app/app.iml,将以下行移到文档最后(但是如果修改了build.gradle,同步后会自动改回去,需要再手动修改):
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
- 自己写APP注意用平台签名或者放到系统/system/priv-app/下面(使APP成为platform-app),只有系统平台应用才能访问这些隐藏接口和功能.
定制Android框架访问隐藏API

3702

被折叠的 条评论
为什么被折叠?



