在编译rom的out目录下,找到framework.jar (可以将classes.jar修改为classes.zip解压后发现很多系统的class文件)
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 重命名为 framework.jar
2. 将找到framework.jar文件加入到AS中如图所示,放到app/libs/framework.jar
3. 修改AS中项目的./build.gradlegradle.projectsevaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << '-Xbootclasspath/p:/home/liujin/AndroidStudioProjects/application1111/app/libs/framework.jar'
}
}
4. 修改AS中项目的.app/build.gradle
4.1 framework.jar只参与编译不打包到系统
dependencies { compileonly fileTree(include: ['*.jar'], dir: 'libs') }
4.2 类加载机制framework.jar在AndroidSDK之前
preBuild {
doLast {
def imlFile = file(project.name + ".iml")
println('Change ' + project.name + '.iml order')
try {
def parsedXml = (new XmlParser()).parse(imlFile)
def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
parsedXml.component[1].remove(jdkNode)
def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
} catch (FileNotFoundException e) {
// nop, iml not found
}
}
}
gradle.projectsevaluated {
tasks.withType(JavaCompile) {
Set fileSet = options.bootstrapClasspath.getFiles()
List newFileList = new ArrayList<>();
//"../framework.jar" 为相对位置,需要参照着修改,或者用绝对位置
newFileList.add(new File("libs/framework.jar"))
newFileList.addAll(fileSet)
options.bootstrapClasspath = files(newFileList.toArray())
}
}
5. 验证是否成功
我们可以看到ActivityManger.getService()是标红的,但是AndroidStudio依旧可以运行.



