本文主要是介绍AS中导入framework.jar包编译,运行全部通过,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由于业务求,要将定制化的framework包导入到AS中,然后不断查阅料,找到一系列比较全的资料。最终整理如下:
1.将jar包放在libs目录下:
2.右键将包add as library
3.在app的build.gradle下 dependence下:
记住:implementation fileTree(include: ['*.jar'], dir: 'libs')必须注释,否则会报错。
将implementation 改为compileOnly(原来的provided已经废弃)
4.然后我们需要将framework的编译顺序更改到系统自带android.jar之前,以前是手动更改,后来发现一段脚本,得救了。在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 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}}
}
这段代码是用来将系统jar包自动放置于最后的位置。编译之后,打开app.iml可以查看到效果:
然后为了使framwork包生效,需要在系统的build.gradle下添加一段代码
其中前者将framework包打入apk包中,确保不出现打包错误;后者是编译包,在编译器编译时不会出现编译错误的情况。
代码具体如下:
//添加以下代码,使cframework-base.jar包编译先于android.jargradle.projectsEvaluated {tasks.withType(JavaCompile) {options.compilerArgs.add('-Xbootclasspath/p:D:\\git\\MyApplication\\app\\libs\\framework-base.jar')}}
这个地方一定要注意一点:后面的路径已经要右键framework包---copy relative path,
copy relative path,copy relative path(重要的事情要说三遍,楼主就是这里栽了跟头,csdn,stackoverflow上很多大牛都遇到了)
然后实验activity的一句话:
编译通过
运行完美
这篇关于AS中导入framework.jar包编译,运行全部通过的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!