这个问题的意思是:您是否可以通过命令行直接向gradlew发出任何命令来构建、打包和部署到设备?
这个问题的意思是:您是否可以通过命令行直接向gradlew发出任何命令来构建、打包和部署到设备?
$ gradle installDebug
这将把debug版本的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中,但不要更改activity:
'com.example.debug/com.example.MyActivity'
'com.your.packagename/.path.relative.to.your.packagename.MyActivity'
,而不是'com.example/.MyActivity'
。 - Light1. 构建项目,将生成的apk安装到设备上
# at the root dir of project
$ gradle installDebug
2. 在设备上打开应用
$ adb shell am start -n yourpackagename/.activityname
./gradlew installDevDebug
。这也可能会改变包名:am start -n com.example.example_dev/com.example.example.MainActivity
。这让我困惑了一段时间。 - bmaddy./gradlew assembleDebug #构建项目
adb install -r ./app/build/outputs/apk/app-debug.apk #将其安装到设备上
adb shell am start -n $PACKAGE/$PACKAGE.$ACTIVITY #在设备中启动应用程序
,其中$PACKAGE是开发包,$ACTIVITY是要启动的活动(启动器活动)。
一句话概括:
构建项目 & 安装生成的apk文件 & 在设备上打开应用程序
$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
构建 -> 卸载旧版本 -> 安装新版本 -> 运行应用程序。
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 runDebug (type: Exec, dependsOn: 'installDebug') {
commandLine android.getAdbExe().toString(), "shell",
"monkey",
"-p", "your.package.name.debugsuffix",
"-c", "android.intent.category.LAUNCHER", "1"
}
这种方法的一些优点:
getAdbExe
不需要 adb 在路径中,并使用 local.properties
指向的 sdk 中的 adb 版本。monkey
工具允许您发送启动器意图,因此无需知道您的活动名称。adb shell am start your.package.name.debugsuffix\.Activity
。 - Vikram Bodicherlaandroid.intent.category.LAUNCHER 1
,@0xcaff,你不需要知道活动。 - m3ndatask 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(" ")
}
}
}
}
install{variant}
任务的open{variant}
。
gradle tasks
命令有助于查看开箱即用的任务,其中包括安装(但不启动,如下所述)。 - Dori