当前位置:   article > 正文

Android Studio引入framework.jar包_android studio导入framework源码

android studio导入framework源码

一.  前言

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

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

  1. Android N/O: 78
  2. out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
  3. Android P/Q: 910
  4. out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar
  5. Android R: 11以上
  6. out/soong/.intermediates/frameworks/base/framework-minus-apex/android_common/combined/framework-minus-apex.jar

二.  操作

 2.1 步骤1

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

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

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

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

2.2 步骤2

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

  1. //修改点二
  2. gradle.projectsEvaluated {
  3. tasks.withType(JavaCompile) {
  4. Set<File> fileSet = options.bootstrapClasspath.getFiles();
  5. List<File> newFileList = new ArrayList<>()
  6. newFileList.add(new File("libs/framework.jar"))
  7. newFileList.addAll(fileSet)
  8. options.bootstrapClasspath = files(newFileList.toArray())
  9. }
  10. }

2.3 步骤3

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

  1. //修改点三 :调整Android SDK优先级
  2. gradle.buildFinished {
  3. //这里可以配置多个modules模块使用framework.jar包
  4. String[] modules = ["app", "mymodule"]
  5. for (String m : modules) {
  6. def imlFile = file("../.idea/modules/${m}/frameworkjartest.${m}.iml")
  7. try {
  8. def parsedXml = (new XmlParser()).parse(imlFile)
  9. def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
  10. parsedXml.component[1].remove(jdkNode)
  11. def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform"
  12. new groovy.util.Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
  13. groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
  14. } catch (FileNotFoundException e) {
  15. e.printStackTrace()
  16. }
  17. }
  18. }

然后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 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/811278?site
推荐阅读
相关标签
  

闽ICP备14008679号