Android Studio引入framework.jar包

本文详细描述了如何在AndroidStudio中将framework.jar引入项目,解决与SDK冲突问题,以及如何调整编译优先级以确保优先使用自定义库。作者提供了在build.gradle文件中的具体修改步骤和测试验证方法。
摘要由CSDN通过智能技术生成

一.  前言

        Android Studio 引入framework.jar 步骤,记录笔记

        Android源码编译产生的framework.jar 在不同的版本上生成路径是不同的

Android N/O:  7 和 8
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
Android P/Q:  9 和 10
out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar
Android R:  11以上
out/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/combined/framework-minus-apex.jar

二.  操作

 2.1 步骤1

         复制framework.jar 到工程的libs文件夹中

         并在app路径下的build.graddle 文件中修改,见下图:

//修改点一
compileOnly files('libs\\framework.jar')

到这里,但是有个问题,就是和Android SDK中同名的类文件,会优先使用SDK中的类,framework.jar中的类不会优先使用,解决方法:需要进行下面步骤的配置:

2.2 步骤2

        同样是在app路径下的build.graddle 文件中修改

//修改点二
gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        Set<File> fileSet = options.bootstrapClasspath.getFiles();
        List<File> newFileList = new ArrayList<>()
        newFileList.add(new File("libs/framework.jar"))
        newFileList.addAll(fileSet)
        options.bootstrapClasspath = files(newFileList.toArray())
    }
}

2.3 步骤3

       同样是在app路径下的build.graddle 文件中修改,降低Android SDK的使用级别,优先使用framework.jar中的类文件

//修改点三 :调整Android SDK优先级
gradle.buildFinished {
    //这里可以配置多个modules模块使用framework.jar包
    String[] modules = ["app", "mymodule"]
    for (String m : modules) {
        def imlFile = file("../.idea/modules/${m}/frameworkjartest.${m}.iml")
        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) {
            e.printStackTrace()
        }
    }
}

然后sync  编译成功后,就可以找到对应的模块的imi文件,可以看到下图,说明配置ok

三. 备注说明

        1. 上面的3个修改点,都是在app模块中的build.graddle 文件中

        2. 笔者的AS工程版本信息,亲测可用

         distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip

         AS的版本 : Android Studio  4.2.1 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值