你可以通过命令行通过Gradle部署到设备上吗?

问题的真正含义是什么 – 你可以通过命令行直接发布任何命令来build立,打包和部署到设备吗?

  • gradlew在mergeDebugResources上build立冻结
  • 如何在build.gradle中检索ADB的路径
  • Gradle错误:只能在android studio中从事件分派线程写入访问
  • 通过Android Studio菜单和gradlew命令行运行lint之间的区别
  • 通过Android Studio菜单运行lint和gradlew命令行之间的区别
  • ./gradlew林特说“没有问题”,但分析 - >检查代码发现问题
  • Android Studio - 无法生成项目 - GradleConnectionException
  • 在Android Studio中找不到模块应用的Gradle build-info.xml
  •  $ gradle installDebug 

    这会将debug build 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.build立项目,安装生成的apk到设备

     # at the root dir of project $ gradle installDebug 

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

     $ adb shell am start -n yourpackagename/.activityname 

    一行句子:

    在设备上生成项目和安装生成的apk&Open应用程序

     $ ./gradlew installDebug && adb shell am start -n com.example/.activities.MainActivity 

    有三个命令来完成这个:

    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脚本来做到这一点 ,与其他一些function。

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

     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在path上,并使用local.properties指向的sdk的adb版本。
    • monkey工具允许你发送启动器的意图,所以你不需要知道你的活动的名称。

    任务appStart(types:Exec,dependsOn:'installDebug'){//所有平台commandLine android.adbExe,'shell','am','start','-n','com.example / .MyActivity'

    }

    我写了这个任务,以便能够安装并打开设备上的应用程序。 由于我有不同的应用程序标识的多个buildTypesflavors ,硬编码包名是不可行的。 所以我就这样写了:

     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}