当前位置:   article > 正文

AndroidStudio 引用 framework.jar

AndroidStudio 引用 framework.jar

修改最外层的 build.gradle,如下:

  1. buildscript {
  2. repositories {
  3. google()
  4. //jcenter()
  5. mavenCentral()
  6. }
  7. dependencies {
  8. classpath "com.android.tools.build:gradle:4.0.0"
  9. }
  10. gradle.projectsEvaluated {
  11. subprojects {
  12. tasks.withType(JavaCompile) {
  13. // 将 framework.jar 添加到 bootclasspath 是为了能够编译通过
  14. // 其中,该示例中 framework.jar 目录的位置为:
  15. // ├─ProjectRoot
  16. // │ └─libs
  17. // │ └─framework.jar
  18. def bootclasspath = '-Xbootclasspath/p:' + rootProject.files("libs/framework.jar").getAsPath()
  19. options.compilerArgs.add(bootclasspath)
  20. doFirst {
  21. FileCollection fc = rootProject.files("libs/framework.jar") + options.bootstrapClasspath
  22. options.setBootstrapClasspath(fc)
  23. }
  24. }
  25. preBuild {
  26. doLast {
  27. // 别忘了在 dependencies 中添加依赖,如下:
  28. // 使用 compileOnly 确保 framework.jar 只参与编译而不打包进 apk
  29. // dependencies {
  30. // compileOnly files('../libs/framework.jar')
  31. //}
  32. // 修改 iml 文件是为了 AndroidStudio 编辑器中可以识别 framework.jar 中的的方法或符号
  33. // 否则会报: Cannot resolve method 提示
  34. // 不修改 iml 文件也没问题,只要将 framework.jar 加入 bootclasspath 即可编译通过
  35. def idea = new File(getRootDir(), ".idea")
  36. def dirFileList = new LinkedList<File>()
  37. def imlFileList = new ArrayList<File>()
  38. dirFileList.add(idea)
  39. while (!dirFileList.isEmpty()) {
  40. def dir = dirFileList.pop()
  41. if (dir != null) {
  42. def files = dir.listFiles()
  43. if (files != null) {
  44. for (File f : files) {
  45. if (f.isDirectory()) {
  46. dirFileList.add(f)
  47. } else if (f.name.endsWith(".iml")) {
  48. imlFileList.add(f)
  49. }
  50. }
  51. }
  52. }
  53. }
  54. for (File imlFile : imlFileList) {
  55. try {
  56. def parsedXml = (new XmlParser()).parse(imlFile)
  57. def component = parsedXml.component[1]
  58. if (component == null) {
  59. continue
  60. }
  61. def orderEntryArray = component.orderEntry
  62. if (orderEntryArray == null) {
  63. continue
  64. }
  65. def frameworkNode = orderEntryArray.find {
  66. def name = it.'@name'
  67. if (name != null && name.contains('framework')) {
  68. true
  69. } else {
  70. false
  71. }
  72. }
  73. if (frameworkNode == null) {
  74. continue
  75. }
  76. System.out.println("reorder framework entry for: " + imlFile)
  77. component.remove(frameworkNode)
  78. def orderEntryList = new ArrayList<Object>()
  79. // component.remove 之后,component.orderEntry 变化了,所以不能直接使用 orderEntryArray.iterator()
  80. def iterator = component.orderEntry.iterator()
  81. while (iterator.hasNext()) {
  82. def entry = iterator.next()
  83. orderEntryList.add(entry)
  84. component.remove(entry)
  85. }
  86. component.append(frameworkNode)
  87. def i = orderEntryList.iterator()
  88. while (i.hasNext()) {
  89. component.append(i.next())
  90. }
  91. //noinspection UnnecessaryQualifiedReference
  92. groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
  93. } catch (Exception e) {
  94. // nop, iml not found
  95. System.out.println("exception: " + e)
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }
  102. }
  103. allprojects {
  104. repositories {
  105. google()
  106. //jcenter()
  107. mavenCentral()
  108. }
  109. }
  110. task clean(type: Delete) {
  111. delete rootProject.buildDir
  112. }

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

闽ICP备14008679号