Skip to content

Commit 0494330

Browse files
feat:adb install first local device
1 parent aaafc9a commit 0494330

2 files changed

Lines changed: 59 additions & 26 deletions

File tree

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

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package plugin.utils
22

33
import com.android.build.gradle.AppExtension
4+
import com.android.ddmlib.AndroidDebugBridge
45
import org.gradle.api.DefaultTask
56
import org.gradle.api.Project
67
import org.gradle.api.Task
78
import org.gradle.api.tasks.TaskAction
89
import org.gradle.api.tasks.TaskProvider
910
import plugin.RocketXPlugin
10-
import plugin.localmaven.AarFlatLocalMaven
11-
import java.io.File
1211

1312
/**
1413
* description:
@@ -23,15 +22,14 @@ class InstallApkByAdb(val appProject: Project) {
2322
if (isRunAssembleTask(appProject)) {
2423
val android = appProject.extensions.getByType(AppExtension::class.java)
2524
val installTask =
26-
appProject.tasks.maybeCreate("rocketxInstallTask",
27-
InstallApkTask::class.java)
25+
appProject.tasks.maybeCreate("rocketxInstallTask", InstallApkTask::class.java)
2826
installTask.android = android
2927
android.applicationVariants.forEach {
3028
getAppAssembleTask(RocketXPlugin.ASSEMBLE + it.flavorName.capitalize() + it.buildType.name.capitalize())?.let { taskProvider ->
31-
taskProvider.configure{
32-
it.finalizedBy(installTask)
33-
}
29+
taskProvider.configure {
30+
it.finalizedBy(installTask)
3431
}
32+
}
3533
}
3634
}
3735
}
@@ -47,22 +45,51 @@ class InstallApkByAdb(val appProject: Project) {
4745

4846

4947
open class InstallApkTask : DefaultTask() {
50-
lateinit var android:AppExtension
48+
lateinit var android: AppExtension
49+
5150
@TaskAction
5251
fun installApk() {
53-
val adb = android.adbExecutable.absolutePath
52+
val adb = android.adbExecutable.absolutePath
5453

5554
try {
56-
project.exec {
57-
it.commandLine(adb,
58-
"install","-r",FileUtil.getApkLocalPath())
55+
56+
AndroidDebugBridge.initIfNeeded(false)
57+
val bridge = AndroidDebugBridge.createBridge(android.adbExecutable.path, false)
58+
var firstLocalDeviceSerinum = ""
59+
bridge?.devices?.forEach {
60+
if (!it.serialNumber.isNullOrEmpty()) {
61+
firstLocalDeviceSerinum = it.serialNumber
62+
return@forEach
63+
}
5964
}
65+
66+
if (firstLocalDeviceSerinum.isNullOrEmpty()) {
67+
project.exec {
68+
it.commandLine(adb, "install", "-r", FileUtil.getApkLocalPath())
69+
}
70+
} else {
71+
project.exec {
72+
it.commandLine(adb,
73+
"-s",
74+
firstLocalDeviceSerinum,
75+
"install",
76+
"-r",
77+
FileUtil.getApkLocalPath())
78+
}
79+
}
80+
6081
project.exec {
61-
it.commandLine(adb,"shell","monkey","-p",
62-
android.defaultConfig.applicationId,"-c","android.intent.category.LAUNCHER","1")
82+
it.commandLine(adb,
83+
"shell",
84+
"monkey",
85+
"-p",
86+
android.defaultConfig.applicationId,
87+
"-c",
88+
"android.intent.category.LAUNCHER",
89+
"1")
6390
}
64-
}catch (e:Exception){
65-
LogUtil.d("install fail:"+e.toString())
91+
} catch (e: Exception) {
92+
LogUtil.d("install fail:" + e.toString())
6693
}
6794

6895
}

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ fun isEnable(curProject: Project): Boolean {
4040
}
4141

4242
//通过 startParameter 获取 FlavorBuildType
43-
fun getFlavorBuildType(appProject: Project):String {
43+
fun getFlavorBuildType(appProject: Project): String {
4444
var flavorBuildType = ""
4545
val arg = appProject.gradle.startParameter?.taskRequests?.getOrNull(0)?.args?.getOrNull(0)
46-
if(!arg.isNullOrEmpty()) {
46+
if (!arg.isNullOrEmpty()) {
4747
var index = arg.indexOf(RocketXPlugin.ASSEMBLE)
48-
index = if(index > -1) index + RocketXPlugin.ASSEMBLE.length else 0
49-
flavorBuildType = arg.substring(index,arg.length)
48+
index = if (index > -1) index + RocketXPlugin.ASSEMBLE.length else 0
49+
flavorBuildType = arg.substring(index, arg.length)
5050
}
5151
if (flavorBuildType.length > 0) {
5252
flavorBuildType =
@@ -57,20 +57,26 @@ fun getFlavorBuildType(appProject: Project):String {
5757

5858
//不能通过name ,需要通过 path ,有可能有多级目录(: 作为aar名字会有冲突不能用)
5959
fun getFlatAarName(project: Project): String {
60-
return project.path.substring(1).replace(":","-")
60+
return project.path.substring(1).replace(":", "-")
6161
}
6262

63-
fun isCurProjectRun(appProject: Project):Boolean {
63+
fun isCurProjectRun(appProject: Project): Boolean {
6464
var ret = false
6565
var projectPath = ""
6666
val arg = appProject.gradle.startParameter?.taskRequests?.getOrNull(0)?.args?.getOrNull(0)
67-
if(!arg.isNullOrEmpty()) {
67+
if (!arg.isNullOrEmpty()) {
6868
var index = arg.indexOf(RocketXPlugin.ASSEMBLE)
69-
index = if(index > 0) index - 1 else 0
70-
projectPath = arg.substring(0,index)
69+
index = if (index > 0) index - 1 else 0
70+
projectPath = arg.substring(0, index)
7171
}
7272
if (projectPath.length > 0) {
73-
ret = appProject.path.equals(projectPath)
73+
//使用 app 直接 run,currentDir 为项目目录没法使用,只能通过 截取 arg
74+
ret = appProject.path.equals(projectPath)
7475
}
76+
// 使用 assembledebug 命令需要这么区分
77+
if (appProject.gradle.startParameter?.currentDir?.absolutePath.equals(appProject.projectDir.absolutePath)) {
78+
ret = true
79+
}
80+
7581
return ret
7682
}

0 commit comments

Comments
 (0)