三个步骤
这里的使用的Android Studio 4.1.2。
1.在allprojects中加入gradle.projectsEvaluated
/libs/framework.jar
为路径
allprojects {
repositories {
mavenCentral()
google()
jcenter()
}
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:/libs/framework.jar')
}
}
}
2.在dependencies 中依赖framework.jar
dependencies {
//implementation fileTree(include: '*.jar', dir: 'libs')
compileOnly files('/libs/framework.jar')
}
3.在dependencies下面加入preBuild,也是最重要的一步,
是为了把Android SDK
的引用放到最后,这样当framework.jar
和android.jar
都有这个类时,优先引用framework.jar
里面的类。
dependencies {
//implementation fileTree(include: '*.jar', dir: 'libs')
compileOnly files('/libs/framework.jar')
}
preBuild {
doLast {
def imlFile = file(project.name + ".iml")
println('yxp change ' + project.name + '.iml order')
try {
def parsedXml = (new XmlParser()).parse(imlFile)
//这里有可能是'1'也有可能是'2',也有可能是其他,需要自己去判断
def parseXmlComponent = parsedXml.component[2];
def jdkNode = parseXmlComponent.orderEntry.find { it.'@type' == 'jdk' }
parseXmlComponent.remove(jdkNode)
def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
new groovy.util.Node(parseXmlComponent, 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
} catch (FileNotFoundException e) {
// nop, iml not found
}
}
}
这里def parseXmlComponent = parsedXml.component[2];
的2
是说在第几个Component
,我这里是第三个,所以选2,具体需要自己去判断,在工程的iml
文件里面。
我的framework.jar在第三个里面,所以填写下标2
。
改变后的orderEntry
,可以看到framework.jar
在sdk 29
前面。
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
//省略...
<orderEntry type="sourceFolder" forTests="false"/>
<orderEntry type="library" name="Gradle: org.apache.http.legacy" level="project"/>
<orderEntry type="library" name="Gradle: ./libs/framework.jar" level="project"/>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK"/>
</component>
最后可能还需要加入multiDexEnabled true
android{
defaultConfig {
applicationId "com.noahedu.xxxxxx"
minSdkVersion 23
targetSdkVersion 23
versionCode 300093
versionName "3.00.093AS"
multiDexEnabled true
}
}
dependencies {
//implementation fileTree(include: '*.jar', dir: 'libs')
implementation 'com.android.support:multidex:1.0.3'
compileOnly files('/libs/framework.jar')
}