AS无缝调用系统api
Android studio使用自己的framework.jar,调用系统api
源码路径下找到对应的编译中间文件
out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar
拷贝jar文件添加到AS的lib中,add as library
修改app下build.gradle中framework.jar为compileOnly模式,优先级提高
dependencies { compileOnly files('libs/framework.jar') implementation fileTree(include: ['*.jar'], dir: 'libs') ... }
修改AS项目app目录下的app.iml文件,将文件结尾 <orderEntry> 中对应的framework.jar项提取到sdk项之上,不要忘记save一下
…
<orderEntry type="library" name="__local_aars__:E.\Workspace\AndroidProj\Test\MTvFactoryTest\app\libs\framework.jar:unspecified@jar" level="project" /> <orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" /> ...
gradle实现方式,在app下build.gradle中结尾添加如下代码
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 } } }
项目根目录下的build.gradle中,添加如下代码:
allprojects { repositories { ... } gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar') } } }
执行clern,rebuild操作后,即可发现系统隐藏api不再报错,即可无缝使用