90

问题的真正含义是什么——你可以通过命令行直接向 gradlew 发出任何命令来构建、打包和部署到设备吗?

4

9 回答 9

100
$ gradle installDebug

这会将调试构建 apk 推送到设备,但您必须手动启动应用程序。

于 2013-06-26T18:45:24.163 回答
76

由于您使用的是 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",请仅添加.debugappId但保持活动不变:

'com.example.debug/com.example.MyActivity'

于 2014-02-24T15:39:07.563 回答
68

1.构建项目,将生成的apk安装到设备

# at the root dir of project
$ gradle installDebug

2.在设备上打开应用程序

$ adb shell am start -n yourpackagename/.activityname
于 2013-06-29T06:56:38.580 回答
7

一行语句:

构建项目并安装生成的 apk 并在设备上打开应用程序

$ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity
于 2015-01-19T15:58:21.327 回答
7

有三个命令可以完成此操作:

  1. ./gradlew assembleDebug #To build the project

  2. adb install -r ./app/build/outputs/apk/app-debug.apk #To install it to the device

  3. adb shell am start -n $PACKAGE/$PACKAGE.$ACTIVITY #To launch the application in the device,其中 $PACKAGE 是开发包,$ACTIVITY 是要启动的活动(启动器活动)。

我一直在编写一个bash 脚本来执行此操作,并具有其他一些功能。

于 2015-07-18T16:53:02.037 回答
4

一种更灵活的方法是使用猴子:

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工具允许您发送启动器意图,因此您不需要知道活动的名称。
于 2016-07-30T20:44:34.573 回答
4

构建 -> 卸载旧版本 -> 安装新版本 -> 运行应用程序。

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]
于 2018-05-07T10:54:27.707 回答
2
task appStart(type: Exec, dependsOn: 'installDebug') {
    commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity'
}
于 2016-02-26T02:45:26.870 回答
2

我编写此任务是为了能够在设备上安装和打开应用程序。由于我有多个不同buildTypesflavors应用程序 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}

于 2017-03-29T07:21:39.063 回答