diff --git a/android/ScratchJr/.idea/misc.xml b/android/ScratchJr/.idea/misc.xml
index ba7052b..cbd46bd 100644
--- a/android/ScratchJr/.idea/misc.xml
+++ b/android/ScratchJr/.idea/misc.xml
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
   <component name="NullableNotNullManager">
     <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
     <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
@@ -24,7 +27,7 @@
       </value>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/android/ScratchJr/app/build.gradle b/android/ScratchJr/app/build.gradle
index 9d0e0d2..e7bce47 100644
--- a/android/ScratchJr/app/build.gradle
+++ b/android/ScratchJr/app/build.gradle
@@ -1,9 +1,8 @@
 apply plugin: 'com.android.application'
-apply plugin: 'com.google.gms.google-services'
 
 android {
     compileSdkVersion 27
-    buildToolsVersion "21.1.2"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         applicationId "org.scratchjr.android"
@@ -30,7 +29,8 @@ android {
 dependencies {
     compile fileTree(include: ['*.jar'], dir: 'libs')
     compile 'com.android.support:appcompat-v7:27.1.0'
-    compile 'com.google.android.gms:play-services-analytics:8.3.0'
+    compile 'com.android.support:support-v4:27.1.0'
+    compile 'com.google.android.gms:play-services-analytics:15.0.0'
 }
 
 def appModuleRootFolder = '.'
@@ -103,3 +103,5 @@ afterEvaluate {
 }
 
 clean.dependsOn('cleanScratchJrResources')
+
+apply plugin: 'com.google.gms.google-services'
diff --git a/android/ScratchJr/app/src/main/AndroidManifest.xml b/android/ScratchJr/app/src/main/AndroidManifest.xml
index 3b5beb6..b7dec29 100644
--- a/android/ScratchJr/app/src/main/AndroidManifest.xml
+++ b/android/ScratchJr/app/src/main/AndroidManifest.xml
@@ -12,11 +12,7 @@
     <uses-feature android:name="android.hardware.camera" android:required="false" />
     <uses-feature android:name="android.hardware.microphone" android:required="false" />
     
-    <supports-screens android:smallScreens="false"
-                      android:normalScreens="false"
-                      android:largeScreens="true"
-                      android:xlargeScreens="true"
-                      android:requiresSmallestWidthDp="500" />
+    <supports-screens android:requiresSmallestWidthDp="500" />
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
diff --git a/android/ScratchJr/build.gradle b/android/ScratchJr/build.gradle
index c81c113..c6e0221 100644
--- a/android/ScratchJr/build.gradle
+++ b/android/ScratchJr/build.gradle
@@ -9,7 +9,7 @@ buildscript {
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:2.2.1'
-        classpath 'com.google.gms:google-services:1.5.0-beta2'
+        classpath 'com.google.gms:google-services:3.1.0'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
diff --git a/bin/bundle-compile.sh b/bin/bundle-compile.sh
index 842bab0..8b24b4e 100755
--- a/bin/bundle-compile.sh
+++ b/bin/bundle-compile.sh
@@ -1,3 +1,3 @@
 #!/bin/sh
 cd ..;
-/usr/local/bin/node ./node_modules/webpack/bin/webpack.js
+/usr/local/bin/node ./node_modules/webpack/bin/webpack.js --mode=production
diff --git a/editions/free/android-resources/google-services.json b/editions/free/android-resources/google-services.json
index 85a592e..2537c7a 100644
--- a/editions/free/android-resources/google-services.json
+++ b/editions/free/android-resources/google-services.json
@@ -1 +1 @@
-{"project_info":{"project_id":"scratchjr-1118","project_number":"162006577143","name":"ScratchJr"},"client":[{"client_info":{"mobilesdk_app_id":"1:162006577143:android:30ace9185722a94d","client_id":"android:org.scratchjr.androidfree","client_type":1,"android_client_info":{"package_name":"org.scratchjr.androidfree"}},"oauth_client":[],"api_key":[],"services":{"analytics_service":{"status":2,"analytics_property":{"tracking_id":"UA-68375411-1"}},"cloud_messaging_service":{"status":1,"apns_config":[]},"appinvite_service":{"status":1,"other_platform_oauth_client":[]},"google_signin_service":{"status":1},"ads_service":{"status":1}}}],"client_info":[],"ARTIFACT_VERSION":"1"}
+{"project_info":{"project_id":"scratchjr-1118","project_number":"162006577143","name":"ScratchJr"},"client":[{"client_info":{"mobilesdk_app_id":"1:162006577143:android:30ace9185722a94d","client_id":"android:org.scratchjr.androidfree","client_type":1,"android_client_info":{"package_name":"org.scratchjr.androidfree"}},"oauth_client":[],"api_key":[{"current_key":""}],"services":{"analytics_service":{"status":2,"analytics_property":{"tracking_id":"UA-68375411-1"}},"cloud_messaging_service":{"status":1,"apns_config":[]},"appinvite_service":{"status":1,"other_platform_oauth_client":[]},"google_signin_service":{"status":1},"ads_service":{"status":1}}}],"client_info":[],"ARTIFACT_VERSION":"1"}