Android - 调用系统隐式API

2023-12-17 16:20:10


前言

调用系统隐式API首先到系统源码中找到classes.jar文件也就是系统API的jar包,然后添加到项目中在项目中引用


1、找系统API

直接参考https://codeleading.com/article/43715759046/
亲测有效,可以成功导出framework.jar

2、项目中引入系统API

1.将framework.jar文件放入as的项目中的libs目录下
2.在project的builed.gradle文件中的allprojects括号中添加以下代码

gradle.projectsEvaluated {
	tasks.withType(JavaCompile) {
    	options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
	}
}

3.在android括号中添加

sourceSets {
	main {
    	jni.srcDirs = []
        jniLibs.srcDirs = ['libs']
	}
}

4.在module的builed.gradle文件中的dependencies括号中添加

compileOnly files('libs\\framework.jar')

5.在dependencies外面也就是最下面添加以下代码(表示优先调用引入的framework.jar)

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
		}
	}
}

通过以上5步操作后,Sync一下完成引入framework.jar

3…常见问题记录

引入framework.jar包后代码仍然飘红如何解决?

进入 项目.idea\modules\app\ 目录有一个 项目名.app.iml文件
打开这个文件将component里面的这一行代码

<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />

移动到component里面最后一行,然后再重新打开项目编译解决飘红问题


总结

网上有很多这样的文章,大多都是零零散散的解决不了问题,我这里只是把我亲测有用的方法记录下来

文章来源:https://blog.csdn.net/2301_77563065/article/details/132711173
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。