2013-06-26 70 views
77

問題真的在說 - 你能通過命令行直接發佈任何命令到gradlew來構建,打包並部署到設備嗎?你能通過命令行通過Gradle部署到設備嗎

+0

'gradle tasks'有助於查看開箱即用的任務 - 其中包括安裝(但不是如下所述啓動) – Dori

+0

命令行不是IDE特定的,.i.e。這種方式可以從Android Studio或基於Eclipse的IDE工作 –

回答

82
$ gradle installDebug 

這會將debug build apk推送到設備,但您必須手動啓動應用程序。

+2

如下所示,它已被重命名爲「gradle installDefaultFlavorDebug」 – durka42

+1

@ durka42這是唯一的情況,如果你使用風味 –

+2

我會說./gradlew iD而不是gradle iD – irudyak

63

1.構建項目,對設備

$ adb shell am start -n yourpackagename/.activityname 
+6

alias arun =「gradle installDebug; adb shell am start -n com.example.app/.activity.MainActivity」 –

+0

我無法在gradle中選擇installDebug。沒有合適的任務。它是否被重命名? –

+1

@JonasGröger它似乎已被重命名爲installDefaultFlavorDebug – durka42

70

安裝APK產生到設備

# at the root dir of project 
$ gradle installDebug 

2.打開應用程序由於使用的搖籃,你可以簡單的添加自己的任務在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'

+1

此外,如果您的活動不在「活動」中,則最後一個參數應該是「com.your.packagename/.path.relative.to.your.packagename.MyActivity''而不是」com.example/.MyActivity''你的包的根。 – Light

+0

如何運行單元測試? – ssk

6

一號線的句子:

構建項目&安裝生成APK &打開應用在設備

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

有三個命令來實現:

  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 script to do this,以及其他一些功能。

2
task appStart(type: Exec, dependsOn: 'installDebug') { 
    commandLine android.adbExe, 'shell', 'am', 'start', '-n', 'com.example/.MyActivity' 
} 
+0

運行的最佳解決方案 – Orgatres

3

更靈活的方式來做到這一點是通過使用猴子:

task runDebug (type: Exec, dependsOn: 'installDebug') { 
    commandLine android.getAdbExe().toString(), "shell", 
     "monkey", 
     "-p", "your.package.name.debugsuffix", 
     "-c", "android.intent.category.LAUNCHER", "1" 
} 

一些此方法的優點:

  • getAdbExe不需要亞行是路徑和使用local.properties中指出的sdk的adb版本。
  • monkey工具允許您發送啓動器意圖,因此您不需要知道您的活動的名稱。
+0

您可以改爲執行'adb shell start your.package.name.debugsuffix \ .Activity' –

+0

但是如果您不知道您的活動名稱? – 0xcaff

+1

然後,你不應該編寫構建文件。 – kevr

1

我寫了這個任務,以便能夠安裝並打開設備上的應用程序。由於我有多個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}任務。