android studio提高导入的jar包优先级高于android.jar

当我们自己的包中的包或者类和sdk中android.jar的包或者类相同时,android studio默认使用的时android.jar中的内容,而如果我们想使用自己的包中的内容的话,就必须把优先级放到android.jar之前。这是这样一个简单的需求,我折腾了一个上午来搞定,本来是非常简单的事情,因为跳的坑太多,浪费了很多时间。
假定你有这样一个包:classed-full-debug.jar

第一步:导入包

把classed-full-debug.jar放在工程下的libs目录里,放入后右键,选择add as library。

第二步:修改scope为Provided

通过File菜单或者F4进入project structure,左边选中app,再进到dependencies,点 + 选择file dependency ,再从libs目录选择你要的jar包,这里是test.jar,选择后把 scope置为Provided,没有Provided的,选择CompileOnly.
最后,千万别忘了,要把你添加的jar挪到最前面,点击右边的蓝色向上箭头即可。
如图:
这里写图片描述
第三步:修改根目录下的build.gradle
找到工程根目录下的build.gradle,把

allprojects {
    repositories {
        jcenter()
    }
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5

这段实现改为

allprojects {
    repositories {
        jcenter()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app/libs/classes_full_debug.jar')
        }
    }
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如图:
这里写图片描述

第四步:修改app/app.iml
最后,记得在app/app.iml中,把jdk的顺序调整到最后,如下:
这里写图片描述
这里改完后,每次重新打开Android stuio或者sync gradle,都会使得jdk的顺序发生变动,type=”jdk”所在的行会跑到前面去,为了方便起见,可使用下面的代码自动将type=’jdk’的行移动到最后:

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
        }
    }
}
    
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

把这段代码加到app下的build.gradle中即可。
如图所示:
这里写图片描述

当我们自己的包中的包或者类和sdk中android.jar的包或者类相同时,android studio默认使用的时android.jar中的内容,而如果我们想使用自己的包中的内容的话,就必须把优先级放到android.jar之前。这是这样一个简单的需求,我折腾了一个上午来搞定,本来是非常简单的事情,因为跳的坑太多,浪费了很多时间。
假定你有这样一个包:classed-full-debug.jar

第一步:导入包

把classed-full-debug.jar放在工程下的libs目录里,放入后右键,选择add as library。

第二步:修改scope为Provided

通过File菜单或者F4进入project structure,左边选中app,再进到dependencies,点 + 选择file dependency ,再从libs目录选择你要的jar包,这里是test.jar,选择后把 scope置为Provided,没有Provided的,选择CompileOnly.
最后,千万别忘了,要把你添加的jar挪到最前面,点击右边的蓝色向上箭头即可。
如图:
这里写图片描述
第三步:修改根目录下的build.gradle
找到工程根目录下的build.gradle,把

allprojects {
    repositories {
        jcenter()
    }
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5

这段实现改为

allprojects {
    repositories {
        jcenter()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app/libs/classes_full_debug.jar')
        }
    }
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如图:
这里写图片描述

第四步:修改app/app.iml
最后,记得在app/app.iml中,把jdk的顺序调整到最后,如下:
这里写图片描述
这里改完后,每次重新打开Android stuio或者sync gradle,都会使得jdk的顺序发生变动,type=”jdk”所在的行会跑到前面去,为了方便起见,可使用下面的代码自动将type=’jdk’的行移动到最后:

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
        }
    }
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

把这段代码加到app下的build.gradle中即可。
如图所示:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/li_huai_dong/article/details/81137355
今日推荐