Skip to content

Commit 0ac8219

Browse files
authored
Merge pull request #44 from XZQ/xzq
feat: 完善小细节
2 parents d34dec9 + fbfec76 commit 0ac8219

3 files changed

Lines changed: 56 additions & 54 deletions

File tree

buildSrc/src/main/kotlin/plugin/AppProjectDependencies.kt

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ import java.util.*
1919
* copyright TCL+
2020
*/
2121
open class AppProjectDependencies(
22-
var project: Project,
23-
var android: AppExtension,
24-
val rocketXBean: RocketXBean?,
25-
val mAllChangedProject: MutableMap<String, Project>? = null,
26-
var listener: ((finish: Boolean) -> Unit)? = null) {
22+
private val project: Project,
23+
private val android: AppExtension,
24+
private val rocketXBean: RocketXBean?,
25+
private val mAllChangedProject: MutableMap<String, Project>? = null,
26+
private val listener: ((finish: Boolean) -> Unit)? = null) {
27+
2728
var isFirst = true
2829

29-
var mAllChildProjectDependenciesList = arrayListOf<ChildProjectDependencies>()
30-
lateinit var mDependenciesHelper: DependenciesHelper
30+
val mAllChildProjectDependenciesList = arrayListOf<ChildProjectDependencies>()
31+
32+
private lateinit var mDependenciesHelper: DependenciesHelper
3133

3234
init {
3335
val projectsEvaluatedList = hookProjectsEvaluatedAction()
@@ -95,17 +97,17 @@ open class AppProjectDependencies(
9597
return removeDispatch
9698
}
9799

98-
fun resolveDenpendency() {
99-
project.rootProject.allprojects.forEach {
100-
//剔除 rootProject 和 有多级目录的 parent folder
101-
if (it != project.rootProject && it.childProjects.size <= 0) {
102-
//每一个 project 的依赖,都在 ProjectDependencies 里面解决
103-
val project = ChildProjectDependencies(it, android, mAllChangedProject)
104-
mAllChildProjectDependenciesList.add(project)
105-
}
100+
private fun resolveDenpendency() {
101+
//剔除 rootProject 和 有多级目录的 parent folder
102+
project.rootProject.allprojects.filter { it != project.rootProject && it.childProjects.isEmpty() }.forEach {
103+
//每一个 project 的依赖,都在 ProjectDependencies 里面解决
104+
val project = ChildProjectDependencies(it, android, mAllChangedProject)
105+
mAllChildProjectDependenciesList.add(project)
106106
}
107+
107108
//生成拥有整个依赖图的工具类(只能在此处才能生成)
108109
mDependenciesHelper = DependenciesHelper(rocketXBean, mAllChildProjectDependenciesList)
110+
109111
mAllChildProjectDependenciesList.forEach {
110112
it.doDependencies(mDependenciesHelper)
111113
}

buildSrc/src/main/kotlin/plugin/RocketXPlugin.kt

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import plugin.localmaven.mavenPublish
1515
import plugin.utils.*
1616
import plugin.utils.FileUtil.getLocalMavenCacheDir
1717
import java.io.File
18+
import java.util.*
1819
import kotlin.reflect.jvm.isAccessible
1920

2021

@@ -38,21 +39,26 @@ open class RocketXPlugin : Plugin<Project> {
3839
lateinit var android: AppExtension
3940
var mRocketXBean: RocketXBean? = null
4041
lateinit var mAppProjectDependencies: AppProjectDependencies
41-
val mAllChangedProject by lazy {
42+
43+
private val mAllChangedProject by lazy {
4244
ChangeModuleUtils.getChangeModuleMap(appProject)
4345
}
4446

45-
val mFlavorBuildType by lazy {
47+
private val mFlavorBuildType by lazy {
4648
getFlavorBuildType(appProject)
4749
}
4850

4951
override fun apply(project: Project) {
5052
//应用在 主 project 上,也就是 app module
5153
mRocketXBean = project.extensions.create("RocketX", RocketXBean::class.java)
52-
if (!isEnable(project) || hasAndroidPlugin(project) || !isCurProjectRun(project)) return
54+
if (!isEnable(project) || hasAndroidPlugin(project) || !isCurProjectRun(project)){
55+
return
56+
}
5357
this.appProject = project
5458
//禁止 release 使用加速插件
55-
if (mFlavorBuildType.toLowerCase().contains("release")) return
59+
if (mFlavorBuildType.toLowerCase(Locale.ROOT).contains("release")) {
60+
return
61+
}
5662
FileUtil.attach(project)
5763
flatDirs()
5864
android = project.extensions.getByType(AppExtension::class.java)
@@ -82,10 +88,9 @@ open class RocketXPlugin : Plugin<Project> {
8288
}
8389
}
8490

85-
mAppProjectDependencies =
86-
AppProjectDependencies(project, android, mRocketXBean, mAllChangedProject) {
87-
pritlnDependencyGraph()
88-
}
91+
mAppProjectDependencies = AppProjectDependencies(project, android, mRocketXBean, mAllChangedProject) {
92+
pritlnDependencyGraph()
93+
}
8994

9095
appProject.gradle.taskGraph.addTaskExecutionListener(object : TaskExecutionListener {
9196
override fun beforeExecute(p0: Task) {
@@ -114,7 +119,7 @@ open class RocketXPlugin : Plugin<Project> {
114119
*/
115120
fun flatDirs() {
116121
val map = mutableMapOf<String, File>()
117-
map.put("dirs", File(getLocalMavenCacheDir()))
122+
map["dirs"] = File(getLocalMavenCacheDir())
118123
appProject.rootProject.allprojects {
119124
it.repositories.flatDir(map)
120125
}
@@ -130,8 +135,12 @@ open class RocketXPlugin : Plugin<Project> {
130135

131136
appProject.rootProject.allprojects.forEach {
132137
//剔除 app 和 rootProject
133-
if (hasAppPlugin(it) || it == appProject.rootProject || it.childProjects.size > 0) return@forEach
134-
if (mAllChangedProject?.contains(it.path)?.not() != false) return@forEach
138+
if (hasAppPlugin(it) || it == appProject.rootProject || it.childProjects.isNotEmpty()) {
139+
return@forEach
140+
}
141+
if (mAllChangedProject?.contains(it.path)?.not() != false) {
142+
return@forEach
143+
}
135144
var mLocalMaven: LocalMaven? = null
136145
val childProject = it.project
137146
var childAndroid: LibraryExtension? = null
@@ -141,14 +150,10 @@ open class RocketXPlugin : Plugin<Project> {
141150
}
142151
//android 子 module
143152
if (childAndroid != null) {
144-
mLocalMaven = AarFlatLocalMaven(childProject,
145-
this@RocketXPlugin,
146-
appProject,
147-
mAllChangedProject)
153+
mLocalMaven = AarFlatLocalMaven(childProject, this@RocketXPlugin, appProject, mAllChangedProject)
148154
} else if (hasJavaPlugin(childProject)) {
149155
//java 子 module
150-
mLocalMaven =
151-
JarFlatLocalMaven(childProject, this@RocketXPlugin, mAllChangedProject)
156+
mLocalMaven = JarFlatLocalMaven(childProject, this@RocketXPlugin, mAllChangedProject)
152157
}
153158
//需要上传到 localMaven
154159
mLocalMaven?.uploadLocalMaven()
@@ -184,29 +189,23 @@ open class RocketXPlugin : Plugin<Project> {
184189
}
185190
}
186191
//并行运行task
187-
appProject.gradle.startParameter.setParallelProjectExecutionEnabled(true)
192+
appProject.gradle.startParameter.isParallelProjectExecutionEnabled = true
188193
appProject.gradle.startParameter.maxWorkerCount += 4
189194
}
190195

191196

192197
//打印处理完的整个依赖图
193-
fun pritlnDependencyGraph() {
194-
mAppProjectDependencies.mAllChildProjectDependenciesList.forEach {
195-
LogUtil.d("======project name: ${it.project.name}==========")
196-
it.allConfigList.forEach {
197-
if (it.dependencies.size > 0) {
198-
LogUtil.d("=====Config name:${it.name} ===== ")
199-
it.dependencies.forEach {
200-
LogUtil.d("dependency:" + it.hashCode())
201-
LogUtil.d("dependency:$it")
202-
}
198+
private fun pritlnDependencyGraph() {
199+
mAppProjectDependencies.mAllChildProjectDependenciesList.forEach { it ->
200+
LogUtil.d("======project name: ${it.project.name}========== start")
201+
it.allConfigList.filter { it.dependencies.isNotEmpty() }.forEach { configuration ->
202+
LogUtil.d("======Config name:${configuration.name}")
203+
configuration.dependencies.forEach {
204+
LogUtil.d("dependency: $it ${it.hashCode()}")
203205
}
204206
}
205-
206-
LogUtil.d("======project name: ========== end")
207+
LogUtil.d("======project name: ${it.project.name}========== end \n")
207208
}
208209
}
209210

210-
}
211-
212-
211+
}

buildSrc/src/main/kotlin/plugin/utils/PluginUtil.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package plugin.utils
33
import org.gradle.api.Project
44
import plugin.RocketXPlugin
55
import java.io.File
6+
import java.util.*
67

78
/**
89
* description:
@@ -42,15 +43,15 @@ fun isEnable(curProject: Project): Boolean {
4243
//通过 startParameter 获取 FlavorBuildType
4344
fun getFlavorBuildType(appProject: Project): String {
4445
var flavorBuildType = ""
45-
val arg = appProject.gradle.startParameter?.taskRequests?.getOrNull(0)?.args?.getOrNull(0)
46+
val arg = appProject.gradle.startParameter.taskRequests.getOrNull(0)?.args?.getOrNull(0)
4647
if (!arg.isNullOrEmpty()) {
4748
var index = arg.indexOf(RocketXPlugin.ASSEMBLE)
4849
index = if (index > -1) index + RocketXPlugin.ASSEMBLE.length else 0
4950
flavorBuildType = arg.substring(index, arg.length)
5051
}
51-
if (flavorBuildType.length > 0) {
52+
if (flavorBuildType.isNotEmpty()) {
5253
flavorBuildType =
53-
flavorBuildType.substring(0, 1).toLowerCase() + flavorBuildType.substring(1)
54+
flavorBuildType.substring(0, 1).toLowerCase(Locale.ROOT) + flavorBuildType.substring(1)
5455
}
5556
return flavorBuildType
5657
}
@@ -63,18 +64,18 @@ fun getFlatAarName(project: Project): String {
6364
fun isCurProjectRun(appProject: Project): Boolean {
6465
var ret = false
6566
var projectPath = ""
66-
val arg = appProject.gradle.startParameter?.taskRequests?.getOrNull(0)?.args?.getOrNull(0)
67+
val arg = appProject.gradle.startParameter.taskRequests.getOrNull(0)?.args?.getOrNull(0)
6768
if (!arg.isNullOrEmpty()) {
6869
var index = arg.indexOf(RocketXPlugin.ASSEMBLE)
6970
index = if (index > 0) index - 1 else 0
7071
projectPath = arg.substring(0, index)
7172
}
72-
if (projectPath.length > 0) {
73+
if (projectPath.isNotEmpty()) {
7374
//使用 app 直接 run,currentDir 为项目目录没法使用,只能通过 截取 arg
7475
ret = appProject.path.equals(projectPath)
7576
}
7677
// 使用 assembledebug 命令需要这么区分
77-
if (appProject.gradle.startParameter?.currentDir?.absolutePath.equals(appProject.projectDir.absolutePath)) {
78+
if (appProject.gradle.startParameter.currentDir.absolutePath.equals(appProject.projectDir.absolutePath)) {
7879
ret = true
7980
}
8081

0 commit comments

Comments
 (0)