diff --git a/build/README b/build/README
deleted file mode 100644
index 3398014..0000000
--- a/build/README
+++ /dev/null
@@ -1,8 +0,0 @@
-Files in this folder are build extensions specific to the Bugle project, but currently could be merged into the core Android build.
-
-gcheckstyle is a tool from google3 to validate java from google3.  The config file is baked into the jar, but can be updated with a little hackery.
-
-Files last pulled around CL 66008148:
-gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml is the config file which came from /home/build/nonconf/google3/tools/java/checkstyle and was modified to use Android specific styles.  It must keep the same name and path in order to correctly update the jar
-
-google-style-checker_deploy.jar is pulled from the build share at /google/data/ro/teams/devtools/glint/linters/live/google-style-checker_deploy.jar and can be pulled from there as needed.
diff --git a/build/android_lint.mk b/build/android_lint.mk
deleted file mode 100644
index 3a9a3d7..0000000
--- a/build/android_lint.mk
+++ /dev/null
@@ -1,59 +0,0 @@
-#  Copyright (C) 2015 The Android Open Source Project
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-# Android lint checks for common code/resource errors specific to Android
-
-# Lint tool expects the intermediates dir to match the project name Bugle rather
-# than $(LOCAL_PACKAGE_NAME) which is messaging
-# Create a symbolic link to redirect the tool
-$(LOCAL_PACKAGE_NAME)BUGLE_RENAME := $(subst $(LOCAL_PACKAGE_NAME)_intermediates,Bugle_intermediates,$(intermediates.COMMON))
-$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME): SOURCE_PATH := $(abspath $(intermediates.COMMON)/)
-$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME): DST_PATH := $($(LOCAL_PACKAGE_NAME)BUGLE_RENAME)
-$($(LOCAL_PACKAGE_NAME)BUGLE_RENAME) :
-	ln -f -s $(SOURCE_PATH) $(DST_PATH)
-
-# Lint tool expects api-versions.xml from the SDK to be in development/sdk but
-# it's not.  Create a symbolic link to the android SDK to fix it
-API_VERSIONS_XML := $(abspath development/sdk/api-versions.xml)
-$(API_VERSIONS_XML):
-	ln -f -s $(abspath prebuilts/fullsdk/linux/platform-tools/api/api-versions.xml) $(API_VERSIONS_XML)
-
-# The output xml file from the lint tool
-$(LOCAL_PACKAGE_NAME)LINT_XML := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_android_lint.xml
-
-# The transformed text file from the output xml
-$(LOCAL_PACKAGE_NAME)LINT_TXT := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_android_lint.txt
-
-# Creates the output xml from the lint tool by running the linting tool if the
-# package has been updated
-$($(LOCAL_PACKAGE_NAME)LINT_XML): PRIVATE_PATH := $(LOCAL_PATH)
-$($(LOCAL_PACKAGE_NAME)LINT_XML): LINT_CMD = $(LINT) --quiet -Wall --disable UnusedIds,UnusedResources,MissingTranslation $(PRIVATE_PATH)
-$($(LOCAL_PACKAGE_NAME)LINT_XML) : $(LOCAL_BUILT_MODULE) $($(LOCAL_PACKAGE_NAME)BUGLE_RENAME) $(API_VERSIONS_XML)
-	$(LINT_CMD) --xml $@ > /dev/null
-
-# Creates the transformed text file from the output xml by running an xslt on it
-# which filters out issues from the support library and formats it for console
-# output
-$($(LOCAL_PACKAGE_NAME)LINT_TXT): PRIVATE_PATH := $(LOCAL_PATH)
-$($(LOCAL_PACKAGE_NAME)LINT_TXT): INPUT := $($(LOCAL_PACKAGE_NAME)LINT_XML)
-$($(LOCAL_PACKAGE_NAME)LINT_TXT): XSLT_CMD = xsltproc $(PRIVATE_PATH)/build/android_lint.xslt $(INPUT)
-$($(LOCAL_PACKAGE_NAME)LINT_TXT) : $($(LOCAL_PACKAGE_NAME)LINT_XML)
-	$(hide) $(XSLT_CMD) > $@
-
-# The root of the lint rule which just prints the lint errors txt file to the
-# console
-$(LOCAL_PACKAGE_NAME)lint: PRIVATE_PATH := $(LOCAL_PATH)
-$(LOCAL_PACKAGE_NAME)lint :: $($(LOCAL_PACKAGE_NAME)LINT_TXT)
-	$(hide) $(PRIVATE_PATH)/build/colorize_errors.py < $<
-
diff --git a/build/android_lint.xslt b/build/android_lint.xslt
deleted file mode 100644
index d0ddc1c..0000000
--- a/build/android_lint.xslt
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-<xsl:output method="text" version="1.0" encoding="UTF-8" omit-xml-declaration="yes"/>
-<xsl:template match="/issues">
-  <xsl:for-each select="issue">
-    <!-- Exclude errors/warnings with
-       /android/support in the location, these are outside our control
-       /com/google/common in the location, these are outside our control
-       res/values- in the location, these are localized resources, and we only need to be notified of the neutral resource issues
-       .class in the location, these don't have source we can do anything about -->
-    <xsl:if test="not(./location) or (not(contains(./location/@file, '/android/support/')) and not(contains(./location/@file, '/com/google/common/')) and not(starts-with(./location/@file, 'res/values-')) and not(contains(./location/@file, '.class')))">
-      <xsl:value-of select="@severity" />: <xsl:value-of select="@message" disable-output-escaping="yes"/><xsl:text>  </xsl:text>[<xsl:value-of select="@id" />]<xsl:text>&#xa;</xsl:text>
-      <xsl:for-each select="./location">
-        <xsl:text>  </xsl:text><xsl:value-of select="@file" />
-        <xsl:if test="@line">
-          <xsl:text>:</xsl:text><xsl:value-of select="@line" />
-          <xsl:if test="@column">
-            <xsl:text>,</xsl:text><xsl:value-of select="@column" />
-          </xsl:if>
-        </xsl:if>
-        <xsl:text>&#xa;</xsl:text>
-      </xsl:for-each>
-    </xsl:if>
-  </xsl:for-each>
-</xsl:template>
-</xsl:stylesheet>
diff --git a/build/colorize_errors.py b/build/colorize_errors.py
deleted file mode 100755
index e33edc0..0000000
--- a/build/colorize_errors.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/python
-#  Copyright (C) 2015 The Android Open Source Project
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-# Given an input stream look for Error: and Warning: lines and colorize those to
-# the output
-
-import fileinput
-import re
-import sys
-
-RED = "\033[31m"
-YELLOW = "\033[33m"
-RESET = "\033[0m"
-
-ERROR = re.compile(r"^Error:")
-WARNING = re.compile(r"^Warning:")
-STARTS_WITH_WS = re.compile(r"^\s")
-
-for line in fileinput.input():
-  if ERROR.match(line):
-    print RED + line,
-  elif WARNING.match(line):
-    print YELLOW + line,
-  elif STARTS_WITH_WS.match(line):
-    # If the line starts with a space use the same coloring as the previous line
-    print line,
-  else:
-    print RESET + line,
-print RESET
-
diff --git a/build/gcheckstyle.mk b/build/gcheckstyle.mk
deleted file mode 100644
index 61890ee..0000000
--- a/build/gcheckstyle.mk
+++ /dev/null
@@ -1,45 +0,0 @@
-#  Copyright (C) 2015 The Android Open Source Project
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-# The config file to use when checking style issues
-STYLE_CONFIG := $(LOCAL_PATH)/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
-
-# The jar file to use to perform the checking
-STYLE_JAR := $(LOCAL_PATH)/build/gcheckstyle/google-style-checker_deploy.jar
-
-# The output file to cache the results of style error checking
-$(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT := $(intermediates.COMMON)/$(LOCAL_PACKAGE_NAME)_style_errors.txt
-
-# The set of input files to check
-$(LOCAL_PACKAGE_NAME)JAVA_FILES = $(shell find $(LOCAL_PATH)/src/ -name '*.java')
-
-# Updates the JAR file with the new config if the config has changed
-# The config file has to be packaged into the jar, and jar uf command expects the current working directory
-# to match the jar structure
-$(STYLE_JAR): PRIVATE_PATH := $(LOCAL_PATH)
-$(STYLE_JAR) : $(STYLE_CONFIG)
-	$(hide) pushd $(PRIVATE_PATH)/build/gcheckstyle && \
-	jar uf google-style-checker_deploy.jar tools/java/checkstyle/googlestyle-5.0.xml && \
-	popd
-
-# Rebuilds the style errors text if the style checker or any of the java files have changed
-# FLAG: It may be more efficient to cache individual file results rather than grouping them all together
-$($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT): SOURCES := $($(LOCAL_PACKAGE_NAME)JAVA_FILES)
-$($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT) : $($(LOCAL_PACKAGE_NAME)JAVA_FILES) $(STYLE_JAR)
-	$(hide) -/usr/local/buildtools/java/jdk/bin/java -jar $(STYLE_JAR) $(SOURCES) > $@
-
-# The root of the lint rule which just prints the style errors txt file to the console
-$(LOCAL_PACKAGE_NAME)lint :: $($(LOCAL_PACKAGE_NAME)STYLE_ERRORS_TXT)
-	$(hide) $(PRIVATE_PATH)/build/process_style_output.py -omit $(abspath $(PRIVATE_PATH))/ < $< | $(PRIVATE_PATH)/build/colorize_errors.py
-
diff --git a/build/gcheckstyle/google-style-checker_deploy.jar b/build/gcheckstyle/google-style-checker_deploy.jar
deleted file mode 100644
index 86afcbc..0000000
--- a/build/gcheckstyle/google-style-checker_deploy.jar
+++ /dev/null
Binary files differ
diff --git a/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml b/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
deleted file mode 100644
index 6960849..0000000
--- a/build/gcheckstyle/tools/java/checkstyle/googlestyle-5.0.xml
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Copyright (C) 2015 The Android Open Source Project
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<!DOCTYPE module PUBLIC
-    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
-    "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
-
-<!-- This is a checkstyle configuration file. For descriptions of
-what the following rules do, please see the checkstyle configuration
-page at http://checkstyle.sourceforge.net/config.html -->
-
-<!-- Checks with numbered comments refer to recommendations made
-by Joshua Bloch in his book Effective Java -->
-
-<module name="Checker">
-  <property name="charset" value="UTF-8"/>
-  <module name="SuppressionCommentFilter"/>
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="__Generated_"/>
-    <property name="onCommentFormat" value="END GENERATED CODE"/>
-  </module>
-  <module name="FileTabCharacter">
-    <!-- Checks that there are no tab characters in the file.
-    -->
-  </module>
-
-  <module name="RegexpSingleline">
-    <!-- Checks that FIXME is not used in comments.  TODO is preferred.
-    -->
-    <property name="format" value="((//.*)|(\*.*))FIXME" />
-    <property name="message" value='TODO is preferred to FIXME.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
-  </module>
-
-  <module name="RegexpSingleline">
-    <!-- Checks that TODOs are properly formatted.
-
-         The (?&lt;!TODO\(.{0,100}) makes the regex ignore any secondary TODO's on the line
-         so that things like //TODO(bob): remove this TODO on 1/1/2020 don't trigger a warning
-         because of the second TODO.  (The {0,100} is because java doesn't recoginize arbitrary
-         length look backs, but we know each java line should be < 100 chars.)
-    -->
-    <property name="format" value="((//.*)|(\*.*))(?&lt;!TODO\(.{0,100})(TODO[^(])|(TODO\([^)]*$)" />
-    <property name="message" value='All TODOs should be named.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
-  </module>
-
-
-  <!-- All Java AST specific tests live under TreeWalker module. -->
-  <module name="TreeWalker">
-    <module name="FileContentsHolder"/>
-    <!--module name="SuppressWarningsFilter" /-->
-    <!--module name="SuppressWarningsHolder" /-->
-    <!--
-
-    IMPORT CHECKS
-
-    -->
-
-    <module name="RedundantImport">
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="AvoidStarImport">
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="UnusedImports">
-      <!-- DPL is a notable violator of this rule. -->
-      <property name="severity" value="error"/>
-      <!-- Imports used only in Javadoc are tolerated. See http://b/838496 -->
-      <property name="processJavadoc" value="true"/>
-      <message
-          key="import.unused"
-          value="Unused import: {0}." />
-    </module>
-
-    <module name="checkstyle.patches.checks.imports.ImportOrder">
-      <!-- Checks for out of order import statements. -->
-
-      <metadata name="altname" value="ImportOrder"/>
-      <property name="severity" value="warning"/>
-      <property name="groups" value="android,com.android,com.google,*,java,javax"/>
-      <!-- This ensures that static imports go first. -->
-      <property name="option" value="top"/>
-      <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
-      <message
-          key="import.ordering"
-          value="Wrong order for {0} import." />
-    </module>
-
-    <!-- Checks that nested classes are not statically imported. -->
-    <module name="com.google.devtools.checkstyle.checks.imports.StaticImportNestedClassCheck">
-      <metadata name="altname" value="StaticImportNestedClass"/>
-      <property name="severity" value="warning"/>
-      <message key="import.staticNestedClass"
-               value="Use of static import for nested classes is disallowed."/>
-    </module>
-
-    <!--
-
-    JAVADOC CHECKS
-
-    -->
-
-    <module name="com.google.devtools.checkstyle.checks.javadoc.GoogleJavadocTypeCheck">
-      <!-- Item 28 - Write doc comments for all exposed API elements. -->
-      <!-- Ensure all classes with visability greater than or equal to
-        protected have class level documentation. -->
-      <property name="scope" value="protected"/>
-      <property name="severity" value="ignore"/>
-      <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. -->
-      <property name="allowUnknownTags" value="true"/>
-      <property name="allowMissingParamTags" value="true"/>
-    </module>
-
-    <!--
-
-    NAMING CHECKS
-
-    -->
-
-    <!-- Item 38 - Adhere to generally accepted naming conventions -->
-
-    <module name="PackageName">
-      <!-- Validates identifiers for package names against the
-        supplied expression. -->
-      <!-- Here the default checkstyle rule restricts package name parts to
-        seven characters, this is not in line with common practice at Google.
-      -->
-      <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="TypeNameCheck">
-      <!-- Validates static, final fields against the
-      expression "^[A-Z][a-zA-Z0-9]*$". -->
-      <metadata name="altname" value="TypeName"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="com.google.devtools.checkstyle.checks.coding.ConstantNameCheck">
-      <!-- Validates that constant fields are named in ALL_CAPS. -->
-      <metadata name="altname" value="ConstantName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <property name="format" value="^_?[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
-      <message key="name.invalidPattern"
-               value="Variable ''{0}'' is a constant and thus should be in ALL_CAPS."/>
-      <property name="severity" value="ignore"/>
-    </module>
-
-    <module name="StaticVariableNameCheck">
-      <!-- Validates static, non-final fields against the supplied
-      expression "^[a-z][a-zA-Z0-9]*_?$". -->
-      <metadata name="altname" value="StaticVariableName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
-      <property name="severity" value="ignore"/>
-    </module>
-
-    <module name="MemberNameCheck">
-      <!-- Validates non-static members against the supplied expression. -->
-      <metadata name="altname" value="MemberName"/>
-      <property name="applyToPublic" value="true"/>
-      <property name="applyToProtected" value="true"/>
-      <property name="applyToPackage" value="true"/>
-      <property name="applyToPrivate" value="true"/>
-      <!-- allows for googles deprecated foo_ member naming scheme -->
-      <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
-      <property name="severity" value="ignore"/>
-    </module>
-
-    <module name="MethodNameCheck">
-      <!-- Validates identifiers for method names. -->
-      <metadata name="altname" value="MethodName"/>
-      <property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="ParameterName">
-      <!-- Validates identifiers for method parameters against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="LocalFinalVariableName">
-      <!-- Validates identifiers for local final variables against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="LocalVariableName">
-      <!-- Validates identifiers for local variables against the
-        expression "^[a-z][a-zA-Z0-9]*$". -->
-      <property name="severity" value="warning"/>
-    </module>
-
-
-    <!--
-
-    LENGTH and CODING CHECKS
-
-    -->
-
-    <module name="LineLength">
-      <!-- Checks if a line is too long. -->
-      <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/>
-      <property name="severity" value="error"/>
-
-      <!--
-        The default ignore pattern exempts the following elements:
-          - import statements
-          - long URLs inside comments
-          - certain JSNI method signatures used in GWT, see http://wiki/Nonconf/GwtInGoogle3Faq#JsniLineBreaks.
-      -->
-
-      <!--
-           The JSNI/GWT exemption only is for the JNI-style signature, that cannot be split across multiple lines.
-           Both the instance expression and the parameter list may and must go on separate lines.
-
-           These examples are exempt:
-           <pre>
-             private native void foo() /*-{
-               // Method call, signature as the only long line (> 100 chars)
-               this.
-                 @com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
-                 (param);
-
-               // Static method call, signature as the only long line (> 100 chars)
-               @com.google.gwt.foo.bar.baz.ClassUsingJsni::staticMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
-                 (param);
-
-               // Method reference in dictionary, signature as the only long line
-               var dict = {
-                key:
-                  @com.google.gwt.foo.bar.baz.ClassUsingJsni::otherMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;Z),
-                }
-            }-*/;
-           </pre>
-
-           These exampls are NOT exempt, as the line can be broken further:
-           <pre>
-             private native void foo() /*-{
-               // Instance expression on same line
-               this.@com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
-                 (param);
-
-               // Parameters on same line
-               this.
-                 @com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)(param);
-
-               // All on one line
-               this.@com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)(param);
-            }-*/;
-           </pre>
-      -->
-      <property name="ignorePattern"
-          value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
-          default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)|(\s*@[\w\.\$]+::\w+(?:\([^\(]*\)|\(\)\(\))?[,;]?)|(\s+\* \{@(link|see) [^\s][^\}]*\}[\.,;]?)$"/>
-    </module>
-
-    <module name="LeftCurly">
-      <!-- Checks for placement of the left curly brace ('{'). -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <module name="RightCurly">
-      <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
-      the same line. e.g., the following example is fine:
-      <pre>
-        if {
-          ...
-        } else
-      </pre>
-      -->
-      <!-- This next example is not fine:
-      <pre>
-        if {
-          ...
-        }
-        else
-      </pre>
-      -->
-      <property name="option" value="same"/>
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!-- Checks for braces around if and else blocks -->
-    <module name="NeedBraces">
-      <property name="severity" value="warning"/>
-      <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
-    </module>
-
-    <!-- Checks for empty catch blocks in non-test files. -->
-    <module name="com.google.devtools.checkstyle.checks.blocks.EmptyCatchBlockCheck">
-      <metadata name="altname" value="EmptyCatchBlock"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="UpperEll">
-      <!-- Checks that long constants are defined with an upper ell.-->
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="FallThrough">
-      <!-- Warn about falling through to the next case statement.  Similar to
-      javac -Xlint:fallthrough, but the check is suppressed if there is a single-line comment
-      on the last non-blank line preceding the fallen-into case.
-      -->
-      <property name="reliefPattern"
-       value=".*"/>
-      <property name="severity" value="error"/>
-    </module>
-
-
-    <!--
-
-    MODIFIERS CHECKS
-
-    -->
-
-    <module name="ModifierOrder">
-      <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
-           8.4.3.  The prescribed order is:
-           public, protected, private, abstract, static, final, transient, volatile,
-           synchronized, native, strictfp
-        -->
-    </module>
-
-
-    <!--
-
-    WHITESPACE CHECKS
-
-    -->
-
-    <module name="WhitespaceAround">
-      <!-- Checks that various tokens are surrounded by whitespace.
-           This includes most binary operators and keywords followed
-           by regular or curly braces.
-      -->
-      <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
-        BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
-        EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
-        LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
-        LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
-        MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
-        SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
-      <property name="severity" value="error"/>
-      <property name="ignoreEnhancedForColon" value="false"/>
-    </module>
-
-    <module name="WhitespaceAfter">
-      <!-- Checks that commas, semicolons and typecasts are followed by
-           whitespace.
-      -->
-      <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
-    </module>
-
-    <module name="NoWhitespaceAfter">
-      <!-- Checks that there is no whitespace after various unary operators.
-           Linebreaks are allowed.
-      -->
-      <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
-        UNARY_PLUS"/>
-      <property name="allowLineBreaks" value="true"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="NoWhitespaceBefore">
-      <!-- Checks that there is no whitespace before various unary operators.
-           Linebreaks are allowed.
-      -->
-      <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
-      <property name="allowLineBreaks" value="true"/>
-      <property name="severity" value="error"/>
-    </module>
-
-    <module name="ParenPad">
-      <!-- Checks that there is no whitespace before close parens or after
-           open parens.
-      -->
-      <property name="severity" value="warning"/>
-    </module>
-
-    <!--
-
-    MISC CHECKS
-
-    -->
-
-  </module>
-</module>
-
diff --git a/build/process_style_output.py b/build/process_style_output.py
deleted file mode 100755
index 63ca9a0..0000000
--- a/build/process_style_output.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/python
-#  Copyright (C) 2015 The Android Open Source Project
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-# Take the output from gstylechecker and clean up into a more friendly format
-
-import argparse
-import fileinput
-import re
-
-parser = argparse.ArgumentParser()
-parser.add_argument('-omit')
-args = parser.parse_args()
-
-PATTERN = re.compile(r"(?P<file>[^:]+):(?P<line>\d+)(?P<column>:\d+)?:\s(?P<message>.*)")
-
-for line in fileinput.input([]):
-  match = PATTERN.match(line)
-  if match:
-    filename = match.group("file");
-    if args.omit:
-      filename = filename.replace(args.omit, "")
-    message = match.group("message")
-    message = message[0].upper() + message[1:]
-    print message
-    print "  " + filename + ':' + match.group("line") + (match.group("column") if match.group("column") else "")
-
diff --git a/tests/Android.bp b/tests/Android.bp
index 7f04611..4db1efd 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -13,6 +13,7 @@
 //  limitations under the License.
 
 package {
+    default_team: "trendy_team_messages",
     // See: http://go/android-license-faq
     default_applicable_licenses: [
         "Android-Apache-2.0",
diff --git a/version.mk b/version.mk
deleted file mode 100644
index 7ab307b..0000000
--- a/version.mk
+++ /dev/null
@@ -1,128 +0,0 @@
-#  Copyright (C) 2015 The Android Open Source Project
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-
-# The version code scheme for the package apk is:
-#      Mmbbbtad
-# where
-#    M - major version (one or more digits)
-#    m - minor version (exactly 1 digit)
-#   bbb - manually specified build number (exactly 3 digits)
-#    t - build type (exactly 1 digit).  Current valid values are:
-#           0 : internal (dev build)
-#           1 : prod build
-#    a - device architecture (exactly 1 digit).  Current valid values are:
-#           0 : non-native
-#           1 : armv5te
-#           3 : armv7-a
-#           4 : arm64-v8a
-#           5 : mips
-#           6 : mips-64
-#           7 : x86
-#           8 : x86-64
-#    d - asset density (exactly 1 digit).  Current valid values are:
-#           0 : all densities
-#           2 : mdpi
-#           4 : hdpi
-#           6 : xhdpi
-#           8 : xxhdpi
-#           9 : xxxhdpi
-# Mmbbb is specified manually.  tad is automatically set during the build.
-#
-# For the client jar, the version code is agnostic to the target architecture and density: Mmbbbt00
-#
-# NOTE: arch needs to be more significant than density because x86 devices support running ARM
-# code in emulation mode, so all x86 versions must be higher than all ARM versions to ensure
-# we deliver true x86 code to those devices.
-
-# Specify the following manually.  Note that base_version_minor must be exactly 1 digit and
-# base_version_build must be exactly 3 digits.
-base_version_major := 1
-base_version_minor := 0
-base_version_build := 001
-
-#####################################################
-#####################################################
-# Collect automatic version code parameters
-ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
-  # This is an eng build
-  base_version_buildtype := 0
-else
-  # This is a build server build
-  base_version_buildtype := 1
-endif
-
-# Set the device architecture digit
-ifeq "$(TARGET_ARCH)" "arm"
-  ifeq "$(TARGET_ARCH_VARIANT)" "armv5te"
-    base_version_arch := 1
-  else ifeq "$(TARGET_ARCH_VARIANT)" "armv7-a"
-    base_version_arch := 3
-  endif
-else ifeq "$(TARGET_ARCH)" "arm64"
-  base_version_arch := 4
-else ifeq "$(TARGET_ARCH)" "mips"
-  base_version_arch := 5
-else ifeq "$(TARGET_ARCH)" "x86"
-  base_version_arch := 7
-else ifeq "$(TARGET_ARCH)" "x86_64"
-  base_version_arch := 8
-else
-  base_version_arch := 0
-endif
-
-ifeq "$(package_dpi)" "mdpi"
-  base_version_density := 2
-else ifeq "$(package_dpi)" "hdpi"
-  base_version_density := 4
-else ifeq "$(package_dpi)" "xhdpi"
-  base_version_density := 6
-else ifeq "$(package_dpi)" "xxhdpi"
-  base_version_density := 8
-else ifeq "$(package_dpi)" "xxxhdpi"
-  base_version_density := 9
-else
-  base_version_density := 0
-endif
-
-# Build the version code
-version_code_package := $(base_version_major)$(base_version_minor)$(base_version_build)$(base_version_buildtype)$(base_version_arch)$(base_version_density)
-
-# The version name scheme for the package apk is:
-# - For platform builds:     M.m.bbb
-# - For eng build (t=1):     M.m.bbb eng.$(USER)-hh
-# - For build server (t=0):  M.m.bbb (nnnnnn-hh)
-#       where nnnnnn is the build number from the build server (no zero-padding)
-# On eng builds, the BUILD_NUMBER has the user and timestamp inline
-ifdef TARGET_BUILD_APPS
-ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
-  git_hash := $(shell git --git-dir $(LOCAL_PATH)/.git log -n 1 --pretty=format:%h)
-  date_string := $$(date +%m%d%y_%H%M%S)
-  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) (eng.$(BUILD_USERNAME).$(git_hash).$(date_string)-$(base_version_arch)$(base_version_density))
-else
-  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER_FROM_FILE)-$(base_version_arch)$(base_version_density))
-endif
-else # !TARGET_BUILD_APPS
-  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build)
-endif
-
-# Cleanup the locals
-base_version_major :=
-base_version_minor :=
-base_version_build :=
-base_version_buildtype :=
-base_version_arch :=
-base_version_density :=
-git_hash :=
-date_string :=
