Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.75 KB | None | 0 0
  1. apply plugin: AndroidFilterPlugin
  2.  
  3. class AndroidFilterPlugin implements Plugin<Project> {
  4. void apply(Project project) {
  5. project.afterEvaluate {
  6. if (project.plugins.hasPlugin("com.android.application")) {
  7. def android = project.extensions.getByName("android")
  8. android.applicationVariants.all { def variant ->
  9. def variantData = variant.getVariantData()
  10. def scope = variantData.scope
  11.  
  12. File filterFile = project.file('filter.properties')
  13. boolean hasChanged = true
  14.  
  15. String md5 = java.security.MessageDigest.getInstance("MD5").digest(GFileUtils.readFile(filterFile).bytes).encodeHex().toString()
  16. File filterMD5File = project.file("${project.buildDir}/filter-md5/${variant.dirName}/md5.txt")
  17. if (filterMD5File.exists()) {
  18. String oldMd5 = GFileUtils.readFile(filterMD5File)
  19. if (md5 != null && md5.equals(oldMd5)) {
  20. hasChanged = false
  21. } else {
  22. GFileUtils.writeFile(md5, filterMD5File)
  23. }
  24. } else {
  25. GFileUtils.writeFile(md5, filterMD5File)
  26. }
  27.  
  28. def filterTaskName = scope.getTaskName("filter")
  29. def filterTask = project.task(filterTaskName)
  30. filterTask.setGroup("filter")
  31.  
  32.  
  33. if (project.file('filter.properties').exists()) {
  34. def compileJavaWithJavacTask = project.tasks.findByName("compile${variant.name.capitalize()}JavaWithJavac")
  35. def filterAndroidSourceTaskName = scope.getTaskName("filter", "AndroidSources")
  36. Properties properties = new Properties()
  37. properties.load(new FileInputStream(project.file('filter.properties')))
  38. def filterAndroidSourceTask = project.task(type: Copy, filterAndroidSourceTaskName) {
  39. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-sources"))
  40. from(compileJavaWithJavacTask.source) {
  41. filesMatching('**/*.java') {
  42. filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties, beginToken: '${', endToken: '}')
  43. }
  44. }
  45. into "${project.buildDir}/generated-android-sources"
  46. }
  47. filterAndroidSourceTask.setGroup("filter")
  48.  
  49. def compileJavaWithJavacTaskDependsOn = new HashSet<>()
  50. compileJavaWithJavacTaskDependsOn.addAll(compileJavaWithJavacTask.getDependsOn())
  51. filterAndroidSourceTask.dependsOn compileJavaWithJavacTaskDependsOn
  52. compileJavaWithJavacTask.dependsOn filterAndroidSourceTask
  53. filterTask.dependsOn filterAndroidSourceTask
  54. compileJavaWithJavacTask.doFirst {
  55. compileJavaWithJavacTask.setSource(filterAndroidSourceTask.outputs.files)
  56. }
  57. compileJavaWithJavacTask.doLast {
  58. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-sources"))
  59. }
  60. if (hasChanged) {
  61. compileJavaWithJavacTask.outputs.upToDateWhen { false }
  62. }
  63. }
  64.  
  65. if (project.file('filter.properties').exists()) {
  66. def processJavaResourcesTask = project.tasks.findByName("process${variant.name.capitalize()}JavaRes")
  67. def filterJavaResourcesTaskName = scope.getTaskName("filter", "JavaResources")
  68. def filterJavaResourcesTask = project.task(filterJavaResourcesTaskName)
  69. filterJavaResourcesTask.setGroup("filter")
  70. filterJavaResourcesTask.doLast {
  71. Properties properties = new Properties()
  72. properties.load(new FileInputStream(project.file('filter.properties')))
  73.  
  74. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-java-resources"))
  75. project.copy {
  76. from(processJavaResourcesTask.destinationDir) {
  77. filesMatching('**') {
  78. filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties, beginToken: '${', endToken: '}')
  79. }
  80. }
  81. into("${project.buildDir}/generated-java-resources/")
  82. }
  83. project.copy {
  84. GFileUtils.deleteDirectory(processJavaResourcesTask.destinationDir)
  85. from("${project.buildDir}/generated-java-resources/")
  86. into(processJavaResourcesTask.destinationDir)
  87. }
  88. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-java-resources"))
  89. }
  90.  
  91. filterJavaResourcesTask.dependsOn processJavaResourcesTask
  92. processJavaResourcesTask.finalizedBy filterJavaResourcesTask
  93. filterTask.dependsOn filterJavaResourcesTask
  94. if (hasChanged) {
  95. processJavaResourcesTask.outputs.upToDateWhen { false }
  96. }
  97. }
  98.  
  99. if (project.file('filter.properties').exists()) {
  100. def mergeAssetsTask = project.tasks.findByName("merge${variant.name.capitalize()}Assets")
  101. def filterAssetsTaskName = scope.getTaskName("filter", "Assets")
  102. def filterAssetsTask = project.task(filterAssetsTaskName)
  103. filterAssetsTask.setGroup("filter")
  104. filterAssetsTask.doLast {
  105. Properties properties = new Properties()
  106. properties.load(new FileInputStream(project.file('filter.properties')))
  107.  
  108. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-assets"))
  109. project.copy {
  110. from(mergeAssetsTask.outputDir) {
  111. filesMatching('**') {
  112. filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties, beginToken: '${', endToken: '}')
  113. }
  114. }
  115. into("${project.buildDir}/generated-android-assets/")
  116. }
  117. project.copy {
  118. GFileUtils.deleteDirectory(mergeAssetsTask.outputDir)
  119. from("${project.buildDir}/generated-android-assets/")
  120. into(mergeAssetsTask.outputDir)
  121. }
  122. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-assets"))
  123. }
  124.  
  125. filterAssetsTask.dependsOn mergeAssetsTask
  126. mergeAssetsTask.finalizedBy filterAssetsTask
  127. filterTask.dependsOn filterAssetsTask
  128. if (hasChanged) {
  129. mergeAssetsTask.outputs.upToDateWhen { false }
  130. }
  131. }
  132.  
  133. if (project.file('filter.properties').exists()) {
  134. def mergeResourcesTask = project.tasks.findByName("merge${variant.name.capitalize()}Resources")
  135. def filterAndroidResourcesTaskName = scope.getTaskName("filter", "AndroidResources")
  136. def filterAndroidResourcesTask = project.task(filterAndroidResourcesTaskName)
  137. filterAndroidResourcesTask.setGroup("filter")
  138. filterAndroidResourcesTask.doLast {
  139. Properties properties = new Properties()
  140. properties.load(new FileInputStream(project.file('filter.properties')))
  141.  
  142. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-resources"))
  143. project.copy {
  144. from(mergeResourcesTask.outputDir) {
  145. filesMatching('**') {
  146. filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties, beginToken: '${', endToken: '}')
  147. }
  148. }
  149. into("${project.buildDir}/generated-android-resources/")
  150. }
  151. project.copy {
  152. GFileUtils.deleteDirectory(mergeResourcesTask.outputDir)
  153. from("${project.buildDir}/generated-android-resources/")
  154. into(mergeResourcesTask.outputDir)
  155. }
  156. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-resources"))
  157. }
  158.  
  159. filterAndroidResourcesTask.dependsOn mergeResourcesTask
  160. mergeResourcesTask.finalizedBy filterAndroidResourcesTask
  161. filterTask.dependsOn filterAndroidResourcesTask
  162. if (hasChanged) {
  163. mergeResourcesTask.outputs.upToDateWhen { false }
  164. }
  165. }
  166.  
  167. if (project.file('filter.properties').exists()) {
  168. def processManifestTask = project.tasks.findByName("process${variant.name.capitalize()}Manifest")
  169.  
  170. def filterManifestTaskName = scope.getTaskName("filter", "Manifest")
  171. def filterManifestTask = project.task(filterManifestTaskName)
  172. filterManifestTask.setGroup("filter")
  173. filterManifestTask.doLast {
  174. File manifestOutputFile = null
  175. File instantRunManifestOutputFile = null
  176. try {
  177. manifestOutputFile = processManifestTask.getManifestOutputFile()
  178. } catch (Throwable e) {
  179. try {
  180. manifestOutputFile = new File(processManifestTask.getManifestOutputDirectory(), "AndroidManifest.xml")
  181. } catch (Throwable e1) {
  182. manifestOutputFile = null
  183. }
  184. }
  185. try {
  186. instantRunManifestOutputFile = processManifestTask.getInstantRunManifestOutputFile()
  187. } catch (Throwable e) {
  188. try {
  189. instantRunManifestOutputFile = new File(processManifestTask.getInstantRunManifestOutputDirectory(), "AndroidManifest.xml")
  190. } catch (Throwable e1) {
  191. instantRunManifestOutputFile = null
  192. }
  193. }
  194. Properties properties = new Properties()
  195. properties.load(new FileInputStream(project.file('filter.properties')))
  196.  
  197. if (manifestOutputFile && manifestOutputFile.exists()) {
  198. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-manifests"))
  199. project.copy {
  200. from(manifestOutputFile.getParentFile()) {
  201. filesMatching('**') {
  202. filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties, beginToken: '#{', endToken: '}')
  203. }
  204. }
  205. into("${project.buildDir}/generated-android-manifests/")
  206. }
  207. project.copy {
  208. GFileUtils.deleteQuietly(manifestOutputFile)
  209. from("${project.buildDir}/generated-android-manifests/")
  210. into(manifestOutputFile.getParentFile())
  211. }
  212. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-manifests"))
  213. }
  214. if (instantRunManifestOutputFile && instantRunManifestOutputFile.exists()) {
  215. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-manifests"))
  216. project.copy {
  217. from(instantRunManifestOutputFile.getParentFile()) {
  218. filesMatching('**') {
  219. filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: properties, beginToken: '@{', endToken: '}')
  220. }
  221. }
  222. into("${project.buildDir}/generated-android-manifests/")
  223. }
  224. project.copy {
  225. GFileUtils.deleteQuietly(instantRunManifestOutputFile)
  226. from("${project.buildDir}/generated-android-manifests/")
  227. into(instantRunManifestOutputFile.getParentFile())
  228. }
  229. GFileUtils.deleteDirectory(project.file("${project.buildDir}/generated-android-manifests"))
  230. }
  231. }
  232.  
  233. filterManifestTask.dependsOn processManifestTask
  234. processManifestTask.finalizedBy filterManifestTask
  235. filterTask.dependsOn filterManifestTask
  236. if (hasChanged) {
  237. processManifestTask.outputs.upToDateWhen { false }
  238. }
  239. }
  240. }
  241. }
  242. }
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement