Android Studio 使用自己编译的framework

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存在的问题
  1. 为什么不将android23.jar放到app/libs下面呢?如果放到app/libs下面,会与下面的dependencies冲突,最终编译出来的apk会很大(compileOnly失效)
    implementation fileTree(dir: 'libs', include: ['*.jar'])
  1. Cannot resolve symbol 'SERIAL_SERVICE’问题
    这只是解析错误提示,并不影响编译;是因为Android Studio将SDK作为第一个语法解析的jar包.
    可以手动修改app/app.iml,将以下行移到文档最后(但是如果修改了build.gradle,同步后会自动改回去,需要再手动修改):
    
  1. 自己写APP注意用平台签名或者放到系统/system/priv-app/下面(使APP成为platform-app),只有系统平台应用才能访问这些隐藏接口和功能.

你可能感兴趣的:(android,android,studio,hide,api,隐藏API)