diff --git a/embedded_gradle.go b/embedded_gradle.go
index f51a71a..2671edb 100644
--- a/embedded_gradle.go
+++ b/embedded_gradle.go
@@ -42,7 +42,7 @@
         VariantName:    targetVariant.name,
         CleanTask:      project.path + ":clean",
         AssembleTask:   targetVariant.assemble.path,
-        AppID:          getApplicationId(targetVariant),
+        AppID:          getApplicationId(project, targetVariant),
         Activity:       getMainActivity(project),
         AbiFilters:     getAbiFilters(targetVariant),
         VariantOutputs: getVariantOutputs(targetVariant)
@@ -130,13 +130,31 @@
 }
 
 // Returns the application ID for the given variant.
-String getApplicationId(variant) {
+String getApplicationId(project, variant) {
     def suffix = variant.buildType.applicationIdSuffix
     if (suffix == null) {
         suffix = ""
     }
 
-    return variant.mergedFlavor.applicationId + suffix
+    def appId = variant.mergedFlavor.applicationId
+
+    // Fall back to AndroidManifest.xml if the applicationId is not explicitly defined.
+    // See the bottom notes at:
+    // http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
+    if (appId == null) {
+        appId = getApplicationIdFromManifest(project)
+    }
+
+    return appId + suffix
+}
+
+// Returns the application ID extracted from the AndroidManifest.xml file.
+String getApplicationIdFromManifest(project) {
+    def manifestFile = getAndroidManifestLocation(project)
+
+    // Parse the xml file and find the package name.
+    def manifest = new XmlSlurper().parse(manifestFile)
+    return manifest.'@package'.text()
 }
 
 String getMainActivity(project) {
diff --git a/madb_init.gradle b/madb_init.gradle
index 7d7879c..72dda92 100644
--- a/madb_init.gradle
+++ b/madb_init.gradle
@@ -33,7 +33,7 @@
         VariantName:    targetVariant.name,
         CleanTask:      project.path + ":clean",
         AssembleTask:   targetVariant.assemble.path,
-        AppID:          getApplicationId(targetVariant),
+        AppID:          getApplicationId(project, targetVariant),
         Activity:       getMainActivity(project),
         AbiFilters:     getAbiFilters(targetVariant),
         VariantOutputs: getVariantOutputs(targetVariant)
@@ -121,13 +121,31 @@
 }
 
 // Returns the application ID for the given variant.
-String getApplicationId(variant) {
+String getApplicationId(project, variant) {
     def suffix = variant.buildType.applicationIdSuffix
     if (suffix == null) {
         suffix = ""
     }
 
-    return variant.mergedFlavor.applicationId + suffix
+    def appId = variant.mergedFlavor.applicationId
+
+    // Fall back to AndroidManifest.xml if the applicationId is not explicitly defined.
+    // See the bottom notes at:
+    // http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename
+    if (appId == null) {
+        appId = getApplicationIdFromManifest(project)
+    }
+
+    return appId + suffix
+}
+
+// Returns the application ID extracted from the AndroidManifest.xml file.
+String getApplicationIdFromManifest(project) {
+    def manifestFile = getAndroidManifestLocation(project)
+
+    // Parse the xml file and find the package name.
+    def manifest = new XmlSlurper().parse(manifestFile)
+    return manifest.'@package'.text()
 }
 
 String getMainActivity(project) {
diff --git a/madb_test.go b/madb_test.go
index 6731496..7c4c946 100644
--- a/madb_test.go
+++ b/madb_test.go
@@ -308,6 +308,10 @@
 			variantKey{"testAndroidMultiFlavor/app", "", "proRelease"},
 			variantProperties{AppID: "io.v.testProjectId.pro", Activity: "io.v.testProjectPackage.LauncherActivity"},
 		},
+		{
+			variantKey{"testApplicationIdFallback", "", ""},
+			variantProperties{AppID: "io.v.testProjectPackage", Activity: "io.v.testProjectPackage.LauncherActivity"},
+		},
 	}
 
 	for i, test := range tests {
diff --git a/testdata/projects/testApplicationIdFallback/app/build.gradle b/testdata/projects/testApplicationIdFallback/app/build.gradle
new file mode 100644
index 0000000..1d4870c
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/app/build.gradle
@@ -0,0 +1,38 @@
+buildscript {
+    repositories {
+        jcenter()
+        mavenCentral()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.3.0'
+        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
+    }
+}
+
+apply plugin: 'android-sdk-manager'
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 23
+    buildToolsVersion "23.0.1"
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+    defaultConfig {
+        minSdkVersion 23
+        targetSdkVersion 23
+        versionCode 1
+        versionName "1.0"
+    }
+}
+
+repositories {
+    mavenCentral()
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+}
diff --git a/testdata/projects/testApplicationIdFallback/app/src/main/AndroidManifest.xml b/testdata/projects/testApplicationIdFallback/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..51518e6
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/app/src/main/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest
+    package="io.v.testProjectPackage"
+    xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <uses-sdk android:minSdkVersion="23"/>
+
+    <application
+        android:allowBackup="true"
+        android:label="Test Project"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity
+            android:name=".LauncherActivity"
+            android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+        <activity
+            android:name=".SecondActivity"
+            android:label="@string/app_name" >
+        </activity>
+        <activity android:name=".ThirdActivity" />
+    </application>
+
+</manifest>
diff --git a/testdata/projects/testApplicationIdFallback/build.gradle b/testdata/projects/testApplicationIdFallback/build.gradle
new file mode 100644
index 0000000..1b7886d
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/build.gradle
@@ -0,0 +1,19 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:1.3.0'
+
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+}
+
+allprojects {
+    repositories {
+        jcenter()
+    }
+}
diff --git a/testdata/projects/testApplicationIdFallback/gradle.properties b/testdata/projects/testApplicationIdFallback/gradle.properties
new file mode 100644
index 0000000..1d3591c
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/gradle.properties
@@ -0,0 +1,18 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
\ No newline at end of file
diff --git a/testdata/projects/testApplicationIdFallback/gradle/wrapper/gradle-wrapper.jar b/testdata/projects/testApplicationIdFallback/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8c0fb64
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/testdata/projects/testApplicationIdFallback/gradle/wrapper/gradle-wrapper.properties b/testdata/projects/testApplicationIdFallback/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..c83a3ba
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Nov 02 17:11:51 PST 2015
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
diff --git a/testdata/projects/testApplicationIdFallback/gradlew b/testdata/projects/testApplicationIdFallback/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/testdata/projects/testApplicationIdFallback/settings.gradle b/testdata/projects/testApplicationIdFallback/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/testdata/projects/testApplicationIdFallback/settings.gradle
@@ -0,0 +1 @@
+include ':app'
