Skip to content

Commit

Permalink
feat:adb install first local device
Browse files Browse the repository at this point in the history
  • Loading branch information
chaojiong1zhang20230913 committed Dec 11, 2021
1 parent aaafc9a commit 0494330
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 26 deletions.
59 changes: 43 additions & 16 deletions buildSrc/src/main/kotlin/plugin/utils/InstallApkByAdb.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package plugin.utils

import com.android.build.gradle.AppExtension
import com.android.ddmlib.AndroidDebugBridge
import org.gradle.api.DefaultTask
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import plugin.RocketXPlugin
import plugin.localmaven.AarFlatLocalMaven
import java.io.File

/**
* description:
Expand All @@ -23,15 +22,14 @@ class InstallApkByAdb(val appProject: Project) {
if (isRunAssembleTask(appProject)) {
val android = appProject.extensions.getByType(AppExtension::class.java)
val installTask =
appProject.tasks.maybeCreate("rocketxInstallTask",
InstallApkTask::class.java)
appProject.tasks.maybeCreate("rocketxInstallTask", InstallApkTask::class.java)
installTask.android = android
android.applicationVariants.forEach {
getAppAssembleTask(RocketXPlugin.ASSEMBLE + it.flavorName.capitalize() + it.buildType.name.capitalize())?.let { taskProvider ->
taskProvider.configure{
it.finalizedBy(installTask)
}
taskProvider.configure {
it.finalizedBy(installTask)
}
}
}
}
}
Expand All @@ -47,22 +45,51 @@ class InstallApkByAdb(val appProject: Project) {


open class InstallApkTask : DefaultTask() {
lateinit var android:AppExtension
lateinit var android: AppExtension

@TaskAction
fun installApk() {
val adb = android.adbExecutable.absolutePath
val adb = android.adbExecutable.absolutePath

try {
project.exec {
it.commandLine(adb,
"install","-r",FileUtil.getApkLocalPath())

AndroidDebugBridge.initIfNeeded(false)
val bridge = AndroidDebugBridge.createBridge(android.adbExecutable.path, false)
var firstLocalDeviceSerinum = ""
bridge?.devices?.forEach {
if (!it.serialNumber.isNullOrEmpty()) {
firstLocalDeviceSerinum = it.serialNumber
return@forEach
}
}

if (firstLocalDeviceSerinum.isNullOrEmpty()) {
project.exec {
it.commandLine(adb, "install", "-r", FileUtil.getApkLocalPath())
}
} else {
project.exec {
it.commandLine(adb,
"-s",
firstLocalDeviceSerinum,
"install",
"-r",
FileUtil.getApkLocalPath())
}
}

project.exec {
it.commandLine(adb,"shell","monkey","-p",
android.defaultConfig.applicationId,"-c","android.intent.category.LAUNCHER","1")
it.commandLine(adb,
"shell",
"monkey",
"-p",
android.defaultConfig.applicationId,
"-c",
"android.intent.category.LAUNCHER",
"1")
}
}catch (e:Exception){
LogUtil.d("install fail:"+e.toString())
} catch (e: Exception) {
LogUtil.d("install fail:" + e.toString())
}

}
Expand Down
26 changes: 16 additions & 10 deletions buildSrc/src/main/kotlin/plugin/utils/PluginUtil.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@ fun isEnable(curProject: Project): Boolean {
}

//通过 startParameter 获取 FlavorBuildType
fun getFlavorBuildType(appProject: Project):String {
fun getFlavorBuildType(appProject: Project): String {
var flavorBuildType = ""
val arg = appProject.gradle.startParameter?.taskRequests?.getOrNull(0)?.args?.getOrNull(0)
if(!arg.isNullOrEmpty()) {
if (!arg.isNullOrEmpty()) {
var index = arg.indexOf(RocketXPlugin.ASSEMBLE)
index = if(index > -1) index + RocketXPlugin.ASSEMBLE.length else 0
flavorBuildType = arg.substring(index,arg.length)
index = if (index > -1) index + RocketXPlugin.ASSEMBLE.length else 0
flavorBuildType = arg.substring(index, arg.length)
}
if (flavorBuildType.length > 0) {
flavorBuildType =
Expand All @@ -57,20 +57,26 @@ fun getFlavorBuildType(appProject: Project):String {

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

fun isCurProjectRun(appProject: Project):Boolean {
fun isCurProjectRun(appProject: Project): Boolean {
var ret = false
var projectPath = ""
val arg = appProject.gradle.startParameter?.taskRequests?.getOrNull(0)?.args?.getOrNull(0)
if(!arg.isNullOrEmpty()) {
if (!arg.isNullOrEmpty()) {
var index = arg.indexOf(RocketXPlugin.ASSEMBLE)
index = if(index > 0) index - 1 else 0
projectPath = arg.substring(0,index)
index = if (index > 0) index - 1 else 0
projectPath = arg.substring(0, index)
}
if (projectPath.length > 0) {
ret = appProject.path.equals(projectPath)
//使用 app 直接 run,currentDir 为项目目录没法使用,只能通过 截取 arg
ret = appProject.path.equals(projectPath)
}
// 使用 assembledebug 命令需要这么区分
if (appProject.gradle.startParameter?.currentDir?.absolutePath.equals(appProject.projectDir.absolutePath)) {
ret = true
}

return ret
}

0 comments on commit 0494330

Please sign in to comment.