Android Studio引入framework.jar包

一.  前言

        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 

相关推荐

  1. AndroidStudio

    2024-04-12 05:48:02       63 阅读
  2. 【FAQ】NPM 引入本地依赖

    2024-04-12 05:48:02       58 阅读
  3. Android引入aar的方法

    2024-04-12 05:48:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 05:48:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 05:48:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 05:48:02       87 阅读
  4. Python语言-面向对象

    2024-04-12 05:48:02       96 阅读

热门阅读

  1. SpringMVC原理分析(十二)--异常处理流程

    2024-04-12 05:48:02       29 阅读
  2. 浅谈:从医疗元宇宙向更多实业领域的拓展

    2024-04-12 05:48:02       40 阅读
  3. Flask、Django和Tornado怎么选

    2024-04-12 05:48:02       33 阅读
  4. 【C#】C#匹配两个相似的字符串莱文斯坦距离

    2024-04-12 05:48:02       40 阅读
  5. 定期与设定域名地址交互工具

    2024-04-12 05:48:02       34 阅读
  6. 探索量子计算:打开未来技术的大门

    2024-04-12 05:48:02       36 阅读
  7. android 判断是否联网

    2024-04-12 05:48:02       36 阅读
  8. C#面:如何创建一个自定义异常?

    2024-04-12 05:48:02       35 阅读
  9. js常用数据处理方法

    2024-04-12 05:48:02       40 阅读
  10. K8S问题记录

    2024-04-12 05:48:02       34 阅读
  11. springboot组件的单例模式和分布式分析

    2024-04-12 05:48:02       31 阅读