Bug 1255915 - Split --without-gradle bits from mobile/android/base/{moz.build,Makefile.in}. r=build-peer draft
authorNick Alexander <nalexander@mozilla.com>
Thu, 16 Nov 2017 11:37:18 -0800
changeset 699206 864a82ebf3f33094ea247d6f4a1d114a9e51eedf
parent 699205 dbc93ddd9b4892b60cb04f82997f07d1fb8d624b
child 740559 02e54dde41bfe57802fd23cfeb556395230ebb21
push id89490
push usernalexander@mozilla.com
push dateThu, 16 Nov 2017 19:55:07 +0000
reviewersbuild-peer
bugs1255915
milestone59.0a1
Bug 1255915 - Split --without-gradle bits from mobile/android/base/{moz.build,Makefile.in}. r=build-peer This is an elaborate deckchair re-arrangement, with just a tiny bit of polish to remove some of the (false) dependencies from the Gradle bits to the old moz.build bits. MozReview-Commit-ID: Royj8I1gA1
mobile/android/base/Makefile.in
mobile/android/base/moz.build
mobile/android/base/without-gradle.mk
mobile/android/base/without-gradle.mozbuild
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -1,351 +1,23 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # We call mach -> Make -> gradle -> mach, which races to find and
 # create .mozconfig files and to generate targets.
 ifdef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
 .NOTPARALLEL:
-endif
 
-GARBAGE += \
-  classes.dex  \
-  gecko.ap_  \
-  res/values/strings.xml \
-  res/raw/browsersearch.json \
-  res/raw/suggestedsites.json \
-  .aapt.deps \
-  GeneratedJNINatives.h \
-  GeneratedJNIWrappers.cpp \
-  GeneratedJNIWrappers.h \
-  FennecJNINatives.h \
-  FennecJNIWrappers.cpp \
-  FennecJNIWrappers.h \
-  $(NULL)
-
-GARBAGE_DIRS += classes db jars res sync services generated
-
-gradle_dir := $(topobjdir)/gradle/build/mobile/android
+include $(topsrcdir)/config/rules.mk
+endif # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
 
 ifndef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
-
-# The bootclasspath is functionally identical to the classpath, but allows the
-# classes given to redefine classes in core packages, such as java.lang.
-# android.jar is here as it provides Android's definition of the Java Standard
-# Library. The compatability lib here tweaks a few of the core classes to paint
-# over changes in behaviour between versions.
-JAVA_BOOTCLASSPATH := \
-    $(ANDROID_SDK)/android.jar \
-    $(NULL)
-
-JAVA_BOOTCLASSPATH := $(subst $(NULL) ,:,$(strip $(JAVA_BOOTCLASSPATH)))
-
-JAVA_CLASSPATH += \
-    $(ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB) \
-    $(ANDROID_SUPPORT_V4_AAR_LIB) \
-    $(ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB) \
-    $(ANDROID_APPCOMPAT_V7_AAR_LIB) \
-    $(ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_LIB) \
-    $(ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_LIB) \
-    $(ANDROID_CARDVIEW_V7_AAR_LIB) \
-    $(ANDROID_DESIGN_AAR_LIB) \
-    $(ANDROID_RECYCLERVIEW_V7_AAR_LIB) \
-    $(ANDROID_CUSTOMTABS_AAR_LIB) \
-    $(ANDROID_PALETTE_V7_AAR_LIB) \
-    $(NULL)
-
-# If native devices are enabled, add Google Play Services and some of the v7
-# compat libraries.
-ifdef MOZ_NATIVE_DEVICES
-    JAVA_CLASSPATH += \
-        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_CAST_AAR_LIB) \
-        $(ANDROID_MEDIAROUTER_V7_AAR_LIB) \
-        $(ANDROID_MEDIAROUTER_V7_AAR_INTERNAL_LIB) \
-        $(NULL)
-endif
-
-ifdef MOZ_ANDROID_GCM
-    JAVA_CLASSPATH += \
-        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_GCM_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_LIB) \
-        $(NULL)
-endif
-
-ifdef MOZ_INSTALL_TRACKING
-    JAVA_CLASSPATH += \
-        $(ANDROID_PLAY_SERVICES_ADS_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
-        $(NULL)
-endif
-
-# MOZ_ANDROID_MMA requires MOZ_ANDROID_GCM and MOZ_NATIVE_DEVICES,
-# which take care of the Play Services requirements in JAVA_CLASSPATH.
-# Based on the import of
-# `com.google.android.gms.ads.identifier.AdvertisingIdClient` in
-# `com.leanplum.internal.Util` one would assume that
-# `play-services-ads` is required, by in version 8.4.0 (at least) that
-# class is defined in `play-services-basement`.  Therefore, unlike
-# MOZ_INSTALL_TRACKING, we don't need to depend on
-# `play-services-ads`.
-
-JAVA_CLASSPATH := $(subst $(NULL) ,:,$(strip $(JAVA_CLASSPATH)))
-
-# Library jars that we're bundling: these are subject to Proguard before inclusion
-# into classes.dex.
-java_bundled_libs := \
-    $(ANDROID_SUPPORT_V4_AAR_LIB) \
-    $(ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB) \
-    $(ANDROID_APPCOMPAT_V7_AAR_LIB) \
-    $(ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_LIB) \
-    $(ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_LIB) \
-    $(ANDROID_CARDVIEW_V7_AAR_LIB) \
-    $(ANDROID_DESIGN_AAR_LIB) \
-    $(ANDROID_RECYCLERVIEW_V7_AAR_LIB) \
-    $(ANDROID_CUSTOMTABS_AAR_LIB) \
-    $(ANDROID_PALETTE_V7_AAR_LIB) \
-    $(NULL)
-
-ifdef MOZ_NATIVE_DEVICES
-    java_bundled_libs += \
-        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_CAST_AAR_LIB) \
-        $(ANDROID_MEDIAROUTER_V7_AAR_LIB) \
-        $(ANDROID_MEDIAROUTER_V7_AAR_INTERNAL_LIB) \
-        $(NULL)
-endif
-
-ifdef MOZ_ANDROID_GCM
-    java_bundled_libs += \
-        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_GCM_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_LIB) \
-        $(NULL)
-endif
-
-ifdef MOZ_INSTALL_TRACKING
-    java_bundled_libs += \
-        $(ANDROID_PLAY_SERVICES_ADS_AAR_LIB) \
-        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
-        $(NULL)
-endif
-
-# MOZ_ANDROID_MMA requires MOZ_ANDROID_GCM and MOZ_NATIVE_DEVICES,
-# which take care of the Play Services requirements in
-# java_bundled_libs.  See the note above.
-
-# uniq purloined from http://stackoverflow.com/a/16151140.
-uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
-
-java_bundled_libs := $(call uniq,$(java_bundled_libs))
-java_bundled_libs := $(subst $(NULL) ,:,$(strip $(java_bundled_libs)))
-
-GECKOVIEW_JARS = \
-  constants.jar \
-  gecko-R.jar \
-  gecko-mozglue.jar \
-  gecko-util.jar \
-  gecko-view.jar \
-  sync-thirdparty.jar \
-  $(NULL)
-
-ifdef MOZ_ANDROID_HLS_SUPPORT
-GECKOVIEW_JARS += exoplayer2.jar
-endif
-
-ifdef MOZ_WEBRTC
-GECKOVIEW_JARS += webrtc.jar
-endif
-
-ifdef MOZ_INSTALL_TRACKING
-GECKOVIEW_JARS += gecko-thirdparty-adjust_sdk.jar
-endif
-
-ifdef MOZ_ANDROID_MMA
-GECKOVIEW_JARS += gecko-thirdparty-leanplum_sdk.jar
-endif
-
-FENNEC_JARS = \
-  gecko-browser.jar \
-  gecko-thirdparty.jar \
-  services.jar \
-  $(NULL)
-
-ifdef MOZ_ANDROID_MLS_STUMBLER
-FENNEC_JARS += ../stumbler/stumbler.jar
-endif
-
-geckoview_jars_classpath := $(subst $(NULL) ,:,$(strip $(GECKOVIEW_JARS)))
-
-# All the jars we're compiling from source. (not to be confused with
-# java_bundled_libs, which holds the jars which we're including as binaries).
-ALL_JARS = \
-  $(GECKOVIEW_JARS) \
-  $(FENNEC_JARS) \
-  $(NULL)
-
-# The list of jars in Java classpath notation (colon-separated).
-all_jars_classpath := $(subst $(NULL) ,:,$(strip $(ALL_JARS)))
-
-include $(topsrcdir)/config/config.mk
-
-library_jars := \
-    $(ANDROID_SDK)/android.jar \
-    $(NULL)
-
-# Android 23 (Marshmallow) deprecated a part of the Android platform, namely the
-# org.apache.http package.  Fennec removed all code that referenced said package
-# in order to easily ship to Android 23 devices (and, by extension, all devices
-# before Android 23).
-#
-# Google did not remove all code that referenced said package in their own
-# com.google.android.gms namespace!  It turns out that the org.apache.http
-# package is not removed, only deprecated and hidden by default.  Google added a
-# a `useLibrary` Gradle directive that allows legacy code to reference the
-# package, which is still (hidden) in the Android 23 platform.
-#
-# Fennec code doesn't need to compile against the deprecated package, since our
-# code doesn't reference the package anymore.  However, we do need to Proguard
-# against the deprecated package.  If we don't, Proguard -- which is a global
-# optimization -- sees Google libraries referencing "non-existent" libraries and
-# complains.  The solution is to mimic the `useLibraries` directive by declaring
-# the legacy package as a provided library jar.
-#
-# See https://bugzilla.mozilla.org/show_bug.cgi?id=1233238#c19 for symptoms and
-# more discussion.
-#
-# MOZ_ANDROID_MMA requires MOZ_INSTALL_TRACKING, so we don't need a
-# separate clause for MMA (Leanplum) support.
-ifdef MOZ_INSTALL_TRACKING
-library_jars += $(ANDROID_SDK)/optional/org.apache.http.legacy.jar
-endif # MOZ_INSTALL_TRACKING
-
-library_jars := $(subst $(NULL) ,:,$(strip $(library_jars)))
-
-endif # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
-
-ifdef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
-define gradle_command
-$(1): $(2)
-	@$$(TOUCH) $$@
-	$$(topsrcdir)/mach android assemble-app
-endef
-
-# .gradle.deps: .aapt.deps FORCE
-$(eval $(call gradle_command,.gradle.deps,.aapt.deps FORCE))
-
-classes.dex: .gradle.deps
-	$(REPORT_BUILD)
-	cp $(gradle_dir)/app/intermediates/transforms/dexMerger/officialWithoutGeckoBinariesNoMinApiPhoton/debug/0/classes.dex classes.dex
-
-GeneratedJNIWrappers.cpp GeneratedJNIWrappers.h GeneratedJNINatives.h : .gradle.deps
-	$(REPORT_BUILD)
-
-FennecJNIWrappers.cpp FennecJNIWrappers.h FennecJNINatives.h: .gradle.deps
-	$(REPORT_BUILD)
-
-else # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
-classes.dex: .proguard.deps
-	$(REPORT_BUILD)
-	$(DX) --dex --output=classes.dex --force-jumbo jars-proguarded
-
-ifdef MOZ_DISABLE_PROGUARD
-  PROGUARD_PASSES=0
-else
-  ifdef MOZ_DEBUG
-    PROGUARD_PASSES=1
-  else
-    ifndef MOZILLA_OFFICIAL
-      PROGUARD_PASSES=1
-    else
-      PROGUARD_PASSES=6
-    endif
-  endif
-endif
-
-proguard_config_dir=$(topsrcdir)/mobile/android/config/proguard
-
-# First, we delete debugging information from libraries. Having line-number
-# information for libraries for which we lack the source isn't useful, so this
-# saves us a bit of space. Importantly, Proguard has a bug causing it to
-# sometimes corrupt this information if present (which it does for some of the
-# included libraries). This corruption prevents dex from completing, so we need
-# to get rid of it.  This prevents us from seeing line numbers in stack traces
-# for stack frames inside libraries.
-#
-# This step can occur much earlier than the main Proguard pass: it needs only
-# gecko-R.jar to have been compiled (as that's where the library R.java files
-# end up), but it does block the main Proguard pass.
-.bundled.proguard.deps: gecko-R.jar $(proguard_config_dir)/strip-libs.cfg $(PROGUARD_JAR)
-	$(REPORT_BUILD)
-	@$(TOUCH) $@
-	$(JAVA) \
-		-Xmx512m -Xms128m \
-		-jar $(PROGUARD_JAR) \
-		@$(proguard_config_dir)/strip-libs.cfg \
-		-injars $(subst ::,:,$(java_bundled_libs))\
-		-outjars bundled-jars-nodebug \
-		-libraryjars $(library_jars):gecko-R.jar
-
-# We touch the target file before invoking Proguard so that Proguard's
-# outputs are fresher than the target, preventing a subsequent
-# invocation from thinking Proguard's outputs are stale.  This is safe
-# because Make removes the target file if any recipe command fails.
-.proguard.deps: .bundled.proguard.deps $(ALL_JARS) $(proguard_config_dir)/proguard.cfg $(PROGUARD_JAR)
-	$(REPORT_BUILD)
-	@$(TOUCH) $@
-	$(JAVA) \
-		-Xmx512m -Xms128m \
-		-jar $(PROGUARD_JAR) \
-		@$(proguard_config_dir)/proguard.cfg \
-		-optimizationpasses $(PROGUARD_PASSES) \
-		-injars $(subst ::,:,$(all_jars_classpath)):bundled-jars-nodebug \
-		-outjars jars-proguarded \
-		-libraryjars $(library_jars)
-
-ANNOTATION_PROCESSOR_JAR_FILES := $(abspath $(DEPTH)/build/annotationProcessors/annotationProcessors.jar)
-
-# This annotation processing step also generates
-# GeneratedJNIWrappers.h and GeneratedJNINatives.h
-GeneratedJNIWrappers.cpp: $(ANNOTATION_PROCESSOR_JAR_FILES) $(GECKOVIEW_JARS)
-	$(JAVA) -classpath $(geckoview_jars_classpath):$(JAVA_BOOTCLASSPATH):$(JAVA_CLASSPATH):$(ANNOTATION_PROCESSOR_JAR_FILES) \
-		org.mozilla.gecko.annotationProcessors.AnnotationProcessor \
-		Generated $(GECKOVIEW_JARS)
-
-# This annotation processing step also generates
-# FennecJNIWrappers.h and FennecJNINatives.h
-FennecJNIWrappers.cpp: $(ANNOTATION_PROCESSOR_JAR_FILES) $(FENNEC_JARS)
-	$(JAVA) -classpath $(all_jars_classpath):$(JAVA_BOOTCLASSPATH):$(JAVA_CLASSPATH):$(ANNOTATION_PROCESSOR_JAR_FILES) \
-		org.mozilla.gecko.annotationProcessors.AnnotationProcessor \
-		Fennec $(FENNEC_JARS)
-
-endif # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
-
-include $(topsrcdir)/config/rules.mk
-
-not_android_res_files := \
-  *.mkdir.done* \
-  *.DS_Store* \
-  *\#* \
-  *.rej \
-  *.orig \
-  $(NULL)
-
-# This uses the fact that Android resource directories list all
-# resource files one subdirectory below the parent resource directory.
-android_res_files := $(filter-out $(not_android_res_files),$(wildcard $(addsuffix /*,$(wildcard $(addsuffix /*,$(ANDROID_RES_DIRS))))))
-
-$(ANDROID_GENERATED_RESFILES): $(call mkdir_deps,$(sort $(dir $(ANDROID_GENERATED_RESFILES))))
+include $(topsrcdir)/mobile/android/base/without-gradle.mk
+endif # !MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
 
 # [Comment 1/3] We don't have correct dependencies for strings.xml at
 # this point, so we always recursively invoke the submake to check the
 # dependencies.  Sigh.  And, with multilocale builds, there will be
 # multiple strings.xml files, and we need to rebuild gecko.ap_ if any
 # of them change.  But!  mobile/android/base/locales does not have
 # enough information to actually build res/values/strings.xml during a
 # language repack.  So rather than adding rules into the main
@@ -360,147 +32,58 @@ android_res_files := $(filter-out $(not_
 # if any recipe command fails. It is crucial that the sub-Make touch
 # the target files (those depending on .locales.deps) only when there
 # contents have changed; otherwise, this will force rebuild them as
 # part of every build.
 .locales.deps: FORCE
 	$(TOUCH) $@
 	$(MAKE) -C locales
 
-
 # This .deps pattern saves an invocation of the sub-Make: the single
 # invocation generates strings.xml, browsersearch.json, and
 # suggestedsites.json. The trailing semi-colon defines an empty
 # recipe: defining no recipe at all causes Make to treat the target
 # differently, in a way that defeats our dependencies.
 res/values/strings.xml: .locales.deps ;
 res/raw/browsersearch.json: .locales.deps ;
 res/raw/suggestedsites.json: .locales.deps ;
 
-all_resources = \
-  AndroidManifest.xml \
-  $(android_res_files) \
-  $(ANDROID_GENERATED_RESFILES) \
-  $(NULL)
-
-# All of generated/org/mozilla/gecko/R.java, gecko.ap_, and R.txt are
-# produced by aapt; this saves aapt invocations.  The trailing
-# semi-colon defines an empty recipe; defining no recipe at all causes
-# Make to treat the target differently, in a way that defeats our
-# dependencies.
-
-generated/org/mozilla/gecko/R.java: .aapt.deps ;
-
-# Only add libraries that contain resources here. We (unecessarily) generate an identical R.java which
-# is copied into each of these locations, and each of these files contains thousands of fields.
-# Each unnecessary copy therefore wastes unnecessary fields in the output dex file.
-# Note: usually proguard will help clean this up after the fact, but having too many fields will cause
-# dexing to fail, regardless of any later optimisations proguard could later make to bring us back
-# under the limit.
-# Ideally we would fix our aapt invocations to correctly generate minimal copies of R.java for each
-# package, but that seems redundant since gradle builds are able to correctly generate these files.
-
-# If native devices are enabled, add Google Play Services, build their resources
-# (no resources) generated/android/support/v4/R.java: .aapt.deps ;
-generated/android/support/v7/appcompat/R.java: .aapt.deps ;
-# (no resources) generated/android/support/graphics/drawable/animated/R.java: .aapt.deps ;
-# (no resources) generated/android/support/graphics/drawable/R.java: .aapt.deps ;
-generated/android/support/v7/cardview/R.java: .aapt.deps ;
-generated/android/support/design/R.java: .aapt.deps ;
-generated/android/support/v7/mediarouter/R.java: .aapt.deps ;
-generated/android/support/v7/recyclerview/R.java: .aapt.deps ;
-# (no resources) generated/android/support/customtabs/R.java: .aapt.deps ;
-# (no resources) generated/android/support/v7/palette/R.java: .aapt.deps ;
-generated/com/google/android/gms/R.java: .aapt.deps ;
-generated/com/google/android/gms/ads/R.java: .aapt.deps ;
-generated/com/google/android/gms/base/R.java: .aapt.deps ;
-generated/com/google/android/gms/cast/R.java: .aapt.deps ;
-# (no resources) generated/com/google/android/gms/gcm/R.java: .aapt.deps ;
-# (no resources) generated/com/google/android/gms/measurement/R.java: .aapt.deps ;
-
-gecko.ap_: .aapt.deps ;
-R.txt: .aapt.deps ;
+ifdef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
 
-# [Comment 2/3] This tom-foolery provides a target that forces a
-# rebuild of gecko.ap_.  This is used during packaging to ensure that
-# resources are fresh.  The alternative would be complicated; see
-# [Comment 1/3].
-
-gecko-nodeps/R.java: .aapt.nodeps ;
-gecko-nodeps.ap_: .aapt.nodeps ;
-gecko-nodeps/R.txt: .aapt.nodeps ;
-
-# This ignores the default set of resources ignored by aapt, plus
-# files starting with '#'.  (Emacs produces temp files named #temp#.)
-# This doesn't actually set the environment variable; it's used as a
-# parameter in the aapt invocation below.  Consider updating
-# not_android_res_files as well.
-
-ANDROID_AAPT_IGNORE := !.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~:\#*:*.rej:*.orig
-
-# 1: target file.
-# 2: dependencies.
-# 3: name of ap_ file to write.
-# 4: directory to write R.java into.
-# 5: directory to write R.txt into.
-# We touch the target file before invoking aapt so that aapt's outputs
-# are fresher than the target, preventing a subsequent invocation from
-# thinking aapt's outputs are stale.  This is safe because Make
-# removes the target file if any recipe command fails.
-
-define aapt_command
-$(1): $$(call mkdir_deps,$(filter-out ./,$(dir $(3) $(4) $(5)))) $(2)
+define gradle_command
+$(1): $(2)
 	@$$(TOUCH) $$@
-	$$(AAPT) package -f -m \
-		-M AndroidManifest.xml \
-		-I $(ANDROID_SDK)/android.jar \
-		$(if $(MOZ_ANDROID_MAX_SDK_VERSION),--max-res-version $(MOZ_ANDROID_MAX_SDK_VERSION),) \
-		--auto-add-overlay \
-		$$(addprefix -S ,$$(ANDROID_RES_DIRS)) \
-		$$(addprefix -A ,$$(ANDROID_ASSETS_DIRS)) \
-		$(if $(ANDROID_EXTRA_PACKAGES),--extra-packages $$(subst $$(NULL) ,:,$$(strip $$(ANDROID_EXTRA_PACKAGES)))) \
-		$(if $(ANDROID_EXTRA_RES_DIRS),$$(addprefix -S ,$$(ANDROID_EXTRA_RES_DIRS))) \
-		--custom-package org.mozilla.gecko \
-		--no-version-vectors \
-		-F $(3) \
-		-J $(4) \
-		--output-text-symbols $(5) \
-		--ignore-assets "$$(ANDROID_AAPT_IGNORE)"
+	$$(topsrcdir)/mach android assemble-app
 endef
 
-# [Comment 3/3] The first of these rules is used during regular
-# builds.  The second writes an ap_ file that is only used during
-# packaging.  It doesn't write the normal ap_, or R.java, since we
-# don't want the packaging step to write anything that would make a
-# further no-op build do work.  See also
-# toolkit/mozapps/installer/packager.mk.
+# .gradle.deps: AndroidManifest.xml $(constants_PP_JAVAFILES) $(ANDROID_GENERATED_RESFILES) FORCE
+$(eval $(call gradle_command,.gradle.deps,AndroidManifest.xml $(constants_PP_JAVAFILES) $(ANDROID_GENERATED_RESFILES) FORCE))
 
-# .aapt.deps: $(all_resources)
-$(eval $(call aapt_command,.aapt.deps,$(all_resources),gecko.ap_,generated/,./))
+classes.dex: .gradle.deps
+	$(REPORT_BUILD)
+	cp $(topobjdir)/gradle/build/mobile/android/app/intermediates/transforms/dexMerger/officialWithoutGeckoBinariesNoMinApiPhoton/debug/0/classes.dex classes.dex
 
-ifdef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
+GeneratedJNIWrappers.cpp GeneratedJNIWrappers.h GeneratedJNINatives.h : .gradle.deps
+	$(REPORT_BUILD)
+
+FennecJNIWrappers.cpp FennecJNIWrappers.h FennecJNINatives.h: .gradle.deps
+	$(REPORT_BUILD)
 
 # It's not quite "no dependencies": nodeps means that it doesn't
 # depend on the generated resources that incorporate l10n, principally
 # strings.xml.
 
 # .gradle.nodeps: AndroidManifest.xml generated/preprocessed/org/mozilla/gecko/AppConstants.java ... FORCE
 $(eval $(call gradle_command,.gradle.nodeps,AndroidManifest.xml $(constants_PP_JAVAFILES) FORCE))
 
-.aapt.nodeps: .gradle.nodeps FORCE
-	@$(TOUCH) $@
-	cp $(GRADLE_ANDROID_APP_APK) gecko-nodeps.ap_
-	cp $(gradle_dir)/app/intermediates/transforms/dexMerger/officialWithoutGeckoBinariesNoMinApiPhoton/debug/0/classes.dex classes.dex
-else
-# .aapt.nodeps: AndroidManifest.xml FORCE
-$(eval $(call aapt_command,.aapt.nodeps,AndroidManifest.xml FORCE,gecko-nodeps.ap_,gecko-nodeps/,gecko-nodeps/))
-endif
+gecko-nodeps.ap_: .gradle.nodeps FORCE
+	cp $(GRADLE_ANDROID_APP_APK) $@
+	cp $(topobjdir)/gradle/build/mobile/android/app/intermediates/transforms/dexMerger/officialWithoutGeckoBinariesNoMinApiPhoton/debug/0/classes.dex classes.dex
 
-# Override the Java settings with some specific android settings
-include $(topsrcdir)/config/android-common.mk
+endif # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
 
 update-generated-wrappers:
 	@cp $(CURDIR)/GeneratedJNIWrappers.cpp \
 	    $(CURDIR)/GeneratedJNIWrappers.h \
 	    $(CURDIR)/GeneratedJNINatives.h $(topsrcdir)/widget/android
 	@echo Updated generated JNI code
 
 update-fennec-wrappers:
@@ -596,46 +179,8 @@ libs:: FennecJNIWrappers.cpp
 	  echo '  make -C $(CURDIR) update-fennec-wrappers' && \
 	  echo && \
 	  echo '* Repeat the build, and check in any changes.       *' && \
 	  echo '*****************************************************' && \
 	  exit 1)
 
 libs:: classes.dex
 	$(INSTALL) classes.dex $(FINAL_TARGET)
-
-ifndef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
-
-# Generate Java binder interfaces from AIDL files.
-GECKOVIEW_AIDLS = \
-  org/mozilla/gecko/IGeckoEditableChild.aidl \
-  org/mozilla/gecko/IGeckoEditableParent.aidl \
-  org/mozilla/gecko/gfx/ISurfaceAllocator.aidl \
-  org/mozilla/gecko/media/ICodec.aidl \
-  org/mozilla/gecko/media/ICodecCallbacks.aidl \
-  org/mozilla/gecko/media/IMediaDrmBridge.aidl \
-  org/mozilla/gecko/media/IMediaDrmBridgeCallbacks.aidl \
-  org/mozilla/gecko/media/IMediaManager.aidl \
-  org/mozilla/gecko/process/IChildProcess.aidl \
-  org/mozilla/gecko/process/IProcessManager.aidl \
-  org/mozilla/gecko/util/GeckoBundle.aidl \
-  $(NULL)
-
-geckoview_aidl_src_path := $(topsrcdir)/mobile/android/geckoview/src/main/aidl
-geckoview_aidl_target_path := generated
-geckoview_aidl_targets := $(addprefix $(geckoview_aidl_target_path)/,$(patsubst %.aidl,%.java,$(GECKOVIEW_AIDLS:.java=)))
-
-$(geckoview_aidl_targets): $(geckoview_aidl_target_path)/%.java: $(geckoview_aidl_src_path)/%.aidl
-	@echo "Processing AIDL: $< => $@"
-	$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(geckoview_aidl_src_path) -o$(geckoview_aidl_target_path) $<
-
-FENNEC_AIDLS = \
-  $(NULL)
-
-fennec_aidl_src_path := $(srcdir)/aidl
-fennec_aidl_target_path := generated
-fennec_aidl_targets := $(addprefix $(fennec_aidl_target_path)/,$(patsubst %.aidl,%.java,$(FENNEC_AIDLS:.java=)))
-
-$(fennec_aidl_targets): $(fennec_aidl_target_path)/%.java: $(fennec_aidl_src_path)/%.aidl
-	@echo "Processing AIDL: $< => $@"
-	$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(fennec_aidl_src_path) -I$(geckoview_aidl_src_path) -o$(fennec_aidl_target_path) $<
-
-endif # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -135,1261 +135,18 @@ y.script = 'generate_build_config.py:gen
 y.inputs += ['AppConstants.java.in']
 y = GENERATED_FILES['generated/preprocessed/org/mozilla/gecko/MmaConstants.java']
 y.script = 'generate_build_config.py:generate_java'
 y.inputs += ['MmaConstants.java.in']
 z = GENERATED_FILES['AndroidManifest.xml']
 z.script = 'generate_build_config.py:generate_android_manifest'
 z.inputs += ['AndroidManifest.xml.in']
 
-include('android-services.mozbuild')
-
-geckoview_source_dir = TOPSRCDIR + '/mobile/android/geckoview/src/main/'
-geckoview_thirdparty_source_dir = TOPSRCDIR + '/mobile/android/geckoview/src/thirdparty/'
-thirdparty_source_dir = TOPSRCDIR + '/mobile/android/thirdparty/'
-
-constants_jar = add_java_jar('constants')
-constants_jar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
-    'annotation/BuildFlag.java',
-    'annotation/JNITarget.java',
-    'annotation/ReflectionTarget.java',
-    'annotation/RobocopTarget.java',
-    'annotation/WebRTCJNITarget.java',
-    'annotation/WrapForJNI.java',
-    'SysInfo.java',
-]]
-constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
-    'adjust/AdjustHelperInterface.java',
-    'adjust/AttributionHelperListener.java',
-    'db/BrowserContract.java',
-    'LocaleManager.java',
-    'Locales.java',
-    'mma/MmaInterface.java',
-]]
-constants_jar.generated_sources = [
-    '../geckoview/generated/preprocessed/org/mozilla/geckoview/BuildConfig.java',
-    'generated/preprocessed/org/mozilla/gecko/AdjustConstants.java',
-    'generated/preprocessed/org/mozilla/gecko/AppConstants.java',
-    'generated/preprocessed/org/mozilla/gecko/MmaConstants.java',
-]
-constants_jar.extra_jars = [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-    CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB'],
-]
-
-if CONFIG['MOZ_INSTALL_TRACKING']:
-    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
-        'adjust/AdjustHelper.java',
-    ]]
-    constants_jar.extra_jars += [
-        'gecko-thirdparty-adjust_sdk.jar',
-    ]
-else:
-    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
-        'adjust/StubAdjustHelper.java',
-    ]]
-
-if CONFIG['MOZ_ANDROID_MMA']:
-    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
-        'mma/MmaLeanplumImp.java',
-    ]]
-    constants_jar.extra_jars += [
-        'gecko-thirdparty-leanplum_sdk.jar'
-    ]
-else:
-    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
-        'mma/MmaStubImp.java',
-    ]]
-
-resjar = add_java_jar('gecko-R')
-resjar.sources = []
-resjar.generated_sources += [
-    'generated/org/mozilla/gecko/R.java',
-]
-
-if CONFIG['ANDROID_SUPPORT_V4_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.v4']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_SUPPORT_V4_AAR_RES']]
-# (no resources) resjar.generated_sources += ['generated/android/support/v4/R.java']
-if CONFIG['ANDROID_APPCOMPAT_V7_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.v7.appcompat']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_APPCOMPAT_V7_AAR_RES']]
-    resjar.generated_sources += ['generated/android/support/v7/appcompat/R.java']
-if CONFIG['ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.graphics.drawable']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_RES']]
-# (no reosurces) resjar.generated_sources += ['generated/android/support/graphics/drawable/R.java']
-if CONFIG['ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.graphics.drawable.animated']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_RES']]
-# (no resources) resjar.generated_sources += ['generated/android/support/graphics/drawable/animated/R.java']
-if CONFIG['ANDROID_CARDVIEW_V7_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.v7.cardview']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_CARDVIEW_V7_AAR_RES']]
-    resjar.generated_sources += ['generated/android/support/v7/cardview/R.java']
-if CONFIG['ANDROID_DESIGN_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.design']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_DESIGN_AAR_RES']]
-    resjar.generated_sources += ['generated/android/support/design/R.java']
-if CONFIG['ANDROID_RECYCLERVIEW_V7_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.v7.recyclerview']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_RECYCLERVIEW_V7_AAR_RES']]
-    resjar.generated_sources += ['generated/android/support/v7/recyclerview/R.java']
-if CONFIG['ANDROID_CUSTOMTABS_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.customtabs']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_CUSTOMTABS_AAR_RES']]
-# (no resources) resjar.generated_sources += ['generated/android/support/customtabs/R.java']
-if CONFIG['ANDROID_PALETTE_V7_AAR']:
-    ANDROID_EXTRA_PACKAGES += ['android.support.v7.palette']
-    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PALETTE_V7_AAR_RES']]
-# (no resources) resjar.generated_sources += ['generated/android/support/v7/palette/R.java']
-
-resjar.javac_flags += ['-Xlint:all']
-
-mgjar = add_java_jar('gecko-mozglue')
-mgjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
-    'mozglue/ByteBufferInputStream.java',
-    'mozglue/DirectBufferAllocator.java',
-    'mozglue/GeckoLoader.java',
-    'mozglue/JNIObject.java',
-    'mozglue/NativeReference.java',
-    'mozglue/NativeZip.java',
-    'mozglue/SafeIntent.java',
-    'mozglue/SharedMemory.java',
-]]
-mgjar.generated_sources = [] # Keep it this way.
-mgjar.extra_jars += [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    'constants.jar',
-]
-mgjar.javac_flags += ['-Xlint:all']
-
-gujar = add_java_jar('gecko-util')
-gujar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
-    'util/ActivityResultHandler.java',
-    'util/ActivityResultHandlerMap.java',
-    'util/ActivityUtils.java',
-    'util/BundleEventListener.java',
-    'util/ContextUtils.java',
-    'util/DateUtil.java',
-    'util/EventCallback.java',
-    'util/FileUtils.java',
-    'util/FloatUtils.java',
-    'util/GamepadUtils.java',
-    'util/GeckoBackgroundThread.java',
-    'util/GeckoBundle.java',
-    'util/GeckoJarReader.java',
-    'util/HardwareCodecCapabilityUtils.java',
-    'util/HardwareUtils.java',
-    'util/INIParser.java',
-    'util/INISection.java',
-    'util/InputOptionsUtils.java',
-    'util/IntentUtils.java',
-    'util/IOUtils.java',
-    'util/JSONUtils.java',
-    'util/MapUtils.java',
-    'util/MenuUtils.java',
-    'util/NetworkUtils.java',
-    'util/NonEvictingLruCache.java',
-    'util/PrefUtils.java',
-    'util/ProxySelector.java',
-    'util/publicsuffix/PublicSuffix.java',
-    'util/publicsuffix/PublicSuffixPatterns.java',
-    'util/RawResource.java',
-    'util/StringUtils.java',
-    'util/ThreadUtils.java',
-    'util/UIAsyncTask.java',
-    'util/UUIDUtil.java',
-    'util/WeakReferenceHandler.java',
-    'util/WindowUtils.java',
-]]
-gujar.extra_jars = [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-    'constants.jar',
-    'gecko-mozglue.jar',
-]
-gujar.javac_flags += ['-Xlint:all,-deprecation']
-
-stjar = add_java_jar('sync-thirdparty')
-stjar.sources += [ thirdparty_source_dir + f for f in sync_thirdparty_java_files ]
-stjar.javac_flags = ['-Xlint:none']
-
-services_jar = add_java_jar('services')
-services_jar.sources += sync_java_files
-services_jar.extra_jars = [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-    CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB'],
-    'constants.jar',
-    'gecko-R.jar',
-    'gecko-mozglue.jar',
-    'gecko-thirdparty.jar',
-    'gecko-util.jar',
-    'sync-thirdparty.jar',
-]
-services_jar.javac_flags += ['-Xlint:all,-deprecation']
-
-if CONFIG['MOZ_WEBRTC']:
-    base_root = TOPSRCDIR + '/media/webrtc/trunk/webrtc/base/java/src/org/webrtc/'
-    video_capture_root = TOPSRCDIR + '/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/'
-    audio_root = TOPSRCDIR + '/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/'
-    wrjar = add_java_jar('webrtc')
-    wrjar.sources += [
-        base_root + 'Logging.java',
-        base_root + 'ThreadUtils.java',
-    ]
-    wrjar.sources += [
-        video_capture_root + 'CaptureCapabilityAndroid.java',
-        video_capture_root + 'VideoCaptureAndroid.java',
-        video_capture_root + 'VideoCaptureDeviceInfoAndroid.java',
-    ]
-    wrjar.sources += [
-        audio_root + 'BuildInfo.java',
-        audio_root + 'WebRtcAudioEffects.java',
-        audio_root + 'WebRtcAudioManager.java',
-        audio_root + 'WebRtcAudioRecord.java',
-        audio_root + 'WebRtcAudioTrack.java',
-        audio_root + 'WebRtcAudioUtils.java',
-    ]
-    wrjar.extra_jars = [
-        'constants.jar',
-        'gecko-R.jar',
-        'gecko-browser.jar',
-        'gecko-mozglue.jar',
-        'gecko-util.jar',
-        'gecko-view.jar',
-    ]
-    wrjar.javac_flags += ['-Xlint:all,-deprecation,-cast']
-
-gvjar = add_java_jar('gecko-view')
-
-gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x
-                  for x in [
-    'AndroidGamepadManager.java',
-    'Clipboard.java',
-    'CrashHandler.java',
-    'EventDispatcher.java',
-    'GeckoAppShell.java',
-    'GeckoBatteryManager.java',
-    'GeckoEditable.java',
-    'GeckoEditableChild.java',
-    'GeckoEditableClient.java',
-    'GeckoEditableListener.java',
-    'GeckoHalDefines.java',
-    'GeckoInputConnection.java',
-    'GeckoNetworkManager.java',
-    'GeckoProfile.java',
-    'GeckoProfileDirectories.java',
-    'GeckoScreenOrientation.java',
-    'GeckoSession.java',
-    'GeckoSessionHandler.java',
-    'GeckoSessionSettings.java',
-    'GeckoSharedPrefs.java',
-    'GeckoThread.java',
-    'GeckoView.java',
-    'GeckoVRManager.java',
-    'gfx/BitmapUtils.java',
-    'gfx/BufferedImage.java',
-    'gfx/BufferedImageGLInfo.java',
-    'gfx/DynamicToolbarAnimator.java',
-    'gfx/FloatSize.java',
-    'gfx/FullScreenState.java',
-    'gfx/GeckoDisplay.java',
-    'gfx/GeckoLayerClient.java',
-    'gfx/GeckoSurface.java',
-    'gfx/GeckoSurfaceTexture.java',
-    'gfx/ImmutableViewportMetrics.java',
-    'gfx/IntSize.java',
-    'gfx/LayerSession.java',
-    'gfx/LayerView.java',
-    'gfx/NativePanZoomController.java',
-    'gfx/Overscroll.java',
-    'gfx/OverscrollEdgeEffect.java',
-    'gfx/PanningPerfAPI.java',
-    'gfx/PanZoomController.java',
-    'gfx/PointUtils.java',
-    'gfx/RenderTask.java',
-    'gfx/StackScroller.java',
-    'gfx/SurfaceAllocator.java',
-    'gfx/SurfaceAllocatorService.java',
-    'gfx/SurfaceTextureListener.java',
-    'gfx/ViewTransform.java',
-    'gfx/VsyncSource.java',
-    'HapticFeedbackDelegate.java',
-    'InputConnectionListener.java',
-    'InputMethods.java',
-    'media/AsyncCodec.java',
-    'media/AsyncCodecFactory.java',
-    'media/BaseHlsPlayer.java',
-    'media/Codec.java',
-    'media/CodecProxy.java',
-    'media/FormatParam.java',
-    'media/GeckoAudioInfo.java',
-    'media/GeckoHLSDemuxerWrapper.java',
-    'media/GeckoHLSResourceWrapper.java',
-    'media/GeckoHLSSample.java',
-    'media/GeckoMediaDrm.java',
-    'media/GeckoMediaDrmBridgeV21.java',
-    'media/GeckoMediaDrmBridgeV23.java',
-    'media/GeckoPlayerFactory.java',
-    'media/GeckoVideoInfo.java',
-    'media/JellyBeanAsyncCodec.java',
-    'media/LollipopAsyncCodec.java',
-    'media/MediaDrmProxy.java',
-    'media/MediaManager.java',
-    'media/RemoteManager.java',
-    'media/RemoteMediaDrmBridge.java',
-    'media/RemoteMediaDrmBridgeStub.java',
-    'media/Sample.java',
-    'media/SamplePool.java',
-    'media/SessionKeyInfo.java',
-    'media/SharedMemBuffer.java',
-    'NativeQueue.java',
-    'NotificationListener.java',
-    'NSSBridge.java',
-    'permissions/PermissionBlock.java',
-    'permissions/Permissions.java',
-    'permissions/PermissionsHelper.java',
-    'PrefsHelper.java',
-    'process/GeckoProcessManager.java',
-    'process/GeckoServiceChildProcess.java',
-    'ScreenManagerHelper.java',
-    'ScreenOrientationDelegate.java',
-    'sqlite/ByteBufferInputStream.java',
-    'sqlite/MatrixBlobCursor.java',
-    'sqlite/SQLiteBridge.java',
-    'sqlite/SQLiteBridgeException.java',
-    'TouchEventInterceptor.java',
-    'WakeLockDelegate.java',
-]]
-
-if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
-    gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
-        'media/GeckoHlsAudioRenderer.java',
-        'media/GeckoHlsPlayer.java',
-        'media/GeckoHlsRendererBase.java',
-        'media/GeckoHlsVideoRenderer.java',
-        'media/Utils.java',
-    ]]
-
-
-gvjar.extra_jars += [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-    CONFIG['ANDROID_PALETTE_V7_AAR_LIB'],
-    'constants.jar',
-    'gecko-mozglue.jar',
-    'gecko-util.jar',
-]
-
-gvjar.javac_flags += [
-    '-Xlint:all,-deprecation,-fallthrough',
-    '-J-Xmx512m',
-    '-J-Xms128m'
-]
-
-
-gbjar = add_java_jar('gecko-browser')
-
-gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
-    'AboutPages.java',
-    'AccountsHelper.java',
-    'ActionBarTextSelection.java',
-    'ActionModeCompat.java',
-    'ActionModeCompatView.java',
-    'ActivityHandlerHelper.java',
-    'activitystream/ActivityStream.java',
-    'activitystream/ActivityStreamTelemetry.java',
-    'activitystream/homepanel/ActivityStreamConfiguration.java',
-    'activitystream/homepanel/ActivityStreamHomeFragment.java',
-    'activitystream/homepanel/ActivityStreamHomeScreen.java',
-    'activitystream/homepanel/ActivityStreamPanel.java',
-    'activitystream/homepanel/HighlightsDividerItemDecoration.java',
-    'activitystream/homepanel/HighlightsLoader.java',
-    'activitystream/homepanel/menu/ActivityStreamContextMenu.java',
-    'activitystream/homepanel/menu/BottomSheetContextMenu.java',
-    'activitystream/homepanel/menu/PopupContextMenu.java',
-    'activitystream/homepanel/model/Highlight.java',
-    'activitystream/homepanel/model/Metadata.java',
-    'activitystream/homepanel/model/RowModel.java',
-    'activitystream/homepanel/model/TopSite.java',
-    'activitystream/homepanel/model/TopStory.java',
-    'activitystream/homepanel/model/WebpageModel.java',
-    'activitystream/homepanel/model/WebpageRowModel.java',
-    'activitystream/homepanel/stream/HighlightsEmptyStateRow.java',
-    'activitystream/homepanel/stream/LearnMoreRow.java',
-    'activitystream/homepanel/stream/StreamOverridablePageIconLayout.java',
-    'activitystream/homepanel/stream/StreamTitleRow.java',
-    'activitystream/homepanel/stream/StreamViewHolder.java',
-    'activitystream/homepanel/stream/TopPanelRow.java',
-    'activitystream/homepanel/stream/WebpageItemRow.java',
-    'activitystream/homepanel/StreamItemAnimator.java',
-    'activitystream/homepanel/StreamRecyclerAdapter.java',
-    'activitystream/homepanel/topsites/TopSitesCard.java',
-    'activitystream/homepanel/topsites/TopSitesPage.java',
-    'activitystream/homepanel/topsites/TopSitesPageAdapter.java',
-    'activitystream/homepanel/topsites/TopSitesPagerAdapter.java',
-    'activitystream/homepanel/topstories/PocketStoriesLoader.java',
-    'activitystream/ranking/HighlightCandidate.java',
-    'activitystream/ranking/HighlightCandidateCursorIndices.java',
-    'activitystream/ranking/HighlightsRanking.java',
-    'activitystream/ranking/RankingUtils.java',
-    'activitystream/Utils.java',
-    'adjust/AdjustBrowserAppDelegate.java',
-    'animation/AnimationUtils.java',
-    'animation/HeightChangeAnimation.java',
-    'animation/PropertyAnimator.java',
-    'animation/Rotate3DAnimation.java',
-    'animation/ViewHelper.java',
-    'ANRReporter.java',
-    'bookmarks/BookmarkEditFragment.java',
-    'bookmarks/BookmarkUtils.java',
-    'bookmarks/CreateFolderCallback.java',
-    'bookmarks/CreateFolderFragment.java',
-    'bookmarks/EditBookmarkTask.java',
-    'bookmarks/SelectFolderCallback.java',
-    'bookmarks/SelectFolderFragment.java',
-    'BrowserApp.java',
-    'BrowserLocaleManager.java',
-    'cleanup/FileCleanupController.java',
-    'cleanup/FileCleanupService.java',
-    'CustomEditText.java',
-    'customtabs/ActionBarPresenter.java',
-    'customtabs/CustomTabsActivity.java',
-    'customtabs/CustomTabsSecurityPopup.java',
-    'customtabs/GeckoCustomTabsService.java',
-    'customtabs/IntentUtil.java',
-    'DataReportingNotification.java',
-    'dawn/DawnHelper.java',
-    'db/AbstractPerProfileDatabaseProvider.java',
-    'db/AbstractTransactionalProvider.java',
-    'db/BaseTable.java',
-    'db/BrowserDatabaseHelper.java',
-    'db/BrowserDB.java',
-    'db/BrowserProvider.java',
-    'db/DBUtils.java',
-    'db/FormHistoryProvider.java',
-    'db/HomeProvider.java',
-    'db/LocalBrowserDB.java',
-    'db/LocalSearches.java',
-    'db/LocalTabsAccessor.java',
-    'db/LocalUrlAnnotations.java',
-    'db/LocalURLMetadata.java',
-    'db/LoginsProvider.java',
-    'db/PasswordsProvider.java',
-    'db/PerProfileDatabases.java',
-    'db/RemoteClient.java',
-    'db/RemoteTab.java',
-    'db/Searches.java',
-    'db/SearchHistoryProvider.java',
-    'db/SharedBrowserDatabaseProvider.java',
-    'db/SQLiteBridgeContentProvider.java',
-    'db/SuggestedSites.java',
-    'db/Table.java',
-    'db/TabsAccessor.java',
-    'db/TabsProvider.java',
-    'db/UrlAnnotations.java',
-    'db/URLImageDataTable.java',
-    'db/URLMetadata.java',
-    'deeplink/DeepLinkContract.java',
-    'delegates/BookmarkStateChangeDelegate.java',
-    'delegates/BrowserAppDelegate.java',
-    'delegates/BrowserAppDelegateWithReference.java',
-    'delegates/OfflineTabStatusDelegate.java',
-    'delegates/ScreenshotDelegate.java',
-    'delegates/TabsTrayVisibilityAwareDelegate.java',
-    'DevToolsAuthHelper.java',
-    'distribution/Distribution.java',
-    'distribution/DistributionStoreCallback.java',
-    'distribution/PartnerBookmarksProviderProxy.java',
-    'distribution/PartnerBrowserCustomizationsClient.java',
-    'distribution/ReferrerDescriptor.java',
-    'distribution/ReferrerReceiver.java',
-    'dlc/BaseAction.java',
-    'dlc/catalog/DownloadContent.java',
-    'dlc/catalog/DownloadContentBuilder.java',
-    'dlc/catalog/DownloadContentCatalog.java',
-    'dlc/CleanupAction.java',
-    'dlc/DownloadAction.java',
-    'dlc/DownloadContentService.java',
-    'dlc/DownloadContentTelemetry.java',
-    'dlc/StudyAction.java',
-    'dlc/SyncAction.java',
-    'dlc/VerifyAction.java',
-    'DoorHangerPopup.java',
-    'DownloadsIntegration.java',
-    'drawable/DrawableWrapper.java',
-    'drawable/ShiftDrawable.java',
-    'DynamicToolbar.java',
-    'EditBookmarkDialog.java',
-    'Experiments.java',
-    'extensions/ExtensionPermissionsHelper.java',
-    'FilePicker.java',
-    'FilePickerResultHandler.java',
-    'FindInPageBar.java',
-    'firstrun/DataPanel.java',
-    'firstrun/FirstrunAnimationContainer.java',
-    'firstrun/FirstrunPager.java',
-    'firstrun/FirstrunPagerConfig.java',
-    'firstrun/FirstrunPanel.java',
-    'firstrun/LastPanel.java',
-    'firstrun/RestrictedWelcomePanel.java',
-    'firstrun/SyncPanel.java',
-    'firstrun/TabQueuePanel.java',
-    'FormAssistPopup.java',
-    'GeckoAccessibility.java',
-    'GeckoActivity.java',
-    'GeckoActivityMonitor.java',
-    'GeckoApp.java',
-    'GeckoApplication.java',
-    'GeckoFontScaleListener.java',
-    'GeckoJavaSampler.java',
-    'GeckoMessageReceiver.java',
-    'GeckoProfilesProvider.java',
-    'GeckoService.java',
-    'GeckoUpdateReceiver.java',
-    'GlobalHistory.java',
-    'GlobalPageMetadata.java',
-    'GuestSession.java',
-    'health/HealthRecorder.java',
-    'health/SessionInformation.java',
-    'health/StubbedHealthRecorder.java',
-    'home/BookmarkFolderView.java',
-    'home/BookmarkScreenshotRow.java',
-    'home/BookmarksListAdapter.java',
-    'home/BookmarksListView.java',
-    'home/BookmarksPanel.java',
-    'home/BrowserSearch.java',
-    'home/ClientsAdapter.java',
-    'home/CombinedHistoryAdapter.java',
-    'home/CombinedHistoryItem.java',
-    'home/CombinedHistoryPanel.java',
-    'home/CombinedHistoryRecyclerView.java',
-    'home/DynamicPanel.java',
-    'home/FramePanelLayout.java',
-    'home/HistorySectionsHelper.java',
-    'home/HomeAdapter.java',
-    'home/HomeBanner.java',
-    'home/HomeConfig.java',
-    'home/HomeConfigLoader.java',
-    'home/HomeConfigPrefsBackend.java',
-    'home/HomeContextMenuInfo.java',
-    'home/HomeFragment.java',
-    'home/HomeListView.java',
-    'home/HomePager.java',
-    'home/HomePanelsManager.java',
-    'home/HomeScreen.java',
-    'home/ImageLoader.java',
-    'home/MultiTypeCursorAdapter.java',
-    'home/PanelAuthCache.java',
-    'home/PanelAuthLayout.java',
-    'home/PanelBackItemView.java',
-    'home/PanelHeaderView.java',
-    'home/PanelInfoManager.java',
-    'home/PanelItemView.java',
-    'home/PanelLayout.java',
-    'home/PanelListView.java',
-    'home/PanelRecyclerView.java',
-    'home/PanelRecyclerViewAdapter.java',
-    'home/PanelRefreshLayout.java',
-    'home/PanelViewAdapter.java',
-    'home/PanelViewItemHandler.java',
-    'home/PinSiteDialog.java',
-    'home/RecentTabsAdapter.java',
-    'home/RemoteTabsExpandableListState.java',
-    'home/SearchEngine.java',
-    'home/SearchEngineAdapter.java',
-    'home/SearchEngineBar.java',
-    'home/SearchLoader.java',
-    'home/SimpleCursorLoader.java',
-    'home/SpacingDecoration.java',
-    'home/TabMenuStrip.java',
-    'home/TabMenuStripLayout.java',
-    'home/TopSitesGridItemView.java',
-    'home/TopSitesGridView.java',
-    'home/TopSitesPanel.java',
-    'home/TopSitesThumbnailView.java',
-    'home/TwoLinePageRow.java',
-    'icons/decoders/FaviconDecoder.java',
-    'icons/decoders/ICODecoder.java',
-    'icons/decoders/IconDirectoryEntry.java',
-    'icons/decoders/LoadFaviconResult.java',
-    'icons/IconCallback.java',
-    'icons/IconDescriptor.java',
-    'icons/IconDescriptorComparator.java',
-    'icons/IconRequest.java',
-    'icons/IconRequestBuilder.java',
-    'icons/IconRequestExecutor.java',
-    'icons/IconResponse.java',
-    'icons/Icons.java',
-    'icons/IconsHelper.java',
-    'icons/IconTask.java',
-    'icons/loader/ContentProviderLoader.java',
-    'icons/loader/DataUriLoader.java',
-    'icons/loader/DiskLoader.java',
-    'icons/loader/IconDownloader.java',
-    'icons/loader/IconGenerator.java',
-    'icons/loader/IconLoader.java',
-    'icons/loader/JarLoader.java',
-    'icons/loader/LegacyLoader.java',
-    'icons/loader/MemoryLoader.java',
-    'icons/loader/SuggestedSiteLoader.java',
-    'icons/preparation/AboutPagesPreparer.java',
-    'icons/preparation/AddDefaultIconUrl.java',
-    'icons/preparation/FilterKnownFailureUrls.java',
-    'icons/preparation/FilterMimeTypes.java',
-    'icons/preparation/FilterPrivilegedUrls.java',
-    'icons/preparation/LookupIconUrl.java',
-    'icons/preparation/Preparer.java',
-    'icons/preparation/SuggestedSitePreparer.java',
-    'icons/processing/ColorProcessor.java',
-    'icons/processing/DiskProcessor.java',
-    'icons/processing/MemoryProcessor.java',
-    'icons/processing/MinimumSizeProcessor.java',
-    'icons/processing/Processor.java',
-    'icons/processing/ResizingProcessor.java',
-    'icons/storage/DiskStorage.java',
-    'icons/storage/FailureCache.java',
-    'icons/storage/MemoryStorage.java',
-    'IntentHelper.java',
-    'LauncherActivity.java',
-    'lwt/LightweightTheme.java',
-    'lwt/LightweightThemeDrawable.java',
-    'mdns/MulticastDNSManager.java',
-    'media/AudioFocusAgent.java',
-    'media/MediaControlService.java',
-    'media/VideoPlayer.java',
-    'MediaCastingBar.java',
-    'MemoryMonitor.java',
-    'menu/GeckoMenu.java',
-    'menu/GeckoMenuInflater.java',
-    'menu/GeckoMenuItem.java',
-    'menu/GeckoSubMenu.java',
-    'menu/MenuItemActionBar.java',
-    'menu/MenuItemDefault.java',
-    'menu/MenuItemIcon.java',
-    'menu/MenuItemSwitcherLayout.java',
-    'menu/MenuPanel.java',
-    'menu/MenuPopup.java',
-    'mma/MmaDelegate.java',
-    'MotionEventInterceptor.java',
-    'notifications/NotificationClient.java',
-    'notifications/NotificationHelper.java',
-    'notifications/NotificationReceiver.java',
-    'notifications/NotificationService.java',
-    'notifications/WhatsNewReceiver.java',
-    'overlays/OverlayConstants.java',
-    'overlays/service/OverlayActionService.java',
-    'overlays/service/ShareData.java',
-    'overlays/service/sharemethods/AddBookmark.java',
-    'overlays/service/sharemethods/SendTab.java',
-    'overlays/service/sharemethods/ShareMethod.java',
-    'overlays/ui/OverlayDialogButton.java',
-    'overlays/ui/SendTabDeviceListArrayAdapter.java',
-    'overlays/ui/SendTabList.java',
-    'overlays/ui/SendTabTargetSelectedListener.java',
-    'overlays/ui/ShareDialog.java',
-    'PackageReplacedReceiver.java',
-    'preferences/AlignRightLinkPreference.java',
-    'preferences/AndroidImport.java',
-    'preferences/AndroidImportPreference.java',
-    'preferences/AppCompatPreferenceActivity.java',
-    'preferences/ClearOnShutdownPref.java',
-    'preferences/CustomCheckBoxPreference.java',
-    'preferences/CustomListCategory.java',
-    'preferences/CustomListPreference.java',
-    'preferences/DistroSharedPrefsImport.java',
-    'preferences/GeckoPreferenceFragment.java',
-    'preferences/GeckoPreferences.java',
-    'preferences/LinkPreference.java',
-    'preferences/ListCheckboxPreference.java',
-    'preferences/LocaleListPreference.java',
-    'preferences/ModifiableHintPreference.java',
-    'preferences/MultiChoicePreference.java',
-    'preferences/MultiPrefMultiChoicePreference.java',
-    'preferences/PanelsPreference.java',
-    'preferences/PanelsPreferenceCategory.java',
-    'preferences/PrivateDataPreference.java',
-    'preferences/SearchEnginePreference.java',
-    'preferences/SearchPreferenceCategory.java',
-    'preferences/SetHomepagePreference.java',
-    'preferences/SyncPreference.java',
-    'preferences/TopSitesPanelsPreference.java',
-    'PrintHelper.java',
-    'PrivateTab.java',
-    'promotion/AddToHomeScreenPromotion.java',
-    'promotion/HomeScreenPrompt.java',
-    'promotion/ReaderViewBookmarkPromotion.java',
-    'promotion/SimpleHelperUI.java',
-    'prompts/ColorPickerInput.java',
-    'prompts/IconGridInput.java',
-    'prompts/IntentChooserPrompt.java',
-    'prompts/IntentHandler.java',
-    'prompts/Prompt.java',
-    'prompts/PromptInput.java',
-    'prompts/PromptListAdapter.java',
-    'prompts/PromptListItem.java',
-    'prompts/PromptService.java',
-    'prompts/TabInput.java',
-    'reader/ReaderModeUtils.java',
-    'reader/ReadingListHelper.java',
-    'reader/SavedReaderViewHelper.java',
-    'RemoteClientsDialogFragment.java',
-    'Restarter.java',
-    'restrictions/DefaultConfiguration.java',
-    'restrictions/GuestProfileConfiguration.java',
-    'restrictions/Restrictable.java',
-    'restrictions/RestrictedProfileConfiguration.java',
-    'restrictions/RestrictionCache.java',
-    'restrictions/RestrictionConfiguration.java',
-    'restrictions/RestrictionProvider.java',
-    'restrictions/Restrictions.java',
-    'ScreenshotObserver.java',
-    'search/SearchEngine.java',
-    'search/SearchEngineManager.java',
-    'SessionParser.java',
-    'SharedPreferencesHelper.java',
-    'SiteIdentity.java',
-    'SnackbarBuilder.java',
-    'SuggestClient.java',
-    'switchboard/AsyncConfigLoader.java',
-    'switchboard/DeviceUuidFactory.java',
-    'switchboard/Preferences.java',
-    'switchboard/Switch.java',
-    'switchboard/SwitchBoard.java',
-    'Tab.java',
-    'tabqueue/TabQueueHelper.java',
-    'tabqueue/TabQueuePrompt.java',
-    'tabqueue/TabQueueService.java',
-    'tabqueue/TabReceivedService.java',
-    'Tabs.java',
-    'tabs/AutoFitTabsGridLayout.java',
-    'tabs/CompactTabsGridLayout.java',
-    'tabs/PrivateTabsPanel.java',
-    'tabs/TabCurve.java',
-    'tabs/TabHistoryController.java',
-    'tabs/TabHistoryFragment.java',
-    'tabs/TabHistoryItemRow.java',
-    'tabs/TabHistoryPage.java',
-    'tabs/TabPanelBackButton.java',
-    'tabs/TabsGridLayout.java',
-    'tabs/TabsGridLayoutAnimator.java',
-    'tabs/TabsLayout.java',
-    'tabs/TabsLayoutAdapter.java',
-    'tabs/TabsLayoutItemView.java',
-    'tabs/TabsListLayout.java',
-    'tabs/TabsListLayoutAnimator.java',
-    'tabs/TabsPanel.java',
-    'tabs/TabsPanelThumbnailView.java',
-    'tabs/TabsTouchHelperCallback.java',
-    'Telemetry.java',
-    'telemetry/measurements/CampaignIdMeasurements.java',
-    'telemetry/measurements/SearchCountMeasurements.java',
-    'telemetry/measurements/SessionMeasurements.java',
-    'telemetry/pingbuilders/TelemetryCorePingBuilder.java',
-    'telemetry/pingbuilders/TelemetryLocalPingBuilder.java',
-    'telemetry/pingbuilders/TelemetryPingBuilder.java',
-    'telemetry/pingbuilders/TelemetrySyncEventPingBuilder.java',
-    'telemetry/pingbuilders/TelemetrySyncPingBuilder.java',
-    'telemetry/pingbuilders/TelemetrySyncPingBundleBuilder.java',
-    'telemetry/schedulers/TelemetryUploadAllPingsImmediatelyScheduler.java',
-    'telemetry/schedulers/TelemetryUploadScheduler.java',
-    'telemetry/stores/TelemetryJSONFilePingStore.java',
-    'telemetry/stores/TelemetryPingStore.java',
-    'telemetry/TelemetryBackgroundReceiver.java',
-    'telemetry/TelemetryConstants.java',
-    'telemetry/TelemetryCorePingDelegate.java',
-    'telemetry/TelemetryDispatcher.java',
-    'telemetry/TelemetryLocalPing.java',
-    'telemetry/TelemetryOutgoingPing.java',
-    'telemetry/TelemetryPing.java',
-    'telemetry/TelemetryPreferences.java',
-    'telemetry/TelemetryUploadService.java',
-    'TelemetryContract.java',
-    'text/FloatingActionModeCallback.java',
-    'text/FloatingToolbarTextSelection.java',
-    'text/TextAction.java',
-    'text/TextSelection.java',
-    'ThumbnailHelper.java',
-    'toolbar/AutocompleteHandler.java',
-    'toolbar/BackButton.java',
-    'toolbar/BrowserToolbar.java',
-    'toolbar/BrowserToolbarPhone.java',
-    'toolbar/BrowserToolbarPhoneBase.java',
-    'toolbar/CanvasDelegate.java',
-    'toolbar/NavButton.java',
-    'toolbar/PageActionLayout.java',
-    'toolbar/PhoneTabsButton.java',
-    'toolbar/PwaConfirm.java',
-    'toolbar/PwaOnboarding.java',
-    'toolbar/SecurityModeUtil.java',
-    'toolbar/ShapedButton.java',
-    'toolbar/ShapedButtonFrameLayout.java',
-    'toolbar/SiteIdentityPopup.java',
-    'toolbar/ToolbarEditLayout.java',
-    'toolbar/ToolbarEditText.java',
-    'toolbar/ToolbarPrefs.java',
-    'trackingprotection/TrackingProtectionPrompt.java',
-    'updater/PostUpdateHandler.java',
-    'updater/UpdateService.java',
-    'updater/UpdateServiceHelper.java',
-    'util/ColorUtil.java',
-    'util/DrawableUtil.java',
-    'util/JavaUtil.java',
-    'util/PackageUtil.java',
-    'util/ResourceDrawableUtils.java',
-    'util/ShortcutUtils.java',
-    'util/TouchTargetUtil.java',
-    'util/URIUtils.java',
-    'util/ViewUtil.java',
-    'util/WindowUtil.java',
-    'webapps/WebAppActivity.java',
-    'webapps/WebAppIndexer.java',
-    'webapps/WebAppManifest.java',
-    'webapps/WebApps.java',
-    'widget/ActionModePresenter.java',
-    'widget/ActivityChooserModel.java',
-    'widget/AllCapsTextView.java',
-    'widget/AnchoredPopup.java',
-    'widget/AnimatedHeightLayout.java',
-    'widget/AnimatedProgressBar.java',
-    'widget/BasicColorPicker.java',
-    'widget/CheckableFadedSingleColorTextView.java',
-    'widget/CheckableLinearLayout.java',
-    'widget/ClickableWhenDisabledEditText.java',
-    'widget/ContentSecurityDoorHanger.java',
-    'widget/CropImageView.java',
-    'widget/DateTimePicker.java',
-    'widget/DefaultDoorHanger.java',
-    'widget/DefaultItemAnimatorBase.java',
-    'widget/DoorHanger.java',
-    'widget/DoorhangerConfig.java',
-    'widget/EllipsisTextView.java',
-    'widget/ExternalIntentDuringPrivateBrowsingPromptFragment.java',
-    'widget/FadedHorizontalScrollView.java',
-    'widget/FadedMultiColorTextView.java',
-    'widget/FadedSingleColorTextView.java',
-    'widget/FadedTextView.java',
-    'widget/FaviconView.java',
-    'widget/FilledCardView.java',
-    'widget/FlowLayout.java',
-    'widget/GeckoActionProvider.java',
-    'widget/GeckoPopupMenu.java',
-    'widget/GridSpacingDecoration.java',
-    'widget/HistoryDividerItemDecoration.java',
-    'widget/HoverDelegateWithReset.java',
-    'widget/IconTabWidget.java',
-    'widget/LoginDoorHanger.java',
-    'widget/RecyclerViewClickSupport.java',
-    'widget/ResizablePathDrawable.java',
-    'widget/RoundedCornerLayout.java',
-    'widget/SiteLogins.java',
-    'widget/SplashScreen.java',
-    'widget/SquaredImageView.java',
-    'widget/SquaredRelativeLayout.java',
-    'widget/SwipeDismissListViewTouchListener.java',
-    'widget/SwitchPreferenceView.java',
-    'widget/TabThumbnailWrapper.java',
-    'widget/ThumbnailView.java',
-    'widget/TouchDelegateWithReset.java',
-]]
-# The following sources are checked in to version control but
-# generated by a script (java/org/mozilla/gecko/widget/themed/generate_themed_views.py).
-# If you're editing this list, make sure to edit that script.
-gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
-    'widget/themed/ThemedEditText.java',
-    'widget/themed/ThemedFrameLayout.java',
-    'widget/themed/ThemedImageButton.java',
-    'widget/themed/ThemedImageView.java',
-    'widget/themed/ThemedLinearLayout.java',
-    'widget/themed/ThemedListView.java',
-    'widget/themed/ThemedProgressBar.java',
-    'widget/themed/ThemedRelativeLayout.java',
-    'widget/themed/ThemedTextSwitcher.java',
-    'widget/themed/ThemedTextView.java',
-    'widget/themed/ThemedView.java',
-]]
-gbjar.sources += [thirdparty_source_dir + f for f in [
-    'com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.java',
-    'com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.java',
-    'com/googlecode/eyesfree/braille/selfbraille/WriteData.java',
-]]
-# The following sources are Photon specific, Eventually they should be merged into base.
-gbjar.sources += ['../app/src/photon/java/org/mozilla/gecko/' + x for x in [
-    'home/SearchEngineRow.java',
-    'home/SuggestionItem.java',
-    'toolbar/BrowserToolbarTablet.java',
-    'toolbar/BrowserToolbarTabletBase.java',
-    'toolbar/ForwardButton.java',
-    'toolbar/TabCounter.java',
-    'toolbar/ToolbarDisplayLayout.java',
-    'toolbar/ToolbarRoundButton.java',
-]]
-
-android_package_dir = CONFIG['ANDROID_PACKAGE_NAME'].replace('.', '/')
-gbjar.generated_sources = [] # Keep it this way.
-gbjar.extra_jars += [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-    'constants.jar',
-]
-if CONFIG['MOZ_CRASHREPORTER']:
-    gbjar.sources += [ 'java/org/mozilla/gecko/CrashReporter.java' ]
-    ANDROID_RES_DIRS += [ 'crashreporter/res' ]
-
-if CONFIG['MOZ_ANDROID_GCM']:
-    gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
-        'gcm/GcmInstanceIDListenerService.java',
-        'gcm/GcmMessageListenerService.java',
-        'gcm/GcmTokenClient.java',
-        'push/Fetched.java',
-        'push/PushClient.java',
-        'push/PushManager.java',
-        'push/PushRegistration.java',
-        'push/PushService.java',
-        'push/PushState.java',
-        'push/PushSubscription.java',
-    ]]
-
-if (CONFIG['MOZ_ANDROID_MAX_SDK_VERSION']):
-    max_sdk_version = int(CONFIG['MOZ_ANDROID_MAX_SDK_VERSION'])
-else:
-    max_sdk_version = 999
-
-# Only bother to include new tablet code if we're building for tablet-capable
-# OS releases.
-if max_sdk_version >= 11:
-    gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
-        'tabs/TabStrip.java',
-        'tabs/TabStripAdapter.java',
-        'tabs/TabStripDividerItem.java',
-        'tabs/TabStripItemAnimator.java',
-        'tabs/TabStripItemView.java',
-        'tabs/TabStripView.java'
-    ]]
-
-gbjar.extra_jars += [
-    'gecko-R.jar',
-    'gecko-mozglue.jar',
-    'gecko-thirdparty.jar',
-    'gecko-util.jar',
-    'gecko-view.jar',
-    'sync-thirdparty.jar',
-    'services.jar',
-]
-
-moz_native_devices_jars = [
-    CONFIG['ANDROID_MEDIAROUTER_V7_AAR_LIB'],
-    CONFIG['ANDROID_MEDIAROUTER_V7_AAR_INTERNAL_LIB'],
-    CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_LIB'],
-    CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
-    CONFIG['ANDROID_PLAY_SERVICES_CAST_AAR_LIB'],
-]
-moz_native_devices_sources = ['java/org/mozilla/gecko/' + x for x in [
-    'ChromeCastDisplay.java',
-    'ChromeCastPlayer.java',
-    'GeckoMediaPlayer.java',
-    'GeckoPresentationDisplay.java',
-    'MediaPlayerManager.java',
-    'PresentationMediaPlayerManager.java',
-    'RemotePresentationService.java',
-]]
-if CONFIG['MOZ_NATIVE_DEVICES']:
-    gbjar.extra_jars += moz_native_devices_jars
-    gbjar.sources += moz_native_devices_sources
-
-    if CONFIG['ANDROID_MEDIAROUTER_V7_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['android.support.v7.mediarouter']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_MEDIAROUTER_V7_AAR_RES']]
-        resjar.generated_sources += ['generated/android/support/v7/mediarouter/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.base']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/base/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_CAST_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.cast']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_CAST_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/cast/R.java']
-
-if CONFIG['MOZ_ANDROID_GCM']:
-    gbjar.extra_jars += [
-        CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_LIB'],
-    ]
-
-    if CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.gcm']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_RES']]
-# (no resources) resjar.generated_sources += ['generated/com/google/android/gms/gcm/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.measurement']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_RES']]
-# (no resources) resjar.generated_sources += ['generated/android/support/v7/palette/R.java']
-
-if CONFIG['MOZ_INSTALL_TRACKING']:
-    gbjar.extra_jars += [
-        CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
-    ]
-
-    if CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.ads']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/ads/R.java']
-
-    if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
-        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
-        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
-        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
-
-gbjar.extra_jars += [CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB']]
-gbjar.extra_jars += [CONFIG['ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_LIB']]
-gbjar.extra_jars += [CONFIG['ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_LIB']]
-gbjar.extra_jars += [CONFIG['ANDROID_CARDVIEW_V7_AAR_LIB']]
-gbjar.extra_jars += [CONFIG['ANDROID_DESIGN_AAR_LIB']]
-gbjar.extra_jars += [CONFIG['ANDROID_RECYCLERVIEW_V7_AAR_LIB']]
-gbjar.extra_jars += [CONFIG['ANDROID_CUSTOMTABS_AAR_LIB']]
-
-gbjar.javac_flags += ['-Xlint:all,-deprecation,-fallthrough', '-J-Xmx512m', '-J-Xms128m']
-
-# gecko-thirdparty is a good place to put small independent libraries
-gtjar = add_java_jar('gecko-thirdparty')
-gtjar.sources += [ thirdparty_source_dir + f for f in [
-    'com/booking/rtlviewpager/PagerAdapterWrapper.java',
-    'com/booking/rtlviewpager/RtlViewPager.java',
-    'com/jakewharton/disklrucache/DiskLruCache.java',
-    'com/jakewharton/disklrucache/StrictLineReader.java',
-    'com/jakewharton/disklrucache/Util.java',
-    'com/squareup/leakcanary/LeakCanary.java',
-    'com/squareup/leakcanary/RefWatcher.java',
-    'com/squareup/picasso/Action.java',
-    'com/squareup/picasso/AssetBitmapHunter.java',
-    'com/squareup/picasso/BitmapHunter.java',
-    'com/squareup/picasso/Cache.java',
-    'com/squareup/picasso/Callback.java',
-    'com/squareup/picasso/ContactsPhotoBitmapHunter.java',
-    'com/squareup/picasso/ContentStreamBitmapHunter.java',
-    'com/squareup/picasso/DeferredRequestCreator.java',
-    'com/squareup/picasso/Dispatcher.java',
-    'com/squareup/picasso/Downloader.java',
-    'com/squareup/picasso/FetchAction.java',
-    'com/squareup/picasso/FileBitmapHunter.java',
-    'com/squareup/picasso/GetAction.java',
-    'com/squareup/picasso/ImageViewAction.java',
-    'com/squareup/picasso/LruCache.java',
-    'com/squareup/picasso/MarkableInputStream.java',
-    'com/squareup/picasso/MediaStoreBitmapHunter.java',
-    'com/squareup/picasso/NetworkBitmapHunter.java',
-    'com/squareup/picasso/Picasso.java',
-    'com/squareup/picasso/PicassoDrawable.java',
-    'com/squareup/picasso/PicassoExecutorService.java',
-    'com/squareup/picasso/Request.java',
-    'com/squareup/picasso/RequestCreator.java',
-    'com/squareup/picasso/ResourceBitmapHunter.java',
-    'com/squareup/picasso/Stats.java',
-    'com/squareup/picasso/StatsSnapshot.java',
-    'com/squareup/picasso/Target.java',
-    'com/squareup/picasso/TargetAction.java',
-    'com/squareup/picasso/Transformation.java',
-    'com/squareup/picasso/UrlConnectionDownloader.java',
-    'com/squareup/picasso/Utils.java'
-] ]
-gtjar.extra_jars = [
-    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-]
-
-if not CONFIG['MOZILLA_OFFICIAL']:
-    gtjar.sources += [ thirdparty_source_dir + f for f in [
-        'org/lucasr/dspec/DesignSpec.java',
-        'org/lucasr/dspec/RawResource.java'
-    ] ]
-
-if CONFIG['MOZ_INSTALL_TRACKING']:
-    adjustjar = add_java_jar('gecko-thirdparty-adjust_sdk')
-    adjustjar.sources += [ thirdparty_source_dir + f for f in [
-        'com/adjust/sdk/ActivityHandler.java',
-        'com/adjust/sdk/ActivityKind.java',
-        'com/adjust/sdk/ActivityPackage.java',
-        'com/adjust/sdk/ActivityState.java',
-        'com/adjust/sdk/Adjust.java',
-        'com/adjust/sdk/AdjustAttribution.java',
-        'com/adjust/sdk/AdjustConfig.java',
-        'com/adjust/sdk/AdjustEvent.java',
-        'com/adjust/sdk/AdjustFactory.java',
-        'com/adjust/sdk/AdjustInstance.java',
-        'com/adjust/sdk/AdjustReferrerReceiver.java',
-        'com/adjust/sdk/AttributionHandler.java',
-        'com/adjust/sdk/Constants.java',
-        'com/adjust/sdk/DeviceInfo.java',
-        'com/adjust/sdk/IActivityHandler.java',
-        'com/adjust/sdk/IAttributionHandler.java',
-        'com/adjust/sdk/ILogger.java',
-        'com/adjust/sdk/IPackageHandler.java',
-        'com/adjust/sdk/IRequestHandler.java',
-        'com/adjust/sdk/Logger.java',
-        'com/adjust/sdk/LogLevel.java',
-        'com/adjust/sdk/OnAttributionChangedListener.java',
-        'com/adjust/sdk/PackageBuilder.java',
-        'com/adjust/sdk/PackageHandler.java',
-        'com/adjust/sdk/plugin/AndroidIdUtil.java',
-        'com/adjust/sdk/plugin/MacAddressUtil.java',
-        'com/adjust/sdk/plugin/Plugin.java',
-        'com/adjust/sdk/Reflection.java',
-        'com/adjust/sdk/RequestHandler.java',
-        'com/adjust/sdk/UnitTestActivity.java',
-        'com/adjust/sdk/Util.java'
-    ] ]
-    adjustjar.extra_jars += [
-        'sync-thirdparty.jar',
-    ]
-
-
-if CONFIG['MOZ_ANDROID_MMA']:
-    lpjar = add_java_jar('gecko-thirdparty-leanplum_sdk')
-    lpjar.sources += [ thirdparty_source_dir + f for f in [
-        'com/leanplum/ActionArgs.java',
-        'com/leanplum/ActionContext.java',
-        'com/leanplum/activities/LeanplumAccountAuthenticatorActivity.java',
-        'com/leanplum/activities/LeanplumActionBarActivity.java',
-        'com/leanplum/activities/LeanplumActivity.java',
-        'com/leanplum/activities/LeanplumActivityGroup.java',
-        'com/leanplum/activities/LeanplumAliasActivity.java',
-        'com/leanplum/activities/LeanplumAppCompatActivity.java',
-        'com/leanplum/activities/LeanplumExpandableListActivity.java',
-        'com/leanplum/activities/LeanplumFragmentActivity.java',
-        'com/leanplum/activities/LeanplumLauncherActivity.java',
-        'com/leanplum/activities/LeanplumListActivity.java',
-        'com/leanplum/activities/LeanplumNativeActivity.java',
-        'com/leanplum/activities/LeanplumPreferenceActivity.java',
-        'com/leanplum/activities/LeanplumTabActivity.java',
-        'com/leanplum/annotations/File.java',
-        'com/leanplum/annotations/Parser.java',
-        'com/leanplum/annotations/Variable.java',
-        'com/leanplum/CacheUpdateBlock.java',
-        'com/leanplum/callbacks/ActionCallback.java',
-        'com/leanplum/callbacks/InboxChangedCallback.java',
-        'com/leanplum/callbacks/NewsfeedChangedCallback.java',
-        'com/leanplum/callbacks/PostponableAction.java',
-        'com/leanplum/callbacks/RegisterDeviceCallback.java',
-        'com/leanplum/callbacks/RegisterDeviceFinishedCallback.java',
-        'com/leanplum/callbacks/StartCallback.java',
-        'com/leanplum/callbacks/VariableCallback.java',
-        'com/leanplum/callbacks/VariablesChangedCallback.java',
-        'com/leanplum/internal/ActionArg.java',
-        'com/leanplum/internal/ActionManager.java',
-        'com/leanplum/internal/AESCrypt.java',
-        'com/leanplum/internal/BaseActionContext.java',
-        'com/leanplum/internal/CollectionUtil.java',
-        'com/leanplum/internal/Constants.java',
-        'com/leanplum/internal/FileManager.java',
-        'com/leanplum/internal/HybiParser.java',
-        'com/leanplum/internal/JsonConverter.java',
-        'com/leanplum/internal/LeanplumInternal.java',
-        'com/leanplum/internal/LeanplumManifestHelper.java',
-        'com/leanplum/internal/LeanplumManifestParser.java',
-        'com/leanplum/internal/LeanplumMessageMatchFilter.java',
-        'com/leanplum/internal/LeanplumUIEditorWrapper.java',
-        'com/leanplum/internal/Log.java',
-        'com/leanplum/internal/OsHandler.java',
-        'com/leanplum/internal/Registration.java',
-        'com/leanplum/internal/Request.java',
-        'com/leanplum/internal/RequestFactory.java',
-        'com/leanplum/internal/ResourceQualifiers.java',
-        'com/leanplum/internal/Socket.java',
-        'com/leanplum/internal/SocketIOClient.java',
-        'com/leanplum/internal/Util.java',
-        'com/leanplum/internal/VarCache.java',
-        'com/leanplum/internal/WebSocketClient.java',
-        'com/leanplum/Leanplum.java',
-        'com/leanplum/LeanplumActivityHelper.java',
-        'com/leanplum/LeanplumApplication.java',
-        'com/leanplum/LeanplumCloudMessagingProvider.java',
-        'com/leanplum/LeanplumDeviceIdMode.java',
-        'com/leanplum/LeanplumEditorMode.java',
-        'com/leanplum/LeanplumException.java',
-        'com/leanplum/LeanplumGcmProvider.java',
-        'com/leanplum/LeanplumInbox.java',
-        'com/leanplum/LeanplumInboxMessage.java',
-        'com/leanplum/LeanplumInflater.java',
-        'com/leanplum/LeanplumLocalPushListenerService.java',
-        'com/leanplum/LeanplumLocationAccuracyType.java',
-        'com/leanplum/LeanplumManualProvider.java',
-        'com/leanplum/LeanplumPushInstanceIDService.java',
-        'com/leanplum/LeanplumPushListenerService.java',
-        'com/leanplum/LeanplumPushNotificationCustomizer.java',
-        'com/leanplum/LeanplumPushReceiver.java',
-        'com/leanplum/LeanplumPushRegistrationService.java',
-        'com/leanplum/LeanplumPushService.java',
-        'com/leanplum/LeanplumResources.java',
-        'com/leanplum/LeanplumUIEditor.java',
-        'com/leanplum/LocationManager.java',
-        'com/leanplum/messagetemplates/Alert.java',
-        'com/leanplum/messagetemplates/BaseMessageDialog.java',
-        'com/leanplum/messagetemplates/BaseMessageOptions.java',
-        'com/leanplum/messagetemplates/CenterPopup.java',
-        'com/leanplum/messagetemplates/CenterPopupOptions.java',
-        'com/leanplum/messagetemplates/Confirm.java',
-        'com/leanplum/messagetemplates/HTMLOptions.java',
-        'com/leanplum/messagetemplates/HTMLTemplate.java',
-        'com/leanplum/messagetemplates/Interstitial.java',
-        'com/leanplum/messagetemplates/InterstitialOptions.java',
-        'com/leanplum/messagetemplates/MessageTemplates.java',
-        'com/leanplum/messagetemplates/OpenURL.java',
-        'com/leanplum/messagetemplates/WebInterstitial.java',
-        'com/leanplum/messagetemplates/WebInterstitialOptions.java',
-        'com/leanplum/Newsfeed.java',
-        'com/leanplum/NewsfeedMessage.java',
-        'com/leanplum/UIEditorBridge.java',
-        'com/leanplum/utils/BitmapUtil.java',
-        'com/leanplum/utils/SharedPreferencesUtil.java',
-        'com/leanplum/utils/SizeUtil.java',
-        'com/leanplum/Var.java',
-        'com/leanplum/views/BackgroundImageView.java',
-        'com/leanplum/views/CloseButton.java',
-    ] ]
-    lpjar.extra_jars += [
-        CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_LIB'],
-        CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_LIB'],
-        CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-        CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
-        CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
-        'sync-thirdparty.jar',
-    ]
+if not CONFIG['MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE']:
+    include('without-gradle.mozbuild')
 
 # Putting branding earlier allows branders to override default resources.
 ANDROID_RES_DIRS += [
     '/' + CONFIG['MOZ_BRANDING_DIRECTORY'] + '/res',
 ]
 
 ANDROID_RES_DIRS += [
     '/mobile/android/app/src/photon/res',
@@ -1413,391 +170,8 @@ ANDROID_ASSETS_DIRS += [
 
 if CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY']:
     ANDROID_ASSETS_DIRS += [
         '%' + CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY'] + '/assets',
     ]
 
 DEFINES['ANDROID_PACKAGE_NAME'] = CONFIG['ANDROID_PACKAGE_NAME']
 FINAL_TARGET_PP_FILES += ['package-name.txt.in']
-
-gvjar.sources += ['generated/org/mozilla/gecko/' + x for x in [
-    'gfx/ISurfaceAllocator.java',
-    'IGeckoEditableChild.java',
-    'IGeckoEditableParent.java',
-    'media/ICodec.java',
-    'media/ICodecCallbacks.java',
-    'media/IMediaDrmBridge.java',
-    'media/IMediaDrmBridgeCallbacks.java',
-    'media/IMediaManager.java',
-    'process/IChildProcess.java',
-    'process/IProcessManager.java',
-]]
-
-if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
-    gvjar.extra_jars += [
-        'exoplayer2.jar',
-    ]
-
-    exoplayer2_jar = add_java_jar('exoplayer2')
-
-    exoplayer2_jar.javac_flags += [
-        '-Xlint:all,-serial,-rawtypes,-unchecked,-fallthrough',
-    ]
-
-    exoplayer2_jar.extra_jars += [
-        CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
-    ]
-
-    exoplayer2_jar.sources += [geckoview_thirdparty_source_dir + 'java/com/google/android/exoplayer2/' + x for x in [
-        'audio/Ac3Util.java',
-        'audio/AudioCapabilities.java',
-        'audio/AudioCapabilitiesReceiver.java',
-        'audio/AudioDecoderException.java',
-        'audio/AudioProcessor.java',
-        'audio/AudioRendererEventListener.java',
-        'audio/AudioTrack.java',
-        'audio/ChannelMappingAudioProcessor.java',
-        'audio/DtsUtil.java',
-        'audio/MediaCodecAudioRenderer.java',
-        'audio/ResamplingAudioProcessor.java',
-        'audio/SimpleDecoderAudioRenderer.java',
-        'audio/Sonic.java',
-        'audio/SonicAudioProcessor.java',
-        'BaseRenderer.java',
-        'C.java',
-        'decoder/Buffer.java',
-        'decoder/CryptoInfo.java',
-        'decoder/Decoder.java',
-        'decoder/DecoderCounters.java',
-        'decoder/DecoderInputBuffer.java',
-        'decoder/OutputBuffer.java',
-        'decoder/SimpleDecoder.java',
-        'decoder/SimpleOutputBuffer.java',
-        'DefaultLoadControl.java',
-        'DefaultRenderersFactory.java',
-        'drm/DecryptionException.java',
-        'drm/DefaultDrmSessionManager.java',
-        'drm/DrmInitData.java',
-        'drm/DrmSession.java',
-        'drm/DrmSessionManager.java',
-        'drm/ExoMediaCrypto.java',
-        'drm/ExoMediaDrm.java',
-        'drm/FrameworkMediaCrypto.java',
-        'drm/FrameworkMediaDrm.java',
-        'drm/HttpMediaDrmCallback.java',
-        'drm/KeysExpiredException.java',
-        'drm/MediaDrmCallback.java',
-        'drm/OfflineLicenseHelper.java',
-        'drm/UnsupportedDrmException.java',
-        'drm/WidevineUtil.java',
-        'ExoPlaybackException.java',
-        'ExoPlayer.java',
-        'ExoPlayerFactory.java',
-        'ExoPlayerImpl.java',
-        'ExoPlayerImplInternal.java',
-        'ExoPlayerLibraryInfo.java',
-        'extractor/ChunkIndex.java',
-        'extractor/DefaultExtractorInput.java',
-        'extractor/DefaultExtractorsFactory.java',
-        'extractor/DefaultTrackOutput.java',
-        'extractor/DummyTrackOutput.java',
-        'extractor/Extractor.java',
-        'extractor/ExtractorInput.java',
-        'extractor/ExtractorOutput.java',
-        'extractor/ExtractorsFactory.java',
-        'extractor/flv/AudioTagPayloadReader.java',
-        'extractor/flv/FlvExtractor.java',
-        'extractor/flv/ScriptTagPayloadReader.java',
-        'extractor/flv/TagPayloadReader.java',
-        'extractor/flv/VideoTagPayloadReader.java',
-        'extractor/GaplessInfoHolder.java',
-        'extractor/mkv/DefaultEbmlReader.java',
-        'extractor/mkv/EbmlReader.java',
-        'extractor/mkv/EbmlReaderOutput.java',
-        'extractor/mkv/MatroskaExtractor.java',
-        'extractor/mkv/Sniffer.java',
-        'extractor/mkv/VarintReader.java',
-        'extractor/mp3/ConstantBitrateSeeker.java',
-        'extractor/mp3/Mp3Extractor.java',
-        'extractor/mp3/VbriSeeker.java',
-        'extractor/mp3/XingSeeker.java',
-        'extractor/mp4/Atom.java',
-        'extractor/mp4/AtomParsers.java',
-        'extractor/mp4/DefaultSampleValues.java',
-        'extractor/mp4/FixedSampleSizeRechunker.java',
-        'extractor/mp4/FragmentedMp4Extractor.java',
-        'extractor/mp4/MetadataUtil.java',
-        'extractor/mp4/Mp4Extractor.java',
-        'extractor/mp4/PsshAtomUtil.java',
-        'extractor/mp4/Sniffer.java',
-        'extractor/mp4/Track.java',
-        'extractor/mp4/TrackEncryptionBox.java',
-        'extractor/mp4/TrackFragment.java',
-        'extractor/mp4/TrackSampleTable.java',
-        'extractor/MpegAudioHeader.java',
-        'extractor/ogg/DefaultOggSeeker.java',
-        'extractor/ogg/FlacReader.java',
-        'extractor/ogg/OggExtractor.java',
-        'extractor/ogg/OggPacket.java',
-        'extractor/ogg/OggPageHeader.java',
-        'extractor/ogg/OggSeeker.java',
-        'extractor/ogg/OpusReader.java',
-        'extractor/ogg/StreamReader.java',
-        'extractor/ogg/VorbisBitArray.java',
-        'extractor/ogg/VorbisReader.java',
-        'extractor/ogg/VorbisUtil.java',
-        'extractor/PositionHolder.java',
-        'extractor/rawcc/RawCcExtractor.java',
-        'extractor/SeekMap.java',
-        'extractor/TrackOutput.java',
-        'extractor/ts/Ac3Extractor.java',
-        'extractor/ts/Ac3Reader.java',
-        'extractor/ts/AdtsExtractor.java',
-        'extractor/ts/AdtsReader.java',
-        'extractor/ts/DefaultTsPayloadReaderFactory.java',
-        'extractor/ts/DtsReader.java',
-        'extractor/ts/DvbSubtitleReader.java',
-        'extractor/ts/ElementaryStreamReader.java',
-        'extractor/ts/H262Reader.java',
-        'extractor/ts/H264Reader.java',
-        'extractor/ts/H265Reader.java',
-        'extractor/ts/Id3Reader.java',
-        'extractor/ts/MpegAudioReader.java',
-        'extractor/ts/NalUnitTargetBuffer.java',
-        'extractor/ts/PesReader.java',
-        'extractor/ts/PsExtractor.java',
-        'extractor/ts/SectionPayloadReader.java',
-        'extractor/ts/SectionReader.java',
-        'extractor/ts/SeiReader.java',
-        'extractor/ts/SpliceInfoSectionReader.java',
-        'extractor/ts/TsExtractor.java',
-        'extractor/ts/TsPayloadReader.java',
-        'extractor/wav/WavExtractor.java',
-        'extractor/wav/WavHeader.java',
-        'extractor/wav/WavHeaderReader.java',
-        'Format.java',
-        'FormatHolder.java',
-        'IllegalSeekPositionException.java',
-        'LoadControl.java',
-        'mediacodec/MediaCodecInfo.java',
-        'mediacodec/MediaCodecRenderer.java',
-        'mediacodec/MediaCodecSelector.java',
-        'mediacodec/MediaCodecUtil.java',
-        'metadata/emsg/EventMessage.java',
-        'metadata/emsg/EventMessageDecoder.java',
-        'metadata/id3/ApicFrame.java',
-        'metadata/id3/BinaryFrame.java',
-        'metadata/id3/ChapterFrame.java',
-        'metadata/id3/ChapterTocFrame.java',
-        'metadata/id3/CommentFrame.java',
-        'metadata/id3/GeobFrame.java',
-        'metadata/id3/Id3Decoder.java',
-        'metadata/id3/Id3Frame.java',
-        'metadata/id3/PrivFrame.java',
-        'metadata/id3/TextInformationFrame.java',
-        'metadata/id3/UrlLinkFrame.java',
-        'metadata/Metadata.java',
-        'metadata/MetadataDecoder.java',
-        'metadata/MetadataDecoderException.java',
-        'metadata/MetadataDecoderFactory.java',
-        'metadata/MetadataInputBuffer.java',
-        'metadata/MetadataRenderer.java',
-        'metadata/scte35/PrivateCommand.java',
-        'metadata/scte35/SpliceCommand.java',
-        'metadata/scte35/SpliceInfoDecoder.java',
-        'metadata/scte35/SpliceInsertCommand.java',
-        'metadata/scte35/SpliceNullCommand.java',
-        'metadata/scte35/SpliceScheduleCommand.java',
-        'metadata/scte35/TimeSignalCommand.java',
-        'ParserException.java',
-        'PlaybackParameters.java',
-        'Renderer.java',
-        'RendererCapabilities.java',
-        'RendererConfiguration.java',
-        'RenderersFactory.java',
-        'SimpleExoPlayer.java',
-        'source/AdaptiveMediaSourceEventListener.java',
-        'source/BehindLiveWindowException.java',
-        'source/chunk/BaseMediaChunk.java',
-        'source/chunk/BaseMediaChunkOutput.java',
-        'source/chunk/Chunk.java',
-        'source/chunk/ChunkedTrackBlacklistUtil.java',
-        'source/chunk/ChunkExtractorWrapper.java',
-        'source/chunk/ChunkHolder.java',
-        'source/chunk/ChunkSampleStream.java',
-        'source/chunk/ChunkSource.java',
-        'source/chunk/ContainerMediaChunk.java',
-        'source/chunk/DataChunk.java',
-        'source/chunk/InitializationChunk.java',
-        'source/chunk/MediaChunk.java',
-        'source/chunk/SingleSampleMediaChunk.java',
-        'source/ClippingMediaPeriod.java',
-        'source/ClippingMediaSource.java',
-        'source/CompositeSequenceableLoader.java',
-        'source/ConcatenatingMediaSource.java',
-        'source/EmptySampleStream.java',
-        'source/ExtractorMediaPeriod.java',
-        'source/ExtractorMediaSource.java',
-        'source/hls/Aes128DataSource.java',
-        'source/hls/DefaultHlsDataSourceFactory.java',
-        'source/hls/HlsChunkSource.java',
-        'source/hls/HlsDataSourceFactory.java',
-        'source/hls/HlsManifest.java',
-        'source/hls/HlsMediaChunk.java',
-        'source/hls/HlsMediaPeriod.java',
-        'source/hls/HlsMediaSource.java',
-        'source/hls/HlsSampleStream.java',
-        'source/hls/HlsSampleStreamWrapper.java',
-        'source/hls/playlist/HlsMasterPlaylist.java',
-        'source/hls/playlist/HlsMediaPlaylist.java',
-        'source/hls/playlist/HlsPlaylist.java',
-        'source/hls/playlist/HlsPlaylistParser.java',
-        'source/hls/playlist/HlsPlaylistTracker.java',
-        'source/hls/TimestampAdjusterProvider.java',
-        'source/hls/WebvttExtractor.java',
-        'source/LoopingMediaSource.java',
-        'source/MediaPeriod.java',
-        'source/MediaSource.java',
-        'source/MergingMediaPeriod.java',
-        'source/MergingMediaSource.java',
-        'source/SampleStream.java',
-        'source/SequenceableLoader.java',
-        'source/SinglePeriodTimeline.java',
-        'source/SingleSampleMediaPeriod.java',
-        'source/SingleSampleMediaSource.java',
-        'source/TrackGroup.java',
-        'source/TrackGroupArray.java',
-        'source/UnrecognizedInputFormatException.java',
-        'text/CaptionStyleCompat.java',
-        'text/cea/Cea608Decoder.java',
-        'text/cea/Cea708Cue.java',
-        'text/cea/Cea708Decoder.java',
-        'text/cea/CeaDecoder.java',
-        'text/cea/CeaOutputBuffer.java',
-        'text/cea/CeaSubtitle.java',
-        'text/cea/CeaUtil.java',
-        'text/Cue.java',
-        'text/dvb/DvbDecoder.java',
-        'text/dvb/DvbParser.java',
-        'text/dvb/DvbSubtitle.java',
-        'text/SimpleSubtitleDecoder.java',
-        'text/SimpleSubtitleOutputBuffer.java',
-        'text/subrip/SubripDecoder.java',
-        'text/subrip/SubripSubtitle.java',
-        'text/Subtitle.java',
-        'text/SubtitleDecoder.java',
-        'text/SubtitleDecoderException.java',
-        'text/SubtitleDecoderFactory.java',
-        'text/SubtitleInputBuffer.java',
-        'text/SubtitleOutputBuffer.java',
-        'text/TextRenderer.java',
-        'text/ttml/TtmlDecoder.java',
-        'text/ttml/TtmlNode.java',
-        'text/ttml/TtmlRegion.java',
-        'text/ttml/TtmlRenderUtil.java',
-        'text/ttml/TtmlStyle.java',
-        'text/ttml/TtmlSubtitle.java',
-        'text/tx3g/Tx3gDecoder.java',
-        'text/tx3g/Tx3gSubtitle.java',
-        'text/webvtt/CssParser.java',
-        'text/webvtt/Mp4WebvttDecoder.java',
-        'text/webvtt/Mp4WebvttSubtitle.java',
-        'text/webvtt/WebvttCssStyle.java',
-        'text/webvtt/WebvttCue.java',
-        'text/webvtt/WebvttCueParser.java',
-        'text/webvtt/WebvttDecoder.java',
-        'text/webvtt/WebvttParserUtil.java',
-        'text/webvtt/WebvttSubtitle.java',
-        'Timeline.java',
-        'trackselection/AdaptiveTrackSelection.java',
-        'trackselection/BaseTrackSelection.java',
-        'trackselection/DefaultTrackSelector.java',
-        'trackselection/FixedTrackSelection.java',
-        'trackselection/MappingTrackSelector.java',
-        'trackselection/RandomTrackSelection.java',
-        'trackselection/TrackSelection.java',
-        'trackselection/TrackSelectionArray.java',
-        'trackselection/TrackSelector.java',
-        'trackselection/TrackSelectorResult.java',
-        'upstream/Allocation.java',
-        'upstream/Allocator.java',
-        'upstream/AssetDataSource.java',
-        'upstream/BandwidthMeter.java',
-        'upstream/ByteArrayDataSink.java',
-        'upstream/ByteArrayDataSource.java',
-        'upstream/cache/Cache.java',
-        'upstream/cache/CacheDataSink.java',
-        'upstream/cache/CacheDataSinkFactory.java',
-        'upstream/cache/CacheDataSource.java',
-        'upstream/cache/CacheDataSourceFactory.java',
-        'upstream/cache/CachedContent.java',
-        'upstream/cache/CachedContentIndex.java',
-        'upstream/cache/CachedRegionTracker.java',
-        'upstream/cache/CacheEvictor.java',
-        'upstream/cache/CacheSpan.java',
-        'upstream/cache/CacheUtil.java',
-        'upstream/cache/LeastRecentlyUsedCacheEvictor.java',
-        'upstream/cache/NoOpCacheEvictor.java',
-        'upstream/cache/SimpleCache.java',
-        'upstream/cache/SimpleCacheSpan.java',
-        'upstream/ContentDataSource.java',
-        'upstream/crypto/AesCipherDataSink.java',
-        'upstream/crypto/AesCipherDataSource.java',
-        'upstream/crypto/AesFlushingCipher.java',
-        'upstream/crypto/CryptoUtil.java',
-        'upstream/DataSink.java',
-        'upstream/DataSource.java',
-        'upstream/DataSourceException.java',
-        'upstream/DataSourceInputStream.java',
-        'upstream/DataSpec.java',
-        'upstream/DefaultAllocator.java',
-        'upstream/DefaultBandwidthMeter.java',
-        'upstream/DefaultDataSource.java',
-        'upstream/DefaultDataSourceFactory.java',
-        'upstream/DefaultHttpDataSource.java',
-        'upstream/DefaultHttpDataSourceFactory.java',
-        'upstream/DummyDataSource.java',
-        'upstream/FileDataSource.java',
-        'upstream/FileDataSourceFactory.java',
-        'upstream/HttpDataSource.java',
-        'upstream/Loader.java',
-        'upstream/LoaderErrorThrower.java',
-        'upstream/ParsingLoadable.java',
-        'upstream/PriorityDataSource.java',
-        'upstream/PriorityDataSourceFactory.java',
-        'upstream/RawResourceDataSource.java',
-        'upstream/TeeDataSource.java',
-        'upstream/TransferListener.java',
-        'upstream/UdpDataSource.java',
-        'util/Assertions.java',
-        'util/AtomicFile.java',
-        'util/Clock.java',
-        'util/CodecSpecificDataUtil.java',
-        'util/ColorParser.java',
-        'util/ConditionVariable.java',
-        'util/FlacStreamInfo.java',
-        'util/LibraryLoader.java',
-        'util/LongArray.java',
-        'util/MediaClock.java',
-        'util/MimeTypes.java',
-        'util/NalUnitUtil.java',
-        'util/ParsableBitArray.java',
-        'util/ParsableByteArray.java',
-        'util/ParsableNalUnitBitArray.java',
-        'util/Predicate.java',
-        'util/PriorityTaskManager.java',
-        'util/ReusableBufferedOutputStream.java',
-        'util/SlidingPercentile.java',
-        'util/StandaloneMediaClock.java',
-        'util/SystemClock.java',
-        'util/TimestampAdjuster.java',
-        'util/TraceUtil.java',
-        'util/UriUtil.java',
-        'util/Util.java',
-        'util/XmlPullParserUtil.java',
-        'video/AvcConfig.java',
-        'video/ColorInfo.java',
-        'video/HevcConfig.java',
-        'video/MediaCodecVideoRenderer.java',
-        'video/VideoFrameReleaseTimeHelper.java',
-        'video/VideoRendererEventListener.java',
-    ]]
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/without-gradle.mk
@@ -0,0 +1,459 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# The Makefile.in configuration bits that are only for
+# --without-gradle.  Bug 1414415 tracks removing --without-gradle
+# entirely, and this separation will make that much easier when the
+# time comes.
+
+ifdef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
+$(error MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE must not be set for without-gradle.mk)
+endif # MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
+
+GARBAGE += \
+  classes.dex  \
+  gecko.ap_  \
+  res/values/strings.xml \
+  res/raw/browsersearch.json \
+  res/raw/suggestedsites.json \
+  .aapt.deps \
+  GeneratedJNINatives.h \
+  GeneratedJNIWrappers.cpp \
+  GeneratedJNIWrappers.h \
+  FennecJNINatives.h \
+  FennecJNIWrappers.cpp \
+  FennecJNIWrappers.h \
+  $(NULL)
+
+GARBAGE_DIRS += classes db jars res sync services generated
+
+# The bootclasspath is functionally identical to the classpath, but allows the
+# classes given to redefine classes in core packages, such as java.lang.
+# android.jar is here as it provides Android's definition of the Java Standard
+# Library. The compatability lib here tweaks a few of the core classes to paint
+# over changes in behaviour between versions.
+JAVA_BOOTCLASSPATH := \
+    $(ANDROID_SDK)/android.jar \
+    $(NULL)
+
+JAVA_BOOTCLASSPATH := $(subst $(NULL) ,:,$(strip $(JAVA_BOOTCLASSPATH)))
+
+JAVA_CLASSPATH += \
+    $(ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB) \
+    $(ANDROID_SUPPORT_V4_AAR_LIB) \
+    $(ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB) \
+    $(ANDROID_APPCOMPAT_V7_AAR_LIB) \
+    $(ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_LIB) \
+    $(ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_LIB) \
+    $(ANDROID_CARDVIEW_V7_AAR_LIB) \
+    $(ANDROID_DESIGN_AAR_LIB) \
+    $(ANDROID_RECYCLERVIEW_V7_AAR_LIB) \
+    $(ANDROID_CUSTOMTABS_AAR_LIB) \
+    $(ANDROID_PALETTE_V7_AAR_LIB) \
+    $(NULL)
+
+# If native devices are enabled, add Google Play Services and some of the v7
+# compat libraries.
+ifdef MOZ_NATIVE_DEVICES
+    JAVA_CLASSPATH += \
+        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_CAST_AAR_LIB) \
+        $(ANDROID_MEDIAROUTER_V7_AAR_LIB) \
+        $(ANDROID_MEDIAROUTER_V7_AAR_INTERNAL_LIB) \
+        $(NULL)
+endif
+
+ifdef MOZ_ANDROID_GCM
+    JAVA_CLASSPATH += \
+        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_GCM_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_LIB) \
+        $(NULL)
+endif
+
+ifdef MOZ_INSTALL_TRACKING
+    JAVA_CLASSPATH += \
+        $(ANDROID_PLAY_SERVICES_ADS_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
+        $(NULL)
+endif
+
+# MOZ_ANDROID_MMA requires MOZ_ANDROID_GCM and MOZ_NATIVE_DEVICES,
+# which take care of the Play Services requirements in JAVA_CLASSPATH.
+# Based on the import of
+# `com.google.android.gms.ads.identifier.AdvertisingIdClient` in
+# `com.leanplum.internal.Util` one would assume that
+# `play-services-ads` is required, by in version 8.4.0 (at least) that
+# class is defined in `play-services-basement`.  Therefore, unlike
+# MOZ_INSTALL_TRACKING, we don't need to depend on
+# `play-services-ads`.
+
+JAVA_CLASSPATH := $(subst $(NULL) ,:,$(strip $(JAVA_CLASSPATH)))
+
+# Library jars that we're bundling: these are subject to Proguard before inclusion
+# into classes.dex.
+java_bundled_libs := \
+    $(ANDROID_SUPPORT_V4_AAR_LIB) \
+    $(ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB) \
+    $(ANDROID_APPCOMPAT_V7_AAR_LIB) \
+    $(ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_LIB) \
+    $(ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_LIB) \
+    $(ANDROID_CARDVIEW_V7_AAR_LIB) \
+    $(ANDROID_DESIGN_AAR_LIB) \
+    $(ANDROID_RECYCLERVIEW_V7_AAR_LIB) \
+    $(ANDROID_CUSTOMTABS_AAR_LIB) \
+    $(ANDROID_PALETTE_V7_AAR_LIB) \
+    $(NULL)
+
+ifdef MOZ_NATIVE_DEVICES
+    java_bundled_libs += \
+        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_CAST_AAR_LIB) \
+        $(ANDROID_MEDIAROUTER_V7_AAR_LIB) \
+        $(ANDROID_MEDIAROUTER_V7_AAR_INTERNAL_LIB) \
+        $(NULL)
+endif
+
+ifdef MOZ_ANDROID_GCM
+    java_bundled_libs += \
+        $(ANDROID_PLAY_SERVICES_BASE_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_GCM_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_LIB) \
+        $(NULL)
+endif
+
+ifdef MOZ_INSTALL_TRACKING
+    java_bundled_libs += \
+        $(ANDROID_PLAY_SERVICES_ADS_AAR_LIB) \
+        $(ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB) \
+        $(NULL)
+endif
+
+# MOZ_ANDROID_MMA requires MOZ_ANDROID_GCM and MOZ_NATIVE_DEVICES,
+# which take care of the Play Services requirements in
+# java_bundled_libs.  See the note above.
+
+# uniq purloined from http://stackoverflow.com/a/16151140.
+uniq = $(if $1,$(firstword $1) $(call uniq,$(filter-out $(firstword $1),$1)))
+
+java_bundled_libs := $(call uniq,$(java_bundled_libs))
+java_bundled_libs := $(subst $(NULL) ,:,$(strip $(java_bundled_libs)))
+
+GECKOVIEW_JARS = \
+  constants.jar \
+  gecko-R.jar \
+  gecko-mozglue.jar \
+  gecko-util.jar \
+  gecko-view.jar \
+  sync-thirdparty.jar \
+  $(NULL)
+
+ifdef MOZ_ANDROID_HLS_SUPPORT
+GECKOVIEW_JARS += exoplayer2.jar
+endif
+
+ifdef MOZ_WEBRTC
+GECKOVIEW_JARS += webrtc.jar
+endif
+
+ifdef MOZ_INSTALL_TRACKING
+GECKOVIEW_JARS += gecko-thirdparty-adjust_sdk.jar
+endif
+
+ifdef MOZ_ANDROID_MMA
+GECKOVIEW_JARS += gecko-thirdparty-leanplum_sdk.jar
+endif
+
+FENNEC_JARS = \
+  gecko-browser.jar \
+  gecko-thirdparty.jar \
+  services.jar \
+  $(NULL)
+
+ifdef MOZ_ANDROID_MLS_STUMBLER
+FENNEC_JARS += ../stumbler/stumbler.jar
+endif
+
+geckoview_jars_classpath := $(subst $(NULL) ,:,$(strip $(GECKOVIEW_JARS)))
+
+# All the jars we're compiling from source. (not to be confused with
+# java_bundled_libs, which holds the jars which we're including as binaries).
+ALL_JARS = \
+  $(GECKOVIEW_JARS) \
+  $(FENNEC_JARS) \
+  $(NULL)
+
+# The list of jars in Java classpath notation (colon-separated).
+all_jars_classpath := $(subst $(NULL) ,:,$(strip $(ALL_JARS)))
+
+include $(topsrcdir)/config/config.mk
+
+library_jars := \
+    $(ANDROID_SDK)/android.jar \
+    $(NULL)
+
+# Android 23 (Marshmallow) deprecated a part of the Android platform, namely the
+# org.apache.http package.  Fennec removed all code that referenced said package
+# in order to easily ship to Android 23 devices (and, by extension, all devices
+# before Android 23).
+#
+# Google did not remove all code that referenced said package in their own
+# com.google.android.gms namespace!  It turns out that the org.apache.http
+# package is not removed, only deprecated and hidden by default.  Google added a
+# a `useLibrary` Gradle directive that allows legacy code to reference the
+# package, which is still (hidden) in the Android 23 platform.
+#
+# Fennec code doesn't need to compile against the deprecated package, since our
+# code doesn't reference the package anymore.  However, we do need to Proguard
+# against the deprecated package.  If we don't, Proguard -- which is a global
+# optimization -- sees Google libraries referencing "non-existent" libraries and
+# complains.  The solution is to mimic the `useLibraries` directive by declaring
+# the legacy package as a provided library jar.
+#
+# See https://bugzilla.mozilla.org/show_bug.cgi?id=1233238#c19 for symptoms and
+# more discussion.
+#
+# MOZ_ANDROID_MMA requires MOZ_INSTALL_TRACKING, so we don't need a
+# separate clause for MMA (Leanplum) support.
+ifdef MOZ_INSTALL_TRACKING
+library_jars += $(ANDROID_SDK)/optional/org.apache.http.legacy.jar
+endif # MOZ_INSTALL_TRACKING
+
+library_jars := $(subst $(NULL) ,:,$(strip $(library_jars)))
+
+classes.dex: .proguard.deps
+	$(REPORT_BUILD)
+	$(DX) --dex --output=classes.dex --force-jumbo jars-proguarded
+
+ifdef MOZ_DISABLE_PROGUARD
+  PROGUARD_PASSES=0
+else
+  ifdef MOZ_DEBUG
+    PROGUARD_PASSES=1
+  else
+    ifndef MOZILLA_OFFICIAL
+      PROGUARD_PASSES=1
+    else
+      PROGUARD_PASSES=6
+    endif
+  endif
+endif
+
+proguard_config_dir=$(topsrcdir)/mobile/android/config/proguard
+
+# First, we delete debugging information from libraries. Having line-number
+# information for libraries for which we lack the source isn't useful, so this
+# saves us a bit of space. Importantly, Proguard has a bug causing it to
+# sometimes corrupt this information if present (which it does for some of the
+# included libraries). This corruption prevents dex from completing, so we need
+# to get rid of it.  This prevents us from seeing line numbers in stack traces
+# for stack frames inside libraries.
+#
+# This step can occur much earlier than the main Proguard pass: it needs only
+# gecko-R.jar to have been compiled (as that's where the library R.java files
+# end up), but it does block the main Proguard pass.
+.bundled.proguard.deps: gecko-R.jar $(proguard_config_dir)/strip-libs.cfg $(PROGUARD_JAR)
+	$(REPORT_BUILD)
+	@$(TOUCH) $@
+	$(JAVA) \
+		-Xmx512m -Xms128m \
+		-jar $(PROGUARD_JAR) \
+		@$(proguard_config_dir)/strip-libs.cfg \
+		-injars $(subst ::,:,$(java_bundled_libs))\
+		-outjars bundled-jars-nodebug \
+		-libraryjars $(library_jars):gecko-R.jar
+
+# We touch the target file before invoking Proguard so that Proguard's
+# outputs are fresher than the target, preventing a subsequent
+# invocation from thinking Proguard's outputs are stale.  This is safe
+# because Make removes the target file if any recipe command fails.
+.proguard.deps: .bundled.proguard.deps $(ALL_JARS) $(proguard_config_dir)/proguard.cfg $(PROGUARD_JAR)
+	$(REPORT_BUILD)
+	@$(TOUCH) $@
+	$(JAVA) \
+		-Xmx512m -Xms128m \
+		-jar $(PROGUARD_JAR) \
+		@$(proguard_config_dir)/proguard.cfg \
+		-optimizationpasses $(PROGUARD_PASSES) \
+		-injars $(subst ::,:,$(all_jars_classpath)):bundled-jars-nodebug \
+		-outjars jars-proguarded \
+		-libraryjars $(library_jars)
+
+ANNOTATION_PROCESSOR_JAR_FILES := $(abspath $(DEPTH)/build/annotationProcessors/annotationProcessors.jar)
+
+# This annotation processing step also generates
+# GeneratedJNIWrappers.h and GeneratedJNINatives.h
+GeneratedJNIWrappers.cpp: $(ANNOTATION_PROCESSOR_JAR_FILES) $(GECKOVIEW_JARS)
+	$(JAVA) -classpath $(geckoview_jars_classpath):$(JAVA_BOOTCLASSPATH):$(JAVA_CLASSPATH):$(ANNOTATION_PROCESSOR_JAR_FILES) \
+		org.mozilla.gecko.annotationProcessors.AnnotationProcessor \
+		Generated $(GECKOVIEW_JARS)
+
+# This annotation processing step also generates
+# FennecJNIWrappers.h and FennecJNINatives.h
+FennecJNIWrappers.cpp: $(ANNOTATION_PROCESSOR_JAR_FILES) $(FENNEC_JARS)
+	$(JAVA) -classpath $(all_jars_classpath):$(JAVA_BOOTCLASSPATH):$(JAVA_CLASSPATH):$(ANNOTATION_PROCESSOR_JAR_FILES) \
+		org.mozilla.gecko.annotationProcessors.AnnotationProcessor \
+		Fennec $(FENNEC_JARS)
+
+include $(topsrcdir)/config/rules.mk
+
+not_android_res_files := \
+  *.mkdir.done* \
+  *.DS_Store* \
+  *\#* \
+  *.rej \
+  *.orig \
+  $(NULL)
+
+# This uses the fact that Android resource directories list all
+# resource files one subdirectory below the parent resource directory.
+android_res_files := $(filter-out $(not_android_res_files),$(wildcard $(addsuffix /*,$(wildcard $(addsuffix /*,$(ANDROID_RES_DIRS))))))
+
+$(ANDROID_GENERATED_RESFILES): $(call mkdir_deps,$(sort $(dir $(ANDROID_GENERATED_RESFILES))))
+
+# All of generated/org/mozilla/gecko/R.java, gecko.ap_, and R.txt are
+# produced by aapt; this saves aapt invocations.  The trailing
+# semi-colon defines an empty recipe; defining no recipe at all causes
+# Make to treat the target differently, in a way that defeats our
+# dependencies.
+
+generated/org/mozilla/gecko/R.java: .aapt.deps ;
+
+# Only add libraries that contain resources here. We (unecessarily) generate an identical R.java which
+# is copied into each of these locations, and each of these files contains thousands of fields.
+# Each unnecessary copy therefore wastes unnecessary fields in the output dex file.
+# Note: usually proguard will help clean this up after the fact, but having too many fields will cause
+# dexing to fail, regardless of any later optimisations proguard could later make to bring us back
+# under the limit.
+# Ideally we would fix our aapt invocations to correctly generate minimal copies of R.java for each
+# package, but that seems redundant since gradle builds are able to correctly generate these files.
+
+# If native devices are enabled, add Google Play Services, build their resources
+# (no resources) generated/android/support/v4/R.java: .aapt.deps ;
+generated/android/support/v7/appcompat/R.java: .aapt.deps ;
+# (no resources) generated/android/support/graphics/drawable/animated/R.java: .aapt.deps ;
+# (no resources) generated/android/support/graphics/drawable/R.java: .aapt.deps ;
+generated/android/support/v7/cardview/R.java: .aapt.deps ;
+generated/android/support/design/R.java: .aapt.deps ;
+generated/android/support/v7/mediarouter/R.java: .aapt.deps ;
+generated/android/support/v7/recyclerview/R.java: .aapt.deps ;
+# (no resources) generated/android/support/customtabs/R.java: .aapt.deps ;
+# (no resources) generated/android/support/v7/palette/R.java: .aapt.deps ;
+generated/com/google/android/gms/R.java: .aapt.deps ;
+generated/com/google/android/gms/ads/R.java: .aapt.deps ;
+generated/com/google/android/gms/base/R.java: .aapt.deps ;
+generated/com/google/android/gms/cast/R.java: .aapt.deps ;
+# (no resources) generated/com/google/android/gms/gcm/R.java: .aapt.deps ;
+# (no resources) generated/com/google/android/gms/measurement/R.java: .aapt.deps ;
+
+gecko.ap_: .aapt.deps ;
+R.txt: .aapt.deps ;
+
+# [Comment 2/3] This tom-foolery provides a target that forces a
+# rebuild of gecko.ap_.  This is used during packaging to ensure that
+# resources are fresh.  The alternative would be complicated; see
+# [Comment 1/3].
+
+gecko-nodeps/R.java: .aapt.nodeps ;
+gecko-nodeps.ap_: .aapt.nodeps ;
+gecko-nodeps/R.txt: .aapt.nodeps ;
+
+# This ignores the default set of resources ignored by aapt, plus
+# files starting with '#'.  (Emacs produces temp files named #temp#.)
+# This doesn't actually set the environment variable; it's used as a
+# parameter in the aapt invocation below.  Consider updating
+# not_android_res_files as well.
+
+ANDROID_AAPT_IGNORE := !.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~:\#*:*.rej:*.orig
+
+# 1: target file.
+# 2: dependencies.
+# 3: name of ap_ file to write.
+# 4: directory to write R.java into.
+# 5: directory to write R.txt into.
+# We touch the target file before invoking aapt so that aapt's outputs
+# are fresher than the target, preventing a subsequent invocation from
+# thinking aapt's outputs are stale.  This is safe because Make
+# removes the target file if any recipe command fails.
+
+define aapt_command
+$(1): $$(call mkdir_deps,$(filter-out ./,$(dir $(3) $(4) $(5)))) $(2)
+	@$$(TOUCH) $$@
+	$$(AAPT) package -f -m \
+		-M AndroidManifest.xml \
+		-I $(ANDROID_SDK)/android.jar \
+		$(if $(MOZ_ANDROID_MAX_SDK_VERSION),--max-res-version $(MOZ_ANDROID_MAX_SDK_VERSION),) \
+		--auto-add-overlay \
+		$$(addprefix -S ,$$(ANDROID_RES_DIRS)) \
+		$$(addprefix -A ,$$(ANDROID_ASSETS_DIRS)) \
+		$(if $(ANDROID_EXTRA_PACKAGES),--extra-packages $$(subst $$(NULL) ,:,$$(strip $$(ANDROID_EXTRA_PACKAGES)))) \
+		$(if $(ANDROID_EXTRA_RES_DIRS),$$(addprefix -S ,$$(ANDROID_EXTRA_RES_DIRS))) \
+		--custom-package org.mozilla.gecko \
+		--no-version-vectors \
+		-F $(3) \
+		-J $(4) \
+		--output-text-symbols $(5) \
+		--ignore-assets "$$(ANDROID_AAPT_IGNORE)"
+endef
+
+# [Comment 3/3] The first of these rules is used during regular
+# builds.  The second writes an ap_ file that is only used during
+# packaging.  It doesn't write the normal ap_, or R.java, since we
+# don't want the packaging step to write anything that would make a
+# further no-op build do work.  See also
+# toolkit/mozapps/installer/packager.mk.
+
+all_resources = \
+  AndroidManifest.xml \
+  $(android_res_files) \
+  $(ANDROID_GENERATED_RESFILES) \
+  $(NULL)
+
+# .aapt.deps: $(all_resources)
+$(eval $(call aapt_command,.aapt.deps,$(all_resources),gecko.ap_,generated/,./))
+
+# .aapt.nodeps: AndroidManifest.xml FORCE
+$(eval $(call aapt_command,.aapt.nodeps,AndroidManifest.xml FORCE,gecko-nodeps.ap_,gecko-nodeps/,gecko-nodeps/))
+
+
+# Override the Java settings with some specific android settings
+include $(topsrcdir)/config/android-common.mk
+
+# Generate Java binder interfaces from AIDL files.
+GECKOVIEW_AIDLS = \
+  org/mozilla/gecko/IGeckoEditableChild.aidl \
+  org/mozilla/gecko/IGeckoEditableParent.aidl \
+  org/mozilla/gecko/gfx/ISurfaceAllocator.aidl \
+  org/mozilla/gecko/media/ICodec.aidl \
+  org/mozilla/gecko/media/ICodecCallbacks.aidl \
+  org/mozilla/gecko/media/IMediaDrmBridge.aidl \
+  org/mozilla/gecko/media/IMediaDrmBridgeCallbacks.aidl \
+  org/mozilla/gecko/media/IMediaManager.aidl \
+  org/mozilla/gecko/process/IChildProcess.aidl \
+  org/mozilla/gecko/process/IProcessManager.aidl \
+  org/mozilla/gecko/util/GeckoBundle.aidl \
+  $(NULL)
+
+geckoview_aidl_src_path := $(topsrcdir)/mobile/android/geckoview/src/main/aidl
+geckoview_aidl_target_path := generated
+geckoview_aidl_targets := $(addprefix $(geckoview_aidl_target_path)/,$(patsubst %.aidl,%.java,$(GECKOVIEW_AIDLS:.java=)))
+
+$(geckoview_aidl_targets): $(geckoview_aidl_target_path)/%.java: $(geckoview_aidl_src_path)/%.aidl
+	@echo "Processing AIDL: $< => $@"
+	$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(geckoview_aidl_src_path) -o$(geckoview_aidl_target_path) $<
+
+FENNEC_AIDLS = \
+  $(NULL)
+
+fennec_aidl_src_path := $(srcdir)/aidl
+fennec_aidl_target_path := generated
+fennec_aidl_targets := $(addprefix $(fennec_aidl_target_path)/,$(patsubst %.aidl,%.java,$(FENNEC_AIDLS:.java=)))
+
+$(fennec_aidl_targets): $(fennec_aidl_target_path)/%.java: $(fennec_aidl_src_path)/%.aidl
+	@echo "Processing AIDL: $< => $@"
+	$(AIDL) -p$(ANDROID_SDK)/framework.aidl -I$(fennec_aidl_src_path) -I$(geckoview_aidl_src_path) -o$(fennec_aidl_target_path) $<
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/without-gradle.mozbuild
@@ -0,0 +1,1641 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# The moz.build configuration bits that are only for --without-gradle.
+# Bug 1414415 tracks removing --without-gradle entirely, and this
+# separation will make that much easier when the time comes.
+
+if CONFIG['MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE']:
+   error('MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE must not be set for without-gradle.mozbuild')
+
+include('android-services.mozbuild')
+
+geckoview_source_dir = TOPSRCDIR + '/mobile/android/geckoview/src/main/'
+geckoview_thirdparty_source_dir = TOPSRCDIR + '/mobile/android/geckoview/src/thirdparty/'
+thirdparty_source_dir = TOPSRCDIR + '/mobile/android/thirdparty/'
+
+constants_jar = add_java_jar('constants')
+constants_jar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
+    'annotation/BuildFlag.java',
+    'annotation/JNITarget.java',
+    'annotation/ReflectionTarget.java',
+    'annotation/RobocopTarget.java',
+    'annotation/WebRTCJNITarget.java',
+    'annotation/WrapForJNI.java',
+    'SysInfo.java',
+]]
+constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
+    'adjust/AdjustHelperInterface.java',
+    'adjust/AttributionHelperListener.java',
+    'db/BrowserContract.java',
+    'LocaleManager.java',
+    'Locales.java',
+    'mma/MmaInterface.java',
+]]
+constants_jar.generated_sources = [
+    '../geckoview/generated/preprocessed/org/mozilla/geckoview/BuildConfig.java',
+    'generated/preprocessed/org/mozilla/gecko/AdjustConstants.java',
+    'generated/preprocessed/org/mozilla/gecko/AppConstants.java',
+    'generated/preprocessed/org/mozilla/gecko/MmaConstants.java',
+]
+constants_jar.extra_jars = [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+    CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB'],
+]
+
+if CONFIG['MOZ_INSTALL_TRACKING']:
+    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
+        'adjust/AdjustHelper.java',
+    ]]
+    constants_jar.extra_jars += [
+        'gecko-thirdparty-adjust_sdk.jar',
+    ]
+else:
+    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
+        'adjust/StubAdjustHelper.java',
+    ]]
+
+if CONFIG['MOZ_ANDROID_MMA']:
+    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
+        'mma/MmaLeanplumImp.java',
+    ]]
+    constants_jar.extra_jars += [
+        'gecko-thirdparty-leanplum_sdk.jar'
+    ]
+else:
+    constants_jar.sources += ['java/org/mozilla/gecko/' + x for x in [
+        'mma/MmaStubImp.java',
+    ]]
+
+resjar = add_java_jar('gecko-R')
+resjar.sources = []
+resjar.generated_sources += [
+    'generated/org/mozilla/gecko/R.java',
+]
+
+if CONFIG['ANDROID_SUPPORT_V4_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.v4']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_SUPPORT_V4_AAR_RES']]
+# (no resources) resjar.generated_sources += ['generated/android/support/v4/R.java']
+if CONFIG['ANDROID_APPCOMPAT_V7_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.v7.appcompat']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_APPCOMPAT_V7_AAR_RES']]
+    resjar.generated_sources += ['generated/android/support/v7/appcompat/R.java']
+if CONFIG['ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.graphics.drawable']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_RES']]
+# (no reosurces) resjar.generated_sources += ['generated/android/support/graphics/drawable/R.java']
+if CONFIG['ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.graphics.drawable.animated']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_RES']]
+# (no resources) resjar.generated_sources += ['generated/android/support/graphics/drawable/animated/R.java']
+if CONFIG['ANDROID_CARDVIEW_V7_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.v7.cardview']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_CARDVIEW_V7_AAR_RES']]
+    resjar.generated_sources += ['generated/android/support/v7/cardview/R.java']
+if CONFIG['ANDROID_DESIGN_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.design']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_DESIGN_AAR_RES']]
+    resjar.generated_sources += ['generated/android/support/design/R.java']
+if CONFIG['ANDROID_RECYCLERVIEW_V7_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.v7.recyclerview']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_RECYCLERVIEW_V7_AAR_RES']]
+    resjar.generated_sources += ['generated/android/support/v7/recyclerview/R.java']
+if CONFIG['ANDROID_CUSTOMTABS_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.customtabs']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_CUSTOMTABS_AAR_RES']]
+# (no resources) resjar.generated_sources += ['generated/android/support/customtabs/R.java']
+if CONFIG['ANDROID_PALETTE_V7_AAR']:
+    ANDROID_EXTRA_PACKAGES += ['android.support.v7.palette']
+    ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PALETTE_V7_AAR_RES']]
+# (no resources) resjar.generated_sources += ['generated/android/support/v7/palette/R.java']
+
+resjar.javac_flags += ['-Xlint:all']
+
+mgjar = add_java_jar('gecko-mozglue')
+mgjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
+    'mozglue/ByteBufferInputStream.java',
+    'mozglue/DirectBufferAllocator.java',
+    'mozglue/GeckoLoader.java',
+    'mozglue/JNIObject.java',
+    'mozglue/NativeReference.java',
+    'mozglue/NativeZip.java',
+    'mozglue/SafeIntent.java',
+    'mozglue/SharedMemory.java',
+]]
+mgjar.generated_sources = [] # Keep it this way.
+mgjar.extra_jars += [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    'constants.jar',
+]
+mgjar.javac_flags += ['-Xlint:all']
+
+gujar = add_java_jar('gecko-util')
+gujar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
+    'util/ActivityResultHandler.java',
+    'util/ActivityResultHandlerMap.java',
+    'util/ActivityUtils.java',
+    'util/BundleEventListener.java',
+    'util/ContextUtils.java',
+    'util/DateUtil.java',
+    'util/EventCallback.java',
+    'util/FileUtils.java',
+    'util/FloatUtils.java',
+    'util/GamepadUtils.java',
+    'util/GeckoBackgroundThread.java',
+    'util/GeckoBundle.java',
+    'util/GeckoJarReader.java',
+    'util/HardwareCodecCapabilityUtils.java',
+    'util/HardwareUtils.java',
+    'util/INIParser.java',
+    'util/INISection.java',
+    'util/InputOptionsUtils.java',
+    'util/IntentUtils.java',
+    'util/IOUtils.java',
+    'util/JSONUtils.java',
+    'util/MapUtils.java',
+    'util/MenuUtils.java',
+    'util/NetworkUtils.java',
+    'util/NonEvictingLruCache.java',
+    'util/PrefUtils.java',
+    'util/ProxySelector.java',
+    'util/publicsuffix/PublicSuffix.java',
+    'util/publicsuffix/PublicSuffixPatterns.java',
+    'util/RawResource.java',
+    'util/StringUtils.java',
+    'util/ThreadUtils.java',
+    'util/UIAsyncTask.java',
+    'util/UUIDUtil.java',
+    'util/WeakReferenceHandler.java',
+    'util/WindowUtils.java',
+]]
+gujar.extra_jars = [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+    'constants.jar',
+    'gecko-mozglue.jar',
+]
+gujar.javac_flags += ['-Xlint:all,-deprecation']
+
+stjar = add_java_jar('sync-thirdparty')
+stjar.sources += [ thirdparty_source_dir + f for f in sync_thirdparty_java_files ]
+stjar.javac_flags = ['-Xlint:none']
+
+services_jar = add_java_jar('services')
+services_jar.sources += sync_java_files
+services_jar.extra_jars = [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+    CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB'],
+    'constants.jar',
+    'gecko-R.jar',
+    'gecko-mozglue.jar',
+    'gecko-thirdparty.jar',
+    'gecko-util.jar',
+    'sync-thirdparty.jar',
+]
+services_jar.javac_flags += ['-Xlint:all,-deprecation']
+
+if CONFIG['MOZ_WEBRTC']:
+    base_root = TOPSRCDIR + '/media/webrtc/trunk/webrtc/base/java/src/org/webrtc/'
+    video_capture_root = TOPSRCDIR + '/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/'
+    audio_root = TOPSRCDIR + '/media/webrtc/trunk/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/'
+    wrjar = add_java_jar('webrtc')
+    wrjar.sources += [
+        base_root + 'Logging.java',
+        base_root + 'ThreadUtils.java',
+    ]
+    wrjar.sources += [
+        video_capture_root + 'CaptureCapabilityAndroid.java',
+        video_capture_root + 'VideoCaptureAndroid.java',
+        video_capture_root + 'VideoCaptureDeviceInfoAndroid.java',
+    ]
+    wrjar.sources += [
+        audio_root + 'BuildInfo.java',
+        audio_root + 'WebRtcAudioEffects.java',
+        audio_root + 'WebRtcAudioManager.java',
+        audio_root + 'WebRtcAudioRecord.java',
+        audio_root + 'WebRtcAudioTrack.java',
+        audio_root + 'WebRtcAudioUtils.java',
+    ]
+    wrjar.extra_jars = [
+        'constants.jar',
+        'gecko-R.jar',
+        'gecko-browser.jar',
+        'gecko-mozglue.jar',
+        'gecko-util.jar',
+        'gecko-view.jar',
+    ]
+    wrjar.javac_flags += ['-Xlint:all,-deprecation,-cast']
+
+gvjar = add_java_jar('gecko-view')
+
+gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x
+                  for x in [
+    'AndroidGamepadManager.java',
+    'Clipboard.java',
+    'CrashHandler.java',
+    'EventDispatcher.java',
+    'GeckoAppShell.java',
+    'GeckoBatteryManager.java',
+    'GeckoEditable.java',
+    'GeckoEditableChild.java',
+    'GeckoEditableClient.java',
+    'GeckoEditableListener.java',
+    'GeckoHalDefines.java',
+    'GeckoInputConnection.java',
+    'GeckoNetworkManager.java',
+    'GeckoProfile.java',
+    'GeckoProfileDirectories.java',
+    'GeckoScreenOrientation.java',
+    'GeckoSession.java',
+    'GeckoSessionHandler.java',
+    'GeckoSessionSettings.java',
+    'GeckoSharedPrefs.java',
+    'GeckoThread.java',
+    'GeckoView.java',
+    'GeckoVRManager.java',
+    'gfx/BitmapUtils.java',
+    'gfx/BufferedImage.java',
+    'gfx/BufferedImageGLInfo.java',
+    'gfx/DynamicToolbarAnimator.java',
+    'gfx/FloatSize.java',
+    'gfx/FullScreenState.java',
+    'gfx/GeckoDisplay.java',
+    'gfx/GeckoLayerClient.java',
+    'gfx/GeckoSurface.java',
+    'gfx/GeckoSurfaceTexture.java',
+    'gfx/ImmutableViewportMetrics.java',
+    'gfx/IntSize.java',
+    'gfx/LayerSession.java',
+    'gfx/LayerView.java',
+    'gfx/NativePanZoomController.java',
+    'gfx/Overscroll.java',
+    'gfx/OverscrollEdgeEffect.java',
+    'gfx/PanningPerfAPI.java',
+    'gfx/PanZoomController.java',
+    'gfx/PointUtils.java',
+    'gfx/RenderTask.java',
+    'gfx/StackScroller.java',
+    'gfx/SurfaceAllocator.java',
+    'gfx/SurfaceAllocatorService.java',
+    'gfx/SurfaceTextureListener.java',
+    'gfx/ViewTransform.java',
+    'gfx/VsyncSource.java',
+    'HapticFeedbackDelegate.java',
+    'InputConnectionListener.java',
+    'InputMethods.java',
+    'media/AsyncCodec.java',
+    'media/AsyncCodecFactory.java',
+    'media/BaseHlsPlayer.java',
+    'media/Codec.java',
+    'media/CodecProxy.java',
+    'media/FormatParam.java',
+    'media/GeckoAudioInfo.java',
+    'media/GeckoHLSDemuxerWrapper.java',
+    'media/GeckoHLSResourceWrapper.java',
+    'media/GeckoHLSSample.java',
+    'media/GeckoMediaDrm.java',
+    'media/GeckoMediaDrmBridgeV21.java',
+    'media/GeckoMediaDrmBridgeV23.java',
+    'media/GeckoPlayerFactory.java',
+    'media/GeckoVideoInfo.java',
+    'media/JellyBeanAsyncCodec.java',
+    'media/LollipopAsyncCodec.java',
+    'media/MediaDrmProxy.java',
+    'media/MediaManager.java',
+    'media/RemoteManager.java',
+    'media/RemoteMediaDrmBridge.java',
+    'media/RemoteMediaDrmBridgeStub.java',
+    'media/Sample.java',
+    'media/SamplePool.java',
+    'media/SessionKeyInfo.java',
+    'media/SharedMemBuffer.java',
+    'NativeQueue.java',
+    'NotificationListener.java',
+    'NSSBridge.java',
+    'permissions/PermissionBlock.java',
+    'permissions/Permissions.java',
+    'permissions/PermissionsHelper.java',
+    'PrefsHelper.java',
+    'process/GeckoProcessManager.java',
+    'process/GeckoServiceChildProcess.java',
+    'ScreenManagerHelper.java',
+    'ScreenOrientationDelegate.java',
+    'sqlite/ByteBufferInputStream.java',
+    'sqlite/MatrixBlobCursor.java',
+    'sqlite/SQLiteBridge.java',
+    'sqlite/SQLiteBridgeException.java',
+    'TouchEventInterceptor.java',
+    'WakeLockDelegate.java',
+]]
+
+if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
+    gvjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
+        'media/GeckoHlsAudioRenderer.java',
+        'media/GeckoHlsPlayer.java',
+        'media/GeckoHlsRendererBase.java',
+        'media/GeckoHlsVideoRenderer.java',
+        'media/Utils.java',
+    ]]
+
+
+gvjar.extra_jars += [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+    CONFIG['ANDROID_PALETTE_V7_AAR_LIB'],
+    'constants.jar',
+    'gecko-mozglue.jar',
+    'gecko-util.jar',
+]
+
+gvjar.javac_flags += [
+    '-Xlint:all,-deprecation,-fallthrough',
+    '-J-Xmx512m',
+    '-J-Xms128m'
+]
+
+
+gbjar = add_java_jar('gecko-browser')
+
+gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
+    'AboutPages.java',
+    'AccountsHelper.java',
+    'ActionBarTextSelection.java',
+    'ActionModeCompat.java',
+    'ActionModeCompatView.java',
+    'ActivityHandlerHelper.java',
+    'activitystream/ActivityStream.java',
+    'activitystream/ActivityStreamTelemetry.java',
+    'activitystream/homepanel/ActivityStreamConfiguration.java',
+    'activitystream/homepanel/ActivityStreamHomeFragment.java',
+    'activitystream/homepanel/ActivityStreamHomeScreen.java',
+    'activitystream/homepanel/ActivityStreamPanel.java',
+    'activitystream/homepanel/HighlightsDividerItemDecoration.java',
+    'activitystream/homepanel/HighlightsLoader.java',
+    'activitystream/homepanel/menu/ActivityStreamContextMenu.java',
+    'activitystream/homepanel/menu/BottomSheetContextMenu.java',
+    'activitystream/homepanel/menu/PopupContextMenu.java',
+    'activitystream/homepanel/model/Highlight.java',
+    'activitystream/homepanel/model/Metadata.java',
+    'activitystream/homepanel/model/RowModel.java',
+    'activitystream/homepanel/model/TopSite.java',
+    'activitystream/homepanel/model/TopStory.java',
+    'activitystream/homepanel/model/WebpageModel.java',
+    'activitystream/homepanel/model/WebpageRowModel.java',
+    'activitystream/homepanel/stream/HighlightsEmptyStateRow.java',
+    'activitystream/homepanel/stream/LearnMoreRow.java',
+    'activitystream/homepanel/stream/StreamOverridablePageIconLayout.java',
+    'activitystream/homepanel/stream/StreamTitleRow.java',
+    'activitystream/homepanel/stream/StreamViewHolder.java',
+    'activitystream/homepanel/stream/TopPanelRow.java',
+    'activitystream/homepanel/stream/WebpageItemRow.java',
+    'activitystream/homepanel/StreamItemAnimator.java',
+    'activitystream/homepanel/StreamRecyclerAdapter.java',
+    'activitystream/homepanel/topsites/TopSitesCard.java',
+    'activitystream/homepanel/topsites/TopSitesPage.java',
+    'activitystream/homepanel/topsites/TopSitesPageAdapter.java',
+    'activitystream/homepanel/topsites/TopSitesPagerAdapter.java',
+    'activitystream/homepanel/topstories/PocketStoriesLoader.java',
+    'activitystream/ranking/HighlightCandidate.java',
+    'activitystream/ranking/HighlightCandidateCursorIndices.java',
+    'activitystream/ranking/HighlightsRanking.java',
+    'activitystream/ranking/RankingUtils.java',
+    'activitystream/Utils.java',
+    'adjust/AdjustBrowserAppDelegate.java',
+    'animation/AnimationUtils.java',
+    'animation/HeightChangeAnimation.java',
+    'animation/PropertyAnimator.java',
+    'animation/Rotate3DAnimation.java',
+    'animation/ViewHelper.java',
+    'ANRReporter.java',
+    'bookmarks/BookmarkEditFragment.java',
+    'bookmarks/BookmarkUtils.java',
+    'bookmarks/CreateFolderCallback.java',
+    'bookmarks/CreateFolderFragment.java',
+    'bookmarks/EditBookmarkTask.java',
+    'bookmarks/SelectFolderCallback.java',
+    'bookmarks/SelectFolderFragment.java',
+    'BrowserApp.java',
+    'BrowserLocaleManager.java',
+    'cleanup/FileCleanupController.java',
+    'cleanup/FileCleanupService.java',
+    'CustomEditText.java',
+    'customtabs/ActionBarPresenter.java',
+    'customtabs/CustomTabsActivity.java',
+    'customtabs/CustomTabsSecurityPopup.java',
+    'customtabs/GeckoCustomTabsService.java',
+    'customtabs/IntentUtil.java',
+    'DataReportingNotification.java',
+    'dawn/DawnHelper.java',
+    'db/AbstractPerProfileDatabaseProvider.java',
+    'db/AbstractTransactionalProvider.java',
+    'db/BaseTable.java',
+    'db/BrowserDatabaseHelper.java',
+    'db/BrowserDB.java',
+    'db/BrowserProvider.java',
+    'db/DBUtils.java',
+    'db/FormHistoryProvider.java',
+    'db/HomeProvider.java',
+    'db/LocalBrowserDB.java',
+    'db/LocalSearches.java',
+    'db/LocalTabsAccessor.java',
+    'db/LocalUrlAnnotations.java',
+    'db/LocalURLMetadata.java',
+    'db/LoginsProvider.java',
+    'db/PasswordsProvider.java',
+    'db/PerProfileDatabases.java',
+    'db/RemoteClient.java',
+    'db/RemoteTab.java',
+    'db/Searches.java',
+    'db/SearchHistoryProvider.java',
+    'db/SharedBrowserDatabaseProvider.java',
+    'db/SQLiteBridgeContentProvider.java',
+    'db/SuggestedSites.java',
+    'db/Table.java',
+    'db/TabsAccessor.java',
+    'db/TabsProvider.java',
+    'db/UrlAnnotations.java',
+    'db/URLImageDataTable.java',
+    'db/URLMetadata.java',
+    'deeplink/DeepLinkContract.java',
+    'delegates/BookmarkStateChangeDelegate.java',
+    'delegates/BrowserAppDelegate.java',
+    'delegates/BrowserAppDelegateWithReference.java',
+    'delegates/OfflineTabStatusDelegate.java',
+    'delegates/ScreenshotDelegate.java',
+    'delegates/TabsTrayVisibilityAwareDelegate.java',
+    'DevToolsAuthHelper.java',
+    'distribution/Distribution.java',
+    'distribution/DistributionStoreCallback.java',
+    'distribution/PartnerBookmarksProviderProxy.java',
+    'distribution/PartnerBrowserCustomizationsClient.java',
+    'distribution/ReferrerDescriptor.java',
+    'distribution/ReferrerReceiver.java',
+    'dlc/BaseAction.java',
+    'dlc/catalog/DownloadContent.java',
+    'dlc/catalog/DownloadContentBuilder.java',
+    'dlc/catalog/DownloadContentCatalog.java',
+    'dlc/CleanupAction.java',
+    'dlc/DownloadAction.java',
+    'dlc/DownloadContentService.java',
+    'dlc/DownloadContentTelemetry.java',
+    'dlc/StudyAction.java',
+    'dlc/SyncAction.java',
+    'dlc/VerifyAction.java',
+    'DoorHangerPopup.java',
+    'DownloadsIntegration.java',
+    'drawable/DrawableWrapper.java',
+    'drawable/ShiftDrawable.java',
+    'DynamicToolbar.java',
+    'EditBookmarkDialog.java',
+    'Experiments.java',
+    'extensions/ExtensionPermissionsHelper.java',
+    'FilePicker.java',
+    'FilePickerResultHandler.java',
+    'FindInPageBar.java',
+    'firstrun/DataPanel.java',
+    'firstrun/FirstrunAnimationContainer.java',
+    'firstrun/FirstrunPager.java',
+    'firstrun/FirstrunPagerConfig.java',
+    'firstrun/FirstrunPanel.java',
+    'firstrun/LastPanel.java',
+    'firstrun/RestrictedWelcomePanel.java',
+    'firstrun/SyncPanel.java',
+    'firstrun/TabQueuePanel.java',
+    'FormAssistPopup.java',
+    'GeckoAccessibility.java',
+    'GeckoActivity.java',
+    'GeckoActivityMonitor.java',
+    'GeckoApp.java',
+    'GeckoApplication.java',
+    'GeckoFontScaleListener.java',
+    'GeckoJavaSampler.java',
+    'GeckoMessageReceiver.java',
+    'GeckoProfilesProvider.java',
+    'GeckoService.java',
+    'GeckoUpdateReceiver.java',
+    'GlobalHistory.java',
+    'GlobalPageMetadata.java',
+    'GuestSession.java',
+    'health/HealthRecorder.java',
+    'health/SessionInformation.java',
+    'health/StubbedHealthRecorder.java',
+    'home/BookmarkFolderView.java',
+    'home/BookmarkScreenshotRow.java',
+    'home/BookmarksListAdapter.java',
+    'home/BookmarksListView.java',
+    'home/BookmarksPanel.java',
+    'home/BrowserSearch.java',
+    'home/ClientsAdapter.java',
+    'home/CombinedHistoryAdapter.java',
+    'home/CombinedHistoryItem.java',
+    'home/CombinedHistoryPanel.java',
+    'home/CombinedHistoryRecyclerView.java',
+    'home/DynamicPanel.java',
+    'home/FramePanelLayout.java',
+    'home/HistorySectionsHelper.java',
+    'home/HomeAdapter.java',
+    'home/HomeBanner.java',
+    'home/HomeConfig.java',
+    'home/HomeConfigLoader.java',
+    'home/HomeConfigPrefsBackend.java',
+    'home/HomeContextMenuInfo.java',
+    'home/HomeFragment.java',
+    'home/HomeListView.java',
+    'home/HomePager.java',
+    'home/HomePanelsManager.java',
+    'home/HomeScreen.java',
+    'home/ImageLoader.java',
+    'home/MultiTypeCursorAdapter.java',
+    'home/PanelAuthCache.java',
+    'home/PanelAuthLayout.java',
+    'home/PanelBackItemView.java',
+    'home/PanelHeaderView.java',
+    'home/PanelInfoManager.java',
+    'home/PanelItemView.java',
+    'home/PanelLayout.java',
+    'home/PanelListView.java',
+    'home/PanelRecyclerView.java',
+    'home/PanelRecyclerViewAdapter.java',
+    'home/PanelRefreshLayout.java',
+    'home/PanelViewAdapter.java',
+    'home/PanelViewItemHandler.java',
+    'home/PinSiteDialog.java',
+    'home/RecentTabsAdapter.java',
+    'home/RemoteTabsExpandableListState.java',
+    'home/SearchEngine.java',
+    'home/SearchEngineAdapter.java',
+    'home/SearchEngineBar.java',
+    'home/SearchLoader.java',
+    'home/SimpleCursorLoader.java',
+    'home/SpacingDecoration.java',
+    'home/TabMenuStrip.java',
+    'home/TabMenuStripLayout.java',
+    'home/TopSitesGridItemView.java',
+    'home/TopSitesGridView.java',
+    'home/TopSitesPanel.java',
+    'home/TopSitesThumbnailView.java',
+    'home/TwoLinePageRow.java',
+    'icons/decoders/FaviconDecoder.java',
+    'icons/decoders/ICODecoder.java',
+    'icons/decoders/IconDirectoryEntry.java',
+    'icons/decoders/LoadFaviconResult.java',
+    'icons/IconCallback.java',
+    'icons/IconDescriptor.java',
+    'icons/IconDescriptorComparator.java',
+    'icons/IconRequest.java',
+    'icons/IconRequestBuilder.java',
+    'icons/IconRequestExecutor.java',
+    'icons/IconResponse.java',
+    'icons/Icons.java',
+    'icons/IconsHelper.java',
+    'icons/IconTask.java',
+    'icons/loader/ContentProviderLoader.java',
+    'icons/loader/DataUriLoader.java',
+    'icons/loader/DiskLoader.java',
+    'icons/loader/IconDownloader.java',
+    'icons/loader/IconGenerator.java',
+    'icons/loader/IconLoader.java',
+    'icons/loader/JarLoader.java',
+    'icons/loader/LegacyLoader.java',
+    'icons/loader/MemoryLoader.java',
+    'icons/loader/SuggestedSiteLoader.java',
+    'icons/preparation/AboutPagesPreparer.java',
+    'icons/preparation/AddDefaultIconUrl.java',
+    'icons/preparation/FilterKnownFailureUrls.java',
+    'icons/preparation/FilterMimeTypes.java',
+    'icons/preparation/FilterPrivilegedUrls.java',
+    'icons/preparation/LookupIconUrl.java',
+    'icons/preparation/Preparer.java',
+    'icons/preparation/SuggestedSitePreparer.java',
+    'icons/processing/ColorProcessor.java',
+    'icons/processing/DiskProcessor.java',
+    'icons/processing/MemoryProcessor.java',
+    'icons/processing/MinimumSizeProcessor.java',
+    'icons/processing/Processor.java',
+    'icons/processing/ResizingProcessor.java',
+    'icons/storage/DiskStorage.java',
+    'icons/storage/FailureCache.java',
+    'icons/storage/MemoryStorage.java',
+    'IntentHelper.java',
+    'LauncherActivity.java',
+    'lwt/LightweightTheme.java',
+    'lwt/LightweightThemeDrawable.java',
+    'mdns/MulticastDNSManager.java',
+    'media/AudioFocusAgent.java',
+    'media/MediaControlService.java',
+    'media/VideoPlayer.java',
+    'MediaCastingBar.java',
+    'MemoryMonitor.java',
+    'menu/GeckoMenu.java',
+    'menu/GeckoMenuInflater.java',
+    'menu/GeckoMenuItem.java',
+    'menu/GeckoSubMenu.java',
+    'menu/MenuItemActionBar.java',
+    'menu/MenuItemDefault.java',
+    'menu/MenuItemIcon.java',
+    'menu/MenuItemSwitcherLayout.java',
+    'menu/MenuPanel.java',
+    'menu/MenuPopup.java',
+    'mma/MmaDelegate.java',
+    'MotionEventInterceptor.java',
+    'notifications/NotificationClient.java',
+    'notifications/NotificationHelper.java',
+    'notifications/NotificationReceiver.java',
+    'notifications/NotificationService.java',
+    'notifications/WhatsNewReceiver.java',
+    'overlays/OverlayConstants.java',
+    'overlays/service/OverlayActionService.java',
+    'overlays/service/ShareData.java',
+    'overlays/service/sharemethods/AddBookmark.java',
+    'overlays/service/sharemethods/SendTab.java',
+    'overlays/service/sharemethods/ShareMethod.java',
+    'overlays/ui/OverlayDialogButton.java',
+    'overlays/ui/SendTabDeviceListArrayAdapter.java',
+    'overlays/ui/SendTabList.java',
+    'overlays/ui/SendTabTargetSelectedListener.java',
+    'overlays/ui/ShareDialog.java',
+    'PackageReplacedReceiver.java',
+    'preferences/AlignRightLinkPreference.java',
+    'preferences/AndroidImport.java',
+    'preferences/AndroidImportPreference.java',
+    'preferences/AppCompatPreferenceActivity.java',
+    'preferences/ClearOnShutdownPref.java',
+    'preferences/CustomCheckBoxPreference.java',
+    'preferences/CustomListCategory.java',
+    'preferences/CustomListPreference.java',
+    'preferences/DistroSharedPrefsImport.java',
+    'preferences/GeckoPreferenceFragment.java',
+    'preferences/GeckoPreferences.java',
+    'preferences/LinkPreference.java',
+    'preferences/ListCheckboxPreference.java',
+    'preferences/LocaleListPreference.java',
+    'preferences/ModifiableHintPreference.java',
+    'preferences/MultiChoicePreference.java',
+    'preferences/MultiPrefMultiChoicePreference.java',
+    'preferences/PanelsPreference.java',
+    'preferences/PanelsPreferenceCategory.java',
+    'preferences/PrivateDataPreference.java',
+    'preferences/SearchEnginePreference.java',
+    'preferences/SearchPreferenceCategory.java',
+    'preferences/SetHomepagePreference.java',
+    'preferences/SyncPreference.java',
+    'preferences/TopSitesPanelsPreference.java',
+    'PrintHelper.java',
+    'PrivateTab.java',
+    'promotion/AddToHomeScreenPromotion.java',
+    'promotion/HomeScreenPrompt.java',
+    'promotion/ReaderViewBookmarkPromotion.java',
+    'promotion/SimpleHelperUI.java',
+    'prompts/ColorPickerInput.java',
+    'prompts/IconGridInput.java',
+    'prompts/IntentChooserPrompt.java',
+    'prompts/IntentHandler.java',
+    'prompts/Prompt.java',
+    'prompts/PromptInput.java',
+    'prompts/PromptListAdapter.java',
+    'prompts/PromptListItem.java',
+    'prompts/PromptService.java',
+    'prompts/TabInput.java',
+    'reader/ReaderModeUtils.java',
+    'reader/ReadingListHelper.java',
+    'reader/SavedReaderViewHelper.java',
+    'RemoteClientsDialogFragment.java',
+    'Restarter.java',
+    'restrictions/DefaultConfiguration.java',
+    'restrictions/GuestProfileConfiguration.java',
+    'restrictions/Restrictable.java',
+    'restrictions/RestrictedProfileConfiguration.java',
+    'restrictions/RestrictionCache.java',
+    'restrictions/RestrictionConfiguration.java',
+    'restrictions/RestrictionProvider.java',
+    'restrictions/Restrictions.java',
+    'ScreenshotObserver.java',
+    'search/SearchEngine.java',
+    'search/SearchEngineManager.java',
+    'SessionParser.java',
+    'SharedPreferencesHelper.java',
+    'SiteIdentity.java',
+    'SnackbarBuilder.java',
+    'SuggestClient.java',
+    'switchboard/AsyncConfigLoader.java',
+    'switchboard/DeviceUuidFactory.java',
+    'switchboard/Preferences.java',
+    'switchboard/Switch.java',
+    'switchboard/SwitchBoard.java',
+    'Tab.java',
+    'tabqueue/TabQueueHelper.java',
+    'tabqueue/TabQueuePrompt.java',
+    'tabqueue/TabQueueService.java',
+    'tabqueue/TabReceivedService.java',
+    'Tabs.java',
+    'tabs/AutoFitTabsGridLayout.java',
+    'tabs/CompactTabsGridLayout.java',
+    'tabs/PrivateTabsPanel.java',
+    'tabs/TabCurve.java',
+    'tabs/TabHistoryController.java',
+    'tabs/TabHistoryFragment.java',
+    'tabs/TabHistoryItemRow.java',
+    'tabs/TabHistoryPage.java',
+    'tabs/TabPanelBackButton.java',
+    'tabs/TabsGridLayout.java',
+    'tabs/TabsGridLayoutAnimator.java',
+    'tabs/TabsLayout.java',
+    'tabs/TabsLayoutAdapter.java',
+    'tabs/TabsLayoutItemView.java',
+    'tabs/TabsListLayout.java',
+    'tabs/TabsListLayoutAnimator.java',
+    'tabs/TabsPanel.java',
+    'tabs/TabsPanelThumbnailView.java',
+    'tabs/TabsTouchHelperCallback.java',
+    'Telemetry.java',
+    'telemetry/measurements/CampaignIdMeasurements.java',
+    'telemetry/measurements/SearchCountMeasurements.java',
+    'telemetry/measurements/SessionMeasurements.java',
+    'telemetry/pingbuilders/TelemetryCorePingBuilder.java',
+    'telemetry/pingbuilders/TelemetryLocalPingBuilder.java',
+    'telemetry/pingbuilders/TelemetryPingBuilder.java',
+    'telemetry/pingbuilders/TelemetrySyncEventPingBuilder.java',
+    'telemetry/pingbuilders/TelemetrySyncPingBuilder.java',
+    'telemetry/pingbuilders/TelemetrySyncPingBundleBuilder.java',
+    'telemetry/schedulers/TelemetryUploadAllPingsImmediatelyScheduler.java',
+    'telemetry/schedulers/TelemetryUploadScheduler.java',
+    'telemetry/stores/TelemetryJSONFilePingStore.java',
+    'telemetry/stores/TelemetryPingStore.java',
+    'telemetry/TelemetryBackgroundReceiver.java',
+    'telemetry/TelemetryConstants.java',
+    'telemetry/TelemetryCorePingDelegate.java',
+    'telemetry/TelemetryDispatcher.java',
+    'telemetry/TelemetryLocalPing.java',
+    'telemetry/TelemetryOutgoingPing.java',
+    'telemetry/TelemetryPing.java',
+    'telemetry/TelemetryPreferences.java',
+    'telemetry/TelemetryUploadService.java',
+    'TelemetryContract.java',
+    'text/FloatingActionModeCallback.java',
+    'text/FloatingToolbarTextSelection.java',
+    'text/TextAction.java',
+    'text/TextSelection.java',
+    'ThumbnailHelper.java',
+    'toolbar/AutocompleteHandler.java',
+    'toolbar/BackButton.java',
+    'toolbar/BrowserToolbar.java',
+    'toolbar/BrowserToolbarPhone.java',
+    'toolbar/BrowserToolbarPhoneBase.java',
+    'toolbar/CanvasDelegate.java',
+    'toolbar/NavButton.java',
+    'toolbar/PageActionLayout.java',
+    'toolbar/PhoneTabsButton.java',
+    'toolbar/PwaConfirm.java',
+    'toolbar/PwaOnboarding.java',
+    'toolbar/SecurityModeUtil.java',
+    'toolbar/ShapedButton.java',
+    'toolbar/ShapedButtonFrameLayout.java',
+    'toolbar/SiteIdentityPopup.java',
+    'toolbar/ToolbarEditLayout.java',
+    'toolbar/ToolbarEditText.java',
+    'toolbar/ToolbarPrefs.java',
+    'trackingprotection/TrackingProtectionPrompt.java',
+    'updater/PostUpdateHandler.java',
+    'updater/UpdateService.java',
+    'updater/UpdateServiceHelper.java',
+    'util/ColorUtil.java',
+    'util/DrawableUtil.java',
+    'util/JavaUtil.java',
+    'util/PackageUtil.java',
+    'util/ResourceDrawableUtils.java',
+    'util/ShortcutUtils.java',
+    'util/TouchTargetUtil.java',
+    'util/URIUtils.java',
+    'util/ViewUtil.java',
+    'util/WindowUtil.java',
+    'webapps/WebAppActivity.java',
+    'webapps/WebAppIndexer.java',
+    'webapps/WebAppManifest.java',
+    'webapps/WebApps.java',
+    'widget/ActionModePresenter.java',
+    'widget/ActivityChooserModel.java',
+    'widget/AllCapsTextView.java',
+    'widget/AnchoredPopup.java',
+    'widget/AnimatedHeightLayout.java',
+    'widget/AnimatedProgressBar.java',
+    'widget/BasicColorPicker.java',
+    'widget/CheckableFadedSingleColorTextView.java',
+    'widget/CheckableLinearLayout.java',
+    'widget/ClickableWhenDisabledEditText.java',
+    'widget/ContentSecurityDoorHanger.java',
+    'widget/CropImageView.java',
+    'widget/DateTimePicker.java',
+    'widget/DefaultDoorHanger.java',
+    'widget/DefaultItemAnimatorBase.java',
+    'widget/DoorHanger.java',
+    'widget/DoorhangerConfig.java',
+    'widget/EllipsisTextView.java',
+    'widget/ExternalIntentDuringPrivateBrowsingPromptFragment.java',
+    'widget/FadedHorizontalScrollView.java',
+    'widget/FadedMultiColorTextView.java',
+    'widget/FadedSingleColorTextView.java',
+    'widget/FadedTextView.java',
+    'widget/FaviconView.java',
+    'widget/FilledCardView.java',
+    'widget/FlowLayout.java',
+    'widget/GeckoActionProvider.java',
+    'widget/GeckoPopupMenu.java',
+    'widget/GridSpacingDecoration.java',
+    'widget/HistoryDividerItemDecoration.java',
+    'widget/HoverDelegateWithReset.java',
+    'widget/IconTabWidget.java',
+    'widget/LoginDoorHanger.java',
+    'widget/RecyclerViewClickSupport.java',
+    'widget/ResizablePathDrawable.java',
+    'widget/RoundedCornerLayout.java',
+    'widget/SiteLogins.java',
+    'widget/SplashScreen.java',
+    'widget/SquaredImageView.java',
+    'widget/SquaredRelativeLayout.java',
+    'widget/SwipeDismissListViewTouchListener.java',
+    'widget/SwitchPreferenceView.java',
+    'widget/TabThumbnailWrapper.java',
+    'widget/ThumbnailView.java',
+    'widget/TouchDelegateWithReset.java',
+]]
+# The following sources are checked in to version control but
+# generated by a script (java/org/mozilla/gecko/widget/themed/generate_themed_views.py).
+# If you're editing this list, make sure to edit that script.
+gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
+    'widget/themed/ThemedEditText.java',
+    'widget/themed/ThemedFrameLayout.java',
+    'widget/themed/ThemedImageButton.java',
+    'widget/themed/ThemedImageView.java',
+    'widget/themed/ThemedLinearLayout.java',
+    'widget/themed/ThemedListView.java',
+    'widget/themed/ThemedProgressBar.java',
+    'widget/themed/ThemedRelativeLayout.java',
+    'widget/themed/ThemedTextSwitcher.java',
+    'widget/themed/ThemedTextView.java',
+    'widget/themed/ThemedView.java',
+]]
+gbjar.sources += [thirdparty_source_dir + f for f in [
+    'com/googlecode/eyesfree/braille/selfbraille/ISelfBrailleService.java',
+    'com/googlecode/eyesfree/braille/selfbraille/SelfBrailleClient.java',
+    'com/googlecode/eyesfree/braille/selfbraille/WriteData.java',
+]]
+# The following sources are Photon specific, Eventually they should be merged into base.
+gbjar.sources += ['../app/src/photon/java/org/mozilla/gecko/' + x for x in [
+    'home/SearchEngineRow.java',
+    'home/SuggestionItem.java',
+    'toolbar/BrowserToolbarTablet.java',
+    'toolbar/BrowserToolbarTabletBase.java',
+    'toolbar/ForwardButton.java',
+    'toolbar/TabCounter.java',
+    'toolbar/ToolbarDisplayLayout.java',
+    'toolbar/ToolbarRoundButton.java',
+]]
+
+android_package_dir = CONFIG['ANDROID_PACKAGE_NAME'].replace('.', '/')
+gbjar.generated_sources = [] # Keep it this way.
+gbjar.extra_jars += [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+    'constants.jar',
+]
+if CONFIG['MOZ_CRASHREPORTER']:
+    gbjar.sources += [ 'java/org/mozilla/gecko/CrashReporter.java' ]
+    ANDROID_RES_DIRS += [ 'crashreporter/res' ]
+
+if CONFIG['MOZ_ANDROID_GCM']:
+    gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
+        'gcm/GcmInstanceIDListenerService.java',
+        'gcm/GcmMessageListenerService.java',
+        'gcm/GcmTokenClient.java',
+        'push/Fetched.java',
+        'push/PushClient.java',
+        'push/PushManager.java',
+        'push/PushRegistration.java',
+        'push/PushService.java',
+        'push/PushState.java',
+        'push/PushSubscription.java',
+    ]]
+
+if (CONFIG['MOZ_ANDROID_MAX_SDK_VERSION']):
+    max_sdk_version = int(CONFIG['MOZ_ANDROID_MAX_SDK_VERSION'])
+else:
+    max_sdk_version = 999
+
+# Only bother to include new tablet code if we're building for tablet-capable
+# OS releases.
+if max_sdk_version >= 11:
+    gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
+        'tabs/TabStrip.java',
+        'tabs/TabStripAdapter.java',
+        'tabs/TabStripDividerItem.java',
+        'tabs/TabStripItemAnimator.java',
+        'tabs/TabStripItemView.java',
+        'tabs/TabStripView.java'
+    ]]
+
+gbjar.extra_jars += [
+    'gecko-R.jar',
+    'gecko-mozglue.jar',
+    'gecko-thirdparty.jar',
+    'gecko-util.jar',
+    'gecko-view.jar',
+    'sync-thirdparty.jar',
+    'services.jar',
+]
+
+moz_native_devices_jars = [
+    CONFIG['ANDROID_MEDIAROUTER_V7_AAR_LIB'],
+    CONFIG['ANDROID_MEDIAROUTER_V7_AAR_INTERNAL_LIB'],
+    CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_LIB'],
+    CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
+    CONFIG['ANDROID_PLAY_SERVICES_CAST_AAR_LIB'],
+]
+moz_native_devices_sources = ['java/org/mozilla/gecko/' + x for x in [
+    'ChromeCastDisplay.java',
+    'ChromeCastPlayer.java',
+    'GeckoMediaPlayer.java',
+    'GeckoPresentationDisplay.java',
+    'MediaPlayerManager.java',
+    'PresentationMediaPlayerManager.java',
+    'RemotePresentationService.java',
+]]
+if CONFIG['MOZ_NATIVE_DEVICES']:
+    gbjar.extra_jars += moz_native_devices_jars
+    gbjar.sources += moz_native_devices_sources
+
+    if CONFIG['ANDROID_MEDIAROUTER_V7_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['android.support.v7.mediarouter']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_MEDIAROUTER_V7_AAR_RES']]
+        resjar.generated_sources += ['generated/android/support/v7/mediarouter/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.base']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/base/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_CAST_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.cast']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_CAST_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/cast/R.java']
+
+if CONFIG['MOZ_ANDROID_GCM']:
+    gbjar.extra_jars += [
+        CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_LIB'],
+    ]
+
+    if CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.gcm']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_RES']]
+# (no resources) resjar.generated_sources += ['generated/com/google/android/gms/gcm/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.measurement']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_RES']]
+# (no resources) resjar.generated_sources += ['generated/android/support/v7/palette/R.java']
+
+if CONFIG['MOZ_INSTALL_TRACKING']:
+    gbjar.extra_jars += [
+        CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
+    ]
+
+    if CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.ads']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/ads/R.java']
+
+    if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
+        ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
+        ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
+        resjar.generated_sources += ['generated/com/google/android/gms/R.java']
+
+gbjar.extra_jars += [CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB']]
+gbjar.extra_jars += [CONFIG['ANDROID_SUPPORT_VECTOR_DRAWABLE_AAR_LIB']]
+gbjar.extra_jars += [CONFIG['ANDROID_ANIMATED_VECTOR_DRAWABLE_AAR_LIB']]
+gbjar.extra_jars += [CONFIG['ANDROID_CARDVIEW_V7_AAR_LIB']]
+gbjar.extra_jars += [CONFIG['ANDROID_DESIGN_AAR_LIB']]
+gbjar.extra_jars += [CONFIG['ANDROID_RECYCLERVIEW_V7_AAR_LIB']]
+gbjar.extra_jars += [CONFIG['ANDROID_CUSTOMTABS_AAR_LIB']]
+
+gbjar.javac_flags += ['-Xlint:all,-deprecation,-fallthrough', '-J-Xmx512m', '-J-Xms128m']
+
+# gecko-thirdparty is a good place to put small independent libraries
+gtjar = add_java_jar('gecko-thirdparty')
+gtjar.sources += [ thirdparty_source_dir + f for f in [
+    'com/booking/rtlviewpager/PagerAdapterWrapper.java',
+    'com/booking/rtlviewpager/RtlViewPager.java',
+    'com/jakewharton/disklrucache/DiskLruCache.java',
+    'com/jakewharton/disklrucache/StrictLineReader.java',
+    'com/jakewharton/disklrucache/Util.java',
+    'com/squareup/leakcanary/LeakCanary.java',
+    'com/squareup/leakcanary/RefWatcher.java',
+    'com/squareup/picasso/Action.java',
+    'com/squareup/picasso/AssetBitmapHunter.java',
+    'com/squareup/picasso/BitmapHunter.java',
+    'com/squareup/picasso/Cache.java',
+    'com/squareup/picasso/Callback.java',
+    'com/squareup/picasso/ContactsPhotoBitmapHunter.java',
+    'com/squareup/picasso/ContentStreamBitmapHunter.java',
+    'com/squareup/picasso/DeferredRequestCreator.java',
+    'com/squareup/picasso/Dispatcher.java',
+    'com/squareup/picasso/Downloader.java',
+    'com/squareup/picasso/FetchAction.java',
+    'com/squareup/picasso/FileBitmapHunter.java',
+    'com/squareup/picasso/GetAction.java',
+    'com/squareup/picasso/ImageViewAction.java',
+    'com/squareup/picasso/LruCache.java',
+    'com/squareup/picasso/MarkableInputStream.java',
+    'com/squareup/picasso/MediaStoreBitmapHunter.java',
+    'com/squareup/picasso/NetworkBitmapHunter.java',
+    'com/squareup/picasso/Picasso.java',
+    'com/squareup/picasso/PicassoDrawable.java',
+    'com/squareup/picasso/PicassoExecutorService.java',
+    'com/squareup/picasso/Request.java',
+    'com/squareup/picasso/RequestCreator.java',
+    'com/squareup/picasso/ResourceBitmapHunter.java',
+    'com/squareup/picasso/Stats.java',
+    'com/squareup/picasso/StatsSnapshot.java',
+    'com/squareup/picasso/Target.java',
+    'com/squareup/picasso/TargetAction.java',
+    'com/squareup/picasso/Transformation.java',
+    'com/squareup/picasso/UrlConnectionDownloader.java',
+    'com/squareup/picasso/Utils.java'
+] ]
+gtjar.extra_jars = [
+    CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+    CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+]
+
+if not CONFIG['MOZILLA_OFFICIAL']:
+    gtjar.sources += [ thirdparty_source_dir + f for f in [
+        'org/lucasr/dspec/DesignSpec.java',
+        'org/lucasr/dspec/RawResource.java'
+    ] ]
+
+if CONFIG['MOZ_INSTALL_TRACKING']:
+    adjustjar = add_java_jar('gecko-thirdparty-adjust_sdk')
+    adjustjar.sources += [ thirdparty_source_dir + f for f in [
+        'com/adjust/sdk/ActivityHandler.java',
+        'com/adjust/sdk/ActivityKind.java',
+        'com/adjust/sdk/ActivityPackage.java',
+        'com/adjust/sdk/ActivityState.java',
+        'com/adjust/sdk/Adjust.java',
+        'com/adjust/sdk/AdjustAttribution.java',
+        'com/adjust/sdk/AdjustConfig.java',
+        'com/adjust/sdk/AdjustEvent.java',
+        'com/adjust/sdk/AdjustFactory.java',
+        'com/adjust/sdk/AdjustInstance.java',
+        'com/adjust/sdk/AdjustReferrerReceiver.java',
+        'com/adjust/sdk/AttributionHandler.java',
+        'com/adjust/sdk/Constants.java',
+        'com/adjust/sdk/DeviceInfo.java',
+        'com/adjust/sdk/IActivityHandler.java',
+        'com/adjust/sdk/IAttributionHandler.java',
+        'com/adjust/sdk/ILogger.java',
+        'com/adjust/sdk/IPackageHandler.java',
+        'com/adjust/sdk/IRequestHandler.java',
+        'com/adjust/sdk/Logger.java',
+        'com/adjust/sdk/LogLevel.java',
+        'com/adjust/sdk/OnAttributionChangedListener.java',
+        'com/adjust/sdk/PackageBuilder.java',
+        'com/adjust/sdk/PackageHandler.java',
+        'com/adjust/sdk/plugin/AndroidIdUtil.java',
+        'com/adjust/sdk/plugin/MacAddressUtil.java',
+        'com/adjust/sdk/plugin/Plugin.java',
+        'com/adjust/sdk/Reflection.java',
+        'com/adjust/sdk/RequestHandler.java',
+        'com/adjust/sdk/UnitTestActivity.java',
+        'com/adjust/sdk/Util.java'
+    ] ]
+    adjustjar.extra_jars += [
+        'sync-thirdparty.jar',
+    ]
+
+
+if CONFIG['MOZ_ANDROID_MMA']:
+    lpjar = add_java_jar('gecko-thirdparty-leanplum_sdk')
+    lpjar.sources += [ thirdparty_source_dir + f for f in [
+        'com/leanplum/ActionArgs.java',
+        'com/leanplum/ActionContext.java',
+        'com/leanplum/activities/LeanplumAccountAuthenticatorActivity.java',
+        'com/leanplum/activities/LeanplumActionBarActivity.java',
+        'com/leanplum/activities/LeanplumActivity.java',
+        'com/leanplum/activities/LeanplumActivityGroup.java',
+        'com/leanplum/activities/LeanplumAliasActivity.java',
+        'com/leanplum/activities/LeanplumAppCompatActivity.java',
+        'com/leanplum/activities/LeanplumExpandableListActivity.java',
+        'com/leanplum/activities/LeanplumFragmentActivity.java',
+        'com/leanplum/activities/LeanplumLauncherActivity.java',
+        'com/leanplum/activities/LeanplumListActivity.java',
+        'com/leanplum/activities/LeanplumNativeActivity.java',
+        'com/leanplum/activities/LeanplumPreferenceActivity.java',
+        'com/leanplum/activities/LeanplumTabActivity.java',
+        'com/leanplum/annotations/File.java',
+        'com/leanplum/annotations/Parser.java',
+        'com/leanplum/annotations/Variable.java',
+        'com/leanplum/CacheUpdateBlock.java',
+        'com/leanplum/callbacks/ActionCallback.java',
+        'com/leanplum/callbacks/InboxChangedCallback.java',
+        'com/leanplum/callbacks/NewsfeedChangedCallback.java',
+        'com/leanplum/callbacks/PostponableAction.java',
+        'com/leanplum/callbacks/RegisterDeviceCallback.java',
+        'com/leanplum/callbacks/RegisterDeviceFinishedCallback.java',
+        'com/leanplum/callbacks/StartCallback.java',
+        'com/leanplum/callbacks/VariableCallback.java',
+        'com/leanplum/callbacks/VariablesChangedCallback.java',
+        'com/leanplum/internal/ActionArg.java',
+        'com/leanplum/internal/ActionManager.java',
+        'com/leanplum/internal/AESCrypt.java',
+        'com/leanplum/internal/BaseActionContext.java',
+        'com/leanplum/internal/CollectionUtil.java',
+        'com/leanplum/internal/Constants.java',
+        'com/leanplum/internal/FileManager.java',
+        'com/leanplum/internal/HybiParser.java',
+        'com/leanplum/internal/JsonConverter.java',
+        'com/leanplum/internal/LeanplumInternal.java',
+        'com/leanplum/internal/LeanplumManifestHelper.java',
+        'com/leanplum/internal/LeanplumManifestParser.java',
+        'com/leanplum/internal/LeanplumMessageMatchFilter.java',
+        'com/leanplum/internal/LeanplumUIEditorWrapper.java',
+        'com/leanplum/internal/Log.java',
+        'com/leanplum/internal/OsHandler.java',
+        'com/leanplum/internal/Registration.java',
+        'com/leanplum/internal/Request.java',
+        'com/leanplum/internal/RequestFactory.java',
+        'com/leanplum/internal/ResourceQualifiers.java',
+        'com/leanplum/internal/Socket.java',
+        'com/leanplum/internal/SocketIOClient.java',
+        'com/leanplum/internal/Util.java',
+        'com/leanplum/internal/VarCache.java',
+        'com/leanplum/internal/WebSocketClient.java',
+        'com/leanplum/Leanplum.java',
+        'com/leanplum/LeanplumActivityHelper.java',
+        'com/leanplum/LeanplumApplication.java',
+        'com/leanplum/LeanplumCloudMessagingProvider.java',
+        'com/leanplum/LeanplumDeviceIdMode.java',
+        'com/leanplum/LeanplumEditorMode.java',
+        'com/leanplum/LeanplumException.java',
+        'com/leanplum/LeanplumGcmProvider.java',
+        'com/leanplum/LeanplumInbox.java',
+        'com/leanplum/LeanplumInboxMessage.java',
+        'com/leanplum/LeanplumInflater.java',
+        'com/leanplum/LeanplumLocalPushListenerService.java',
+        'com/leanplum/LeanplumLocationAccuracyType.java',
+        'com/leanplum/LeanplumManualProvider.java',
+        'com/leanplum/LeanplumPushInstanceIDService.java',
+        'com/leanplum/LeanplumPushListenerService.java',
+        'com/leanplum/LeanplumPushNotificationCustomizer.java',
+        'com/leanplum/LeanplumPushReceiver.java',
+        'com/leanplum/LeanplumPushRegistrationService.java',
+        'com/leanplum/LeanplumPushService.java',
+        'com/leanplum/LeanplumResources.java',
+        'com/leanplum/LeanplumUIEditor.java',
+        'com/leanplum/LocationManager.java',
+        'com/leanplum/messagetemplates/Alert.java',
+        'com/leanplum/messagetemplates/BaseMessageDialog.java',
+        'com/leanplum/messagetemplates/BaseMessageOptions.java',
+        'com/leanplum/messagetemplates/CenterPopup.java',
+        'com/leanplum/messagetemplates/CenterPopupOptions.java',
+        'com/leanplum/messagetemplates/Confirm.java',
+        'com/leanplum/messagetemplates/HTMLOptions.java',
+        'com/leanplum/messagetemplates/HTMLTemplate.java',
+        'com/leanplum/messagetemplates/Interstitial.java',
+        'com/leanplum/messagetemplates/InterstitialOptions.java',
+        'com/leanplum/messagetemplates/MessageTemplates.java',
+        'com/leanplum/messagetemplates/OpenURL.java',
+        'com/leanplum/messagetemplates/WebInterstitial.java',
+        'com/leanplum/messagetemplates/WebInterstitialOptions.java',
+        'com/leanplum/Newsfeed.java',
+        'com/leanplum/NewsfeedMessage.java',
+        'com/leanplum/UIEditorBridge.java',
+        'com/leanplum/utils/BitmapUtil.java',
+        'com/leanplum/utils/SharedPreferencesUtil.java',
+        'com/leanplum/utils/SizeUtil.java',
+        'com/leanplum/Var.java',
+        'com/leanplum/views/BackgroundImageView.java',
+        'com/leanplum/views/CloseButton.java',
+    ] ]
+    lpjar.extra_jars += [
+        CONFIG['ANDROID_APPCOMPAT_V7_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_BASE_AAR_LIB'],
+        CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_LIB'],
+        CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+        CONFIG['ANDROID_SUPPORT_V4_AAR_INTERNAL_LIB'],
+        CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
+        'sync-thirdparty.jar',
+    ]
+
+gvjar.sources += ['generated/org/mozilla/gecko/' + x for x in [
+    'gfx/ISurfaceAllocator.java',
+    'IGeckoEditableChild.java',
+    'IGeckoEditableParent.java',
+    'media/ICodec.java',
+    'media/ICodecCallbacks.java',
+    'media/IMediaDrmBridge.java',
+    'media/IMediaDrmBridgeCallbacks.java',
+    'media/IMediaManager.java',
+    'process/IChildProcess.java',
+    'process/IProcessManager.java',
+]]
+
+if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
+    gvjar.extra_jars += [
+        'exoplayer2.jar',
+    ]
+
+    exoplayer2_jar = add_java_jar('exoplayer2')
+
+    exoplayer2_jar.javac_flags += [
+        '-Xlint:all,-serial,-rawtypes,-unchecked,-fallthrough',
+    ]
+
+    exoplayer2_jar.extra_jars += [
+        CONFIG['ANDROID_SUPPORT_ANNOTATIONS_JAR_LIB'],
+    ]
+
+    exoplayer2_jar.sources += [geckoview_thirdparty_source_dir + 'java/com/google/android/exoplayer2/' + x for x in [
+        'audio/Ac3Util.java',
+        'audio/AudioCapabilities.java',
+        'audio/AudioCapabilitiesReceiver.java',
+        'audio/AudioDecoderException.java',
+        'audio/AudioProcessor.java',
+        'audio/AudioRendererEventListener.java',
+        'audio/AudioTrack.java',
+        'audio/ChannelMappingAudioProcessor.java',
+        'audio/DtsUtil.java',
+        'audio/MediaCodecAudioRenderer.java',
+        'audio/ResamplingAudioProcessor.java',
+        'audio/SimpleDecoderAudioRenderer.java',
+        'audio/Sonic.java',
+        'audio/SonicAudioProcessor.java',
+        'BaseRenderer.java',
+        'C.java',
+        'decoder/Buffer.java',
+        'decoder/CryptoInfo.java',
+        'decoder/Decoder.java',
+        'decoder/DecoderCounters.java',
+        'decoder/DecoderInputBuffer.java',
+        'decoder/OutputBuffer.java',
+        'decoder/SimpleDecoder.java',
+        'decoder/SimpleOutputBuffer.java',
+        'DefaultLoadControl.java',
+        'DefaultRenderersFactory.java',
+        'drm/DecryptionException.java',
+        'drm/DefaultDrmSessionManager.java',
+        'drm/DrmInitData.java',
+        'drm/DrmSession.java',
+        'drm/DrmSessionManager.java',
+        'drm/ExoMediaCrypto.java',
+        'drm/ExoMediaDrm.java',
+        'drm/FrameworkMediaCrypto.java',
+        'drm/FrameworkMediaDrm.java',
+        'drm/HttpMediaDrmCallback.java',
+        'drm/KeysExpiredException.java',
+        'drm/MediaDrmCallback.java',
+        'drm/OfflineLicenseHelper.java',
+        'drm/UnsupportedDrmException.java',
+        'drm/WidevineUtil.java',
+        'ExoPlaybackException.java',
+        'ExoPlayer.java',
+        'ExoPlayerFactory.java',
+        'ExoPlayerImpl.java',
+        'ExoPlayerImplInternal.java',
+        'ExoPlayerLibraryInfo.java',
+        'extractor/ChunkIndex.java',
+        'extractor/DefaultExtractorInput.java',
+        'extractor/DefaultExtractorsFactory.java',
+        'extractor/DefaultTrackOutput.java',
+        'extractor/DummyTrackOutput.java',
+        'extractor/Extractor.java',
+        'extractor/ExtractorInput.java',
+        'extractor/ExtractorOutput.java',
+        'extractor/ExtractorsFactory.java',
+        'extractor/flv/AudioTagPayloadReader.java',
+        'extractor/flv/FlvExtractor.java',
+        'extractor/flv/ScriptTagPayloadReader.java',
+        'extractor/flv/TagPayloadReader.java',
+        'extractor/flv/VideoTagPayloadReader.java',
+        'extractor/GaplessInfoHolder.java',
+        'extractor/mkv/DefaultEbmlReader.java',
+        'extractor/mkv/EbmlReader.java',
+        'extractor/mkv/EbmlReaderOutput.java',
+        'extractor/mkv/MatroskaExtractor.java',
+        'extractor/mkv/Sniffer.java',
+        'extractor/mkv/VarintReader.java',
+        'extractor/mp3/ConstantBitrateSeeker.java',
+        'extractor/mp3/Mp3Extractor.java',
+        'extractor/mp3/VbriSeeker.java',
+        'extractor/mp3/XingSeeker.java',
+        'extractor/mp4/Atom.java',
+        'extractor/mp4/AtomParsers.java',
+        'extractor/mp4/DefaultSampleValues.java',
+        'extractor/mp4/FixedSampleSizeRechunker.java',
+        'extractor/mp4/FragmentedMp4Extractor.java',
+        'extractor/mp4/MetadataUtil.java',
+        'extractor/mp4/Mp4Extractor.java',
+        'extractor/mp4/PsshAtomUtil.java',
+        'extractor/mp4/Sniffer.java',
+        'extractor/mp4/Track.java',
+        'extractor/mp4/TrackEncryptionBox.java',
+        'extractor/mp4/TrackFragment.java',
+        'extractor/mp4/TrackSampleTable.java',
+        'extractor/MpegAudioHeader.java',
+        'extractor/ogg/DefaultOggSeeker.java',
+        'extractor/ogg/FlacReader.java',
+        'extractor/ogg/OggExtractor.java',
+        'extractor/ogg/OggPacket.java',
+        'extractor/ogg/OggPageHeader.java',
+        'extractor/ogg/OggSeeker.java',
+        'extractor/ogg/OpusReader.java',
+        'extractor/ogg/StreamReader.java',
+        'extractor/ogg/VorbisBitArray.java',
+        'extractor/ogg/VorbisReader.java',
+        'extractor/ogg/VorbisUtil.java',
+        'extractor/PositionHolder.java',
+        'extractor/rawcc/RawCcExtractor.java',
+        'extractor/SeekMap.java',
+        'extractor/TrackOutput.java',
+        'extractor/ts/Ac3Extractor.java',
+        'extractor/ts/Ac3Reader.java',
+        'extractor/ts/AdtsExtractor.java',
+        'extractor/ts/AdtsReader.java',
+        'extractor/ts/DefaultTsPayloadReaderFactory.java',
+        'extractor/ts/DtsReader.java',
+        'extractor/ts/DvbSubtitleReader.java',
+        'extractor/ts/ElementaryStreamReader.java',
+        'extractor/ts/H262Reader.java',
+        'extractor/ts/H264Reader.java',
+        'extractor/ts/H265Reader.java',
+        'extractor/ts/Id3Reader.java',
+        'extractor/ts/MpegAudioReader.java',
+        'extractor/ts/NalUnitTargetBuffer.java',
+        'extractor/ts/PesReader.java',
+        'extractor/ts/PsExtractor.java',
+        'extractor/ts/SectionPayloadReader.java',
+        'extractor/ts/SectionReader.java',
+        'extractor/ts/SeiReader.java',
+        'extractor/ts/SpliceInfoSectionReader.java',
+        'extractor/ts/TsExtractor.java',
+        'extractor/ts/TsPayloadReader.java',
+        'extractor/wav/WavExtractor.java',
+        'extractor/wav/WavHeader.java',
+        'extractor/wav/WavHeaderReader.java',
+        'Format.java',
+        'FormatHolder.java',
+        'IllegalSeekPositionException.java',
+        'LoadControl.java',
+        'mediacodec/MediaCodecInfo.java',
+        'mediacodec/MediaCodecRenderer.java',
+        'mediacodec/MediaCodecSelector.java',
+        'mediacodec/MediaCodecUtil.java',
+        'metadata/emsg/EventMessage.java',
+        'metadata/emsg/EventMessageDecoder.java',
+        'metadata/id3/ApicFrame.java',
+        'metadata/id3/BinaryFrame.java',
+        'metadata/id3/ChapterFrame.java',
+        'metadata/id3/ChapterTocFrame.java',
+        'metadata/id3/CommentFrame.java',
+        'metadata/id3/GeobFrame.java',
+        'metadata/id3/Id3Decoder.java',
+        'metadata/id3/Id3Frame.java',
+        'metadata/id3/PrivFrame.java',
+        'metadata/id3/TextInformationFrame.java',
+        'metadata/id3/UrlLinkFrame.java',
+        'metadata/Metadata.java',
+        'metadata/MetadataDecoder.java',
+        'metadata/MetadataDecoderException.java',
+        'metadata/MetadataDecoderFactory.java',
+        'metadata/MetadataInputBuffer.java',
+        'metadata/MetadataRenderer.java',
+        'metadata/scte35/PrivateCommand.java',
+        'metadata/scte35/SpliceCommand.java',
+        'metadata/scte35/SpliceInfoDecoder.java',
+        'metadata/scte35/SpliceInsertCommand.java',
+        'metadata/scte35/SpliceNullCommand.java',
+        'metadata/scte35/SpliceScheduleCommand.java',
+        'metadata/scte35/TimeSignalCommand.java',
+        'ParserException.java',
+        'PlaybackParameters.java',
+        'Renderer.java',
+        'RendererCapabilities.java',
+        'RendererConfiguration.java',
+        'RenderersFactory.java',
+        'SimpleExoPlayer.java',
+        'source/AdaptiveMediaSourceEventListener.java',
+        'source/BehindLiveWindowException.java',
+        'source/chunk/BaseMediaChunk.java',
+        'source/chunk/BaseMediaChunkOutput.java',
+        'source/chunk/Chunk.java',
+        'source/chunk/ChunkedTrackBlacklistUtil.java',
+        'source/chunk/ChunkExtractorWrapper.java',
+        'source/chunk/ChunkHolder.java',
+        'source/chunk/ChunkSampleStream.java',
+        'source/chunk/ChunkSource.java',
+        'source/chunk/ContainerMediaChunk.java',
+        'source/chunk/DataChunk.java',
+        'source/chunk/InitializationChunk.java',
+        'source/chunk/MediaChunk.java',
+        'source/chunk/SingleSampleMediaChunk.java',
+        'source/ClippingMediaPeriod.java',
+        'source/ClippingMediaSource.java',
+        'source/CompositeSequenceableLoader.java',
+        'source/ConcatenatingMediaSource.java',
+        'source/EmptySampleStream.java',
+        'source/ExtractorMediaPeriod.java',
+        'source/ExtractorMediaSource.java',
+        'source/hls/Aes128DataSource.java',
+        'source/hls/DefaultHlsDataSourceFactory.java',
+        'source/hls/HlsChunkSource.java',
+        'source/hls/HlsDataSourceFactory.java',
+        'source/hls/HlsManifest.java',
+        'source/hls/HlsMediaChunk.java',
+        'source/hls/HlsMediaPeriod.java',
+        'source/hls/HlsMediaSource.java',
+        'source/hls/HlsSampleStream.java',
+        'source/hls/HlsSampleStreamWrapper.java',
+        'source/hls/playlist/HlsMasterPlaylist.java',
+        'source/hls/playlist/HlsMediaPlaylist.java',
+        'source/hls/playlist/HlsPlaylist.java',
+        'source/hls/playlist/HlsPlaylistParser.java',
+        'source/hls/playlist/HlsPlaylistTracker.java',
+        'source/hls/TimestampAdjusterProvider.java',
+        'source/hls/WebvttExtractor.java',
+        'source/LoopingMediaSource.java',
+        'source/MediaPeriod.java',
+        'source/MediaSource.java',
+        'source/MergingMediaPeriod.java',
+        'source/MergingMediaSource.java',
+        'source/SampleStream.java',
+        'source/SequenceableLoader.java',
+        'source/SinglePeriodTimeline.java',
+        'source/SingleSampleMediaPeriod.java',
+        'source/SingleSampleMediaSource.java',
+        'source/TrackGroup.java',
+        'source/TrackGroupArray.java',
+        'source/UnrecognizedInputFormatException.java',
+        'text/CaptionStyleCompat.java',
+        'text/cea/Cea608Decoder.java',
+        'text/cea/Cea708Cue.java',
+        'text/cea/Cea708Decoder.java',
+        'text/cea/CeaDecoder.java',
+        'text/cea/CeaOutputBuffer.java',
+        'text/cea/CeaSubtitle.java',
+        'text/cea/CeaUtil.java',
+        'text/Cue.java',
+        'text/dvb/DvbDecoder.java',
+        'text/dvb/DvbParser.java',
+        'text/dvb/DvbSubtitle.java',
+        'text/SimpleSubtitleDecoder.java',
+        'text/SimpleSubtitleOutputBuffer.java',
+        'text/subrip/SubripDecoder.java',
+        'text/subrip/SubripSubtitle.java',
+        'text/Subtitle.java',
+        'text/SubtitleDecoder.java',
+        'text/SubtitleDecoderException.java',
+        'text/SubtitleDecoderFactory.java',
+        'text/SubtitleInputBuffer.java',
+        'text/SubtitleOutputBuffer.java',
+        'text/TextRenderer.java',
+        'text/ttml/TtmlDecoder.java',
+        'text/ttml/TtmlNode.java',
+        'text/ttml/TtmlRegion.java',
+        'text/ttml/TtmlRenderUtil.java',
+        'text/ttml/TtmlStyle.java',
+        'text/ttml/TtmlSubtitle.java',
+        'text/tx3g/Tx3gDecoder.java',
+        'text/tx3g/Tx3gSubtitle.java',
+        'text/webvtt/CssParser.java',
+        'text/webvtt/Mp4WebvttDecoder.java',
+        'text/webvtt/Mp4WebvttSubtitle.java',
+        'text/webvtt/WebvttCssStyle.java',
+        'text/webvtt/WebvttCue.java',
+        'text/webvtt/WebvttCueParser.java',
+        'text/webvtt/WebvttDecoder.java',
+        'text/webvtt/WebvttParserUtil.java',
+        'text/webvtt/WebvttSubtitle.java',
+        'Timeline.java',
+        'trackselection/AdaptiveTrackSelection.java',
+        'trackselection/BaseTrackSelection.java',
+        'trackselection/DefaultTrackSelector.java',
+        'trackselection/FixedTrackSelection.java',
+        'trackselection/MappingTrackSelector.java',
+        'trackselection/RandomTrackSelection.java',
+        'trackselection/TrackSelection.java',
+        'trackselection/TrackSelectionArray.java',
+        'trackselection/TrackSelector.java',
+        'trackselection/TrackSelectorResult.java',
+        'upstream/Allocation.java',
+        'upstream/Allocator.java',
+        'upstream/AssetDataSource.java',
+        'upstream/BandwidthMeter.java',
+        'upstream/ByteArrayDataSink.java',
+        'upstream/ByteArrayDataSource.java',
+        'upstream/cache/Cache.java',
+        'upstream/cache/CacheDataSink.java',
+        'upstream/cache/CacheDataSinkFactory.java',
+        'upstream/cache/CacheDataSource.java',
+        'upstream/cache/CacheDataSourceFactory.java',
+        'upstream/cache/CachedContent.java',
+        'upstream/cache/CachedContentIndex.java',
+        'upstream/cache/CachedRegionTracker.java',
+        'upstream/cache/CacheEvictor.java',
+        'upstream/cache/CacheSpan.java',
+        'upstream/cache/CacheUtil.java',
+        'upstream/cache/LeastRecentlyUsedCacheEvictor.java',
+        'upstream/cache/NoOpCacheEvictor.java',
+        'upstream/cache/SimpleCache.java',
+        'upstream/cache/SimpleCacheSpan.java',
+        'upstream/ContentDataSource.java',
+        'upstream/crypto/AesCipherDataSink.java',
+        'upstream/crypto/AesCipherDataSource.java',
+        'upstream/crypto/AesFlushingCipher.java',
+        'upstream/crypto/CryptoUtil.java',
+        'upstream/DataSink.java',
+        'upstream/DataSource.java',
+        'upstream/DataSourceException.java',
+        'upstream/DataSourceInputStream.java',
+        'upstream/DataSpec.java',
+        'upstream/DefaultAllocator.java',
+        'upstream/DefaultBandwidthMeter.java',
+        'upstream/DefaultDataSource.java',
+        'upstream/DefaultDataSourceFactory.java',
+        'upstream/DefaultHttpDataSource.java',
+        'upstream/DefaultHttpDataSourceFactory.java',
+        'upstream/DummyDataSource.java',
+        'upstream/FileDataSource.java',
+        'upstream/FileDataSourceFactory.java',
+        'upstream/HttpDataSource.java',
+        'upstream/Loader.java',
+        'upstream/LoaderErrorThrower.java',
+        'upstream/ParsingLoadable.java',
+        'upstream/PriorityDataSource.java',
+        'upstream/PriorityDataSourceFactory.java',
+        'upstream/RawResourceDataSource.java',
+        'upstream/TeeDataSource.java',
+        'upstream/TransferListener.java',
+        'upstream/UdpDataSource.java',
+        'util/Assertions.java',
+        'util/AtomicFile.java',
+        'util/Clock.java',
+        'util/CodecSpecificDataUtil.java',
+        'util/ColorParser.java',
+        'util/ConditionVariable.java',
+        'util/FlacStreamInfo.java',
+        'util/LibraryLoader.java',
+        'util/LongArray.java',
+        'util/MediaClock.java',
+        'util/MimeTypes.java',
+        'util/NalUnitUtil.java',
+        'util/ParsableBitArray.java',
+        'util/ParsableByteArray.java',
+        'util/ParsableNalUnitBitArray.java',
+        'util/Predicate.java',
+        'util/PriorityTaskManager.java',
+        'util/ReusableBufferedOutputStream.java',
+        'util/SlidingPercentile.java',
+        'util/StandaloneMediaClock.java',
+        'util/SystemClock.java',
+        'util/TimestampAdjuster.java',
+        'util/TraceUtil.java',
+        'util/UriUtil.java',
+        'util/Util.java',
+        'util/XmlPullParserUtil.java',
+        'video/AvcConfig.java',
+        'video/ColorInfo.java',
+        'video/HevcConfig.java',
+        'video/MediaCodecVideoRenderer.java',
+        'video/VideoFrameReleaseTimeHelper.java',
+        'video/VideoRendererEventListener.java',
+    ]]