Here I will show you, how I managed to build and run an Android app via command line (Terminal, since I use Mac) using Gradle and how I start a resulting app on the device (Google Nexus 5 with Android 4.4.2) automatically. I had to solve two major problems to achieve this.
The first problem is with Gradle version: last version of Gradle is not compatible with the last version of Android Plugin.
The second problem is with custom task to run app on device: you have to put the correct package and activity names.
The final result looks like this:
|
~/Documents/Multiverse: $ gradle appStart |
Where Multiverse is the root folder of my project and the name of the project, appStart – custom Gradle task that builds and runs an app on device.
Gradle loads all dependencies, builds app, makes a lint check and starts and app on your device automatically. Yahoo! This is how it looks on Terminal:
|
pkg: /data/local/tmp/Multiverse-debug.apk Success :appStart Starting: Intent { cmp=com.alwawee.multiverse/com.alwawee.main.MainActivity } BUILD SUCCESSFUL Total time: 13.475 secs |
However, I should notice, that this works slower than just running via Eclipse: as you see it takes at least 13 seconds for a little project on Macbook Pro Retina Display Late 2012.
First of all you need to install a correct version of Gradle. If you just download the latest version, your Android plugin will not work. You have to get a version, for instance, 1.10, not 2.0. Also you need to setup PATH variable, so that you will have bin folder of Gradle and android sdks tools there:
|
~/Documents/Multiverse: $ vim ~/.bash_profile export PATH=/Users/Denis/gradle-1.10/bin:$PATH export PATH=/Users/Denis/android-sdks/platform-tools:$PATH export PATH=/Users/Denis/android-sdks/tools:$PATH ~/Documents/Multiverse: $ source ~/.bash_profile |
Then I created a gradle build file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.11.1' } } apply plugin: 'android' dependencies { compile files('libs/android-support-v4.jar') compile files('libs/androidannotations-api-3.0.1.jar') compile files('libs/commons-lang3-3.1.jar') compile files('libs/flurryAnalytics_3.4.0.jar') compile files('libs/libGoogleAnalyticsServices.jar') } android { compileSdkVersion 19 buildToolsVersion "19.1" } android { sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } androidTest.setRoot('tests') } } /*android { lintOptions { abortOnError false } }*/ task appStart(type: Exec, dependsOn: ':installDebug') { // linux, mac commandLine 'adb', 'shell', 'am', 'start', '-n', 'com.alwawee.multiverse/com.alwawee.main.MainActivity' // windows // commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'com.alwawee.multiverse/com.alwawee.main.MainActivity' } |
Here com.alwawee.multiverse is the package name of the application.
And com.alwawee.main.MainActivity is the full Activity name, that the application starts from. This is how my project tree looks like:

This is a part of the Manifest file:
|
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.alwawee.multiverse" android:versionCode="2" android:versionName="1.0.8" > ... <activity android:name="com.alwawee.main.MainActivity" android:label="@string/app_name"> ... |
At the end there is a custom task appStart. It is important to correctly write the package name before class name. I thought that the package name is the package name for MainActivity class. I was wrong. It’s a name for a whole app’s package name. You can find it at the root node of your Manifest file.
Notes on commented code: use abortOnError false if you have any serious problems with lint and don’t want to solve them. Uncomment the line about Windows, if you use Windows.
This is a StackOverflow question, I asked to reach this goal.