问题的真正含义是什么——你可以通过命令行直接向 gradlew 发出任何命令来构建、打包和部署到设备吗?
9 回答
$ gradle installDebug
这会将调试构建 apk 推送到设备,但您必须手动启动应用程序。
由于您使用的是 Gradle,您可以简单地在build.gradle中添加您自己的任务
task appStart(type: Exec, dependsOn: 'installDebug') {
// linux
commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
// windows
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
然后在你的项目根目录中调用它
$ gradle appStart
更新:
如果您正在使用applicationIdSuffix ".debug"
,请仅添加.debug
到appId但保持活动不变:
'com.example.debug/com.example.MyActivity'
1.构建项目,将生成的apk安装到设备
# at the root dir of project
$ gradle installDebug
2.在设备上打开应用程序
$ adb shell am start -n yourpackagename/.activityname
一行语句:
构建项目并安装生成的 apk 并在设备上打开应用程序
$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
有三个命令可以完成此操作:
./gradlew assembleDebug #To build the project
adb install -r ./app/build/outputs/apk/app-debug.apk #To install it to the device
adb shell am start -n $PACKAGE/$PACKAGE.$ACTIVITY #To launch the application in the device
,其中 $PACKAGE 是开发包,$ACTIVITY 是要启动的活动(启动器活动)。
我一直在编写一个bash 脚本来执行此操作,并具有其他一些功能。
一种更灵活的方法是使用猴子:
task runDebug (type: Exec, dependsOn: 'installDebug') {
commandLine android.getAdbExe().toString(), "shell",
"monkey",
"-p", "your.package.name.debugsuffix",
"-c", "android.intent.category.LAUNCHER", "1"
}
这种方法的一些优点:
getAdbExe
不需要 adb 在路径上,而是使用指向 in 的 sdk 中的 adb 版本local.properties
。- 该
monkey
工具允许您发送启动器意图,因此您不需要知道活动的名称。
构建 -> 卸载旧版本 -> 安装新版本 -> 运行应用程序。
echo "Build application" && ./gradlew clean build &&
echo "Uninstall application" && adb uninstall [application package] &&
echo "Install application" && adb -d install app/build/outputs/apk/<build type>/[apk name].apk echo "Run application" &&
adb shell am start -n [application package]/.[application name]
或者,如果您想以调试类型安装和运行应用程序。
./gradlew installDebug && adb shell am start -n [application package]/.[application name]
task appStart(type: Exec, dependsOn: 'installDebug') {
commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
我编写此任务是为了能够在设备上安装和打开应用程序。由于我有多个不同buildTypes
的flavors
应用程序 ID,因此硬编码包名称是不可行的。所以我改为这样写:
android.applicationVariants.all { variant ->
task "open${variant.name.capitalize()}" {
dependsOn "install${variant.name.capitalize()}"
doLast {
exec {
commandLine "adb shell monkey -p ${variant.applicationId} -c android.intent.category.LAUNCHER 1".split(" ")
}
}
}
}
这将为您提供您已经拥有open{variant}
的每项任务。install{variant}