Added support for keeping track of public resource surface

We now detect changes in the public resource surface and treat it
as any other api change, which must abide by the rules of semantic
versioning and require explicit api review when changes are made.

Test: use checkResourceApi task to detect changes in the api
surface and updateResourceApi to update the api. Play around with
the versions and ensure proper behaviour and alerts.

Bug: 77659059
Change-Id: I3d67279b6b5af504a4f0817baee1e59cd2c4c868
diff --git a/activity/api/res-1.0.0-alpha03.txt b/activity/api/res-1.0.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/api/res-1.0.0-alpha03.txt
diff --git a/activity/ktx/api/res-1.0.0-alpha03.txt b/activity/ktx/api/res-1.0.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/activity/ktx/api/res-1.0.0-alpha03.txt
diff --git a/appcompat/api/res-1.1.0-alpha01.txt b/appcompat/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..75efda2
--- /dev/null
+++ b/appcompat/api/res-1.1.0-alpha01.txt
@@ -0,0 +1,364 @@
+style TextAppearance_AppCompat
+style TextAppearance_AppCompat_Body1
+style TextAppearance_AppCompat_Body2
+style TextAppearance_AppCompat_Button
+style TextAppearance_AppCompat_Caption
+style TextAppearance_AppCompat_Display1
+style TextAppearance_AppCompat_Display2
+style TextAppearance_AppCompat_Display3
+style TextAppearance_AppCompat_Display4
+style TextAppearance_AppCompat_Headline
+style TextAppearance_AppCompat_Inverse
+style TextAppearance_AppCompat_Large
+style TextAppearance_AppCompat_Large_Inverse
+style TextAppearance_AppCompat_Light_SearchResult_Subtitle
+style TextAppearance_AppCompat_Light_SearchResult_Title
+style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large
+style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small
+style TextAppearance_AppCompat_Medium
+style TextAppearance_AppCompat_Medium_Inverse
+style TextAppearance_AppCompat_Menu
+style TextAppearance_AppCompat_SearchResult_Subtitle
+style TextAppearance_AppCompat_SearchResult_Title
+style TextAppearance_AppCompat_Small
+style TextAppearance_AppCompat_Small_Inverse
+style TextAppearance_AppCompat_Subhead
+style TextAppearance_AppCompat_Subhead_Inverse
+style TextAppearance_AppCompat_Title
+style TextAppearance_AppCompat_Title_Inverse
+style TextAppearance_AppCompat_Widget_ActionBar_Menu
+style TextAppearance_AppCompat_Widget_ActionBar_Subtitle
+style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse
+style TextAppearance_AppCompat_Widget_ActionBar_Title
+style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse
+style TextAppearance_AppCompat_Widget_ActionMode_Subtitle
+style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse
+style TextAppearance_AppCompat_Widget_ActionMode_Title
+style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse
+style TextAppearance_AppCompat_Widget_Button
+style TextAppearance_AppCompat_Widget_Button_Borderless_Colored
+style TextAppearance_AppCompat_Widget_Button_Colored
+style TextAppearance_AppCompat_Widget_Button_Inverse
+style TextAppearance_AppCompat_Widget_DropDownItem
+style TextAppearance_AppCompat_Widget_PopupMenu_Header
+style TextAppearance_AppCompat_Widget_PopupMenu_Large
+style TextAppearance_AppCompat_Widget_PopupMenu_Small
+style TextAppearance_AppCompat_Widget_Switch
+style TextAppearance_AppCompat_Widget_TextView_SpinnerItem
+style Theme_AppCompat
+style Theme_AppCompat_DayNight
+style Theme_AppCompat_DayNight_DarkActionBar
+style Theme_AppCompat_DayNight_Dialog
+style Theme_AppCompat_DayNight_Dialog_Alert
+style Theme_AppCompat_DayNight_Dialog_MinWidth
+style Theme_AppCompat_DayNight_DialogWhenLarge
+style Theme_AppCompat_DayNight_NoActionBar
+style Theme_AppCompat_Dialog
+style Theme_AppCompat_Dialog_Alert
+style Theme_AppCompat_Dialog_MinWidth
+style Theme_AppCompat_DialogWhenLarge
+style Theme_AppCompat_Light
+style Theme_AppCompat_Light_DarkActionBar
+style Theme_AppCompat_Light_Dialog
+style Theme_AppCompat_Light_Dialog_Alert
+style Theme_AppCompat_Light_Dialog_MinWidth
+style Theme_AppCompat_Light_DialogWhenLarge
+style Theme_AppCompat_Light_NoActionBar
+style Theme_AppCompat_NoActionBar
+style ThemeOverlay_AppCompat
+style ThemeOverlay_AppCompat_ActionBar
+style ThemeOverlay_AppCompat_Dark
+style ThemeOverlay_AppCompat_Dark_ActionBar
+style ThemeOverlay_AppCompat_Dialog
+style ThemeOverlay_AppCompat_Dialog_Alert
+style ThemeOverlay_AppCompat_Light
+style Widget_AppCompat_ActionBar
+style Widget_AppCompat_ActionBar_Solid
+style Widget_AppCompat_ActionBar_TabBar
+style Widget_AppCompat_ActionBar_TabText
+style Widget_AppCompat_ActionBar_TabView
+style Widget_AppCompat_ActionButton
+style Widget_AppCompat_ActionButton_CloseMode
+style Widget_AppCompat_ActionButton_Overflow
+style Widget_AppCompat_ActionMode
+style Widget_AppCompat_AutoCompleteTextView
+style Widget_AppCompat_Button
+style Widget_AppCompat_Button_Borderless
+style Widget_AppCompat_Button_Borderless_Colored
+style Widget_AppCompat_Button_ButtonBar_AlertDialog
+style Widget_AppCompat_Button_Colored
+style Widget_AppCompat_Button_Small
+style Widget_AppCompat_ButtonBar
+style Widget_AppCompat_ButtonBar_AlertDialog
+style Widget_AppCompat_CompoundButton_CheckBox
+style Widget_AppCompat_CompoundButton_RadioButton
+style Widget_AppCompat_CompoundButton_Switch
+style Widget_AppCompat_DrawerArrowToggle
+style Widget_AppCompat_DropDownItem_Spinner
+style Widget_AppCompat_EditText
+style Widget_AppCompat_ImageButton
+style Widget_AppCompat_Light_ActionBar
+style Widget_AppCompat_Light_ActionBar_Solid
+style Widget_AppCompat_Light_ActionBar_Solid_Inverse
+style Widget_AppCompat_Light_ActionBar_TabBar
+style Widget_AppCompat_Light_ActionBar_TabBar_Inverse
+style Widget_AppCompat_Light_ActionBar_TabText
+style Widget_AppCompat_Light_ActionBar_TabText_Inverse
+style Widget_AppCompat_Light_ActionBar_TabView
+style Widget_AppCompat_Light_ActionBar_TabView_Inverse
+style Widget_AppCompat_Light_ActionButton
+style Widget_AppCompat_Light_ActionButton_CloseMode
+style Widget_AppCompat_Light_ActionButton_Overflow
+style Widget_AppCompat_Light_ActionMode_Inverse
+style Widget_AppCompat_Light_AutoCompleteTextView
+style Widget_AppCompat_Light_DropDownItem_Spinner
+style Widget_AppCompat_Light_ListPopupWindow
+style Widget_AppCompat_Light_ListView_DropDown
+style Widget_AppCompat_Light_PopupMenu
+style Widget_AppCompat_Light_PopupMenu_Overflow
+style Widget_AppCompat_Light_SearchView
+style Widget_AppCompat_Light_Spinner_DropDown_ActionBar
+style Widget_AppCompat_ListPopupWindow
+style Widget_AppCompat_ListView
+style Widget_AppCompat_ListView_DropDown
+style Widget_AppCompat_ListView_Menu
+style Widget_AppCompat_PopupMenu
+style Widget_AppCompat_PopupMenu_Overflow
+style Widget_AppCompat_PopupWindow
+style Widget_AppCompat_ProgressBar
+style Widget_AppCompat_ProgressBar_Horizontal
+style Widget_AppCompat_RatingBar
+style Widget_AppCompat_RatingBar_Indicator
+style Widget_AppCompat_RatingBar_Small
+style Widget_AppCompat_SearchView
+style Widget_AppCompat_SearchView_ActionBar
+style Widget_AppCompat_SeekBar
+style Widget_AppCompat_SeekBar_Discrete
+style Widget_AppCompat_Spinner
+style Widget_AppCompat_Spinner_DropDown
+style Widget_AppCompat_Spinner_DropDown_ActionBar
+style Widget_AppCompat_Spinner_Underlined
+style Widget_AppCompat_TextView
+style Widget_AppCompat_TextView_SpinnerItem
+style Widget_AppCompat_Toolbar
+style Widget_AppCompat_Toolbar_Button_Navigation
+attr actionBarDivider
+attr actionBarItemBackground
+attr actionBarPopupTheme
+attr actionBarSize
+attr actionBarSplitStyle
+attr actionBarStyle
+attr actionBarTabBarStyle
+attr actionBarTabStyle
+attr actionBarTabTextStyle
+attr actionBarTheme
+attr actionBarWidgetTheme
+attr actionButtonStyle
+attr actionDropDownStyle
+attr actionLayout
+attr actionMenuTextAppearance
+attr actionMenuTextColor
+attr actionModeBackground
+attr actionModeCloseButtonStyle
+attr actionModeCloseDrawable
+attr actionModeCopyDrawable
+attr actionModeCutDrawable
+attr actionModeFindDrawable
+attr actionModePasteDrawable
+attr actionModeSelectAllDrawable
+attr actionModeShareDrawable
+attr actionModeSplitBackground
+attr actionModeStyle
+attr actionModeWebSearchDrawable
+attr actionOverflowButtonStyle
+attr actionOverflowMenuStyle
+attr actionProviderClass
+attr actionViewClass
+attr alertDialogStyle
+attr alertDialogTheme
+attr arrowHeadLength
+attr arrowShaftLength
+attr autoCompleteTextViewStyle
+attr autoSizeMaxTextSize
+attr autoSizeMinTextSize
+attr autoSizePresetSizes
+attr autoSizeStepGranularity
+attr autoSizeTextType
+attr background
+attr backgroundSplit
+attr backgroundStacked
+attr backgroundTint
+attr backgroundTintMode
+attr barLength
+attr borderlessButtonStyle
+attr buttonBarButtonStyle
+attr buttonBarNegativeButtonStyle
+attr buttonBarNeutralButtonStyle
+attr buttonBarPositiveButtonStyle
+attr buttonBarStyle
+attr buttonGravity
+attr buttonStyle
+attr buttonStyleSmall
+attr buttonTint
+attr buttonTintMode
+attr checkboxStyle
+attr checkedTextViewStyle
+attr closeIcon
+attr closeItemLayout
+attr collapseContentDescription
+attr collapseIcon
+attr color
+attr colorAccent
+attr colorBackgroundFloating
+attr colorButtonNormal
+attr colorControlActivated
+attr colorControlHighlight
+attr colorControlNormal
+attr colorError
+attr colorPrimary
+attr colorPrimaryDark
+attr commitIcon
+attr contentInsetEnd
+attr contentInsetEndWithActions
+attr contentInsetLeft
+attr contentInsetRight
+attr contentInsetStart
+attr contentInsetStartWithNavigation
+attr customNavigationLayout
+attr dialogCornerRadius
+attr dialogPreferredPadding
+attr dialogTheme
+attr displayOptions
+attr divider
+attr dividerHorizontal
+attr dividerPadding
+attr dividerVertical
+attr drawableSize
+attr drawerArrowStyle
+attr dropDownListViewStyle
+attr editTextBackground
+attr editTextColor
+attr editTextStyle
+attr elevation
+attr firstBaselineToTopHeight
+attr fontFamily
+attr fontVariationSettings
+attr gapBetweenBars
+attr goIcon
+attr height
+attr hideOnContentScroll
+attr homeAsUpIndicator
+attr homeLayout
+attr icon
+attr iconTint
+attr iconTintMode
+attr iconifiedByDefault
+attr imageButtonStyle
+attr indeterminateProgressStyle
+attr isLightTheme
+attr itemPadding
+attr lastBaselineToBottomHeight
+attr layout
+attr lineHeight
+attr listChoiceBackgroundIndicator
+attr listChoiceIndicatorMultipleAnimated
+attr listChoiceIndicatorSingleAnimated
+attr listDividerAlertDialog
+attr listPopupWindowStyle
+attr listPreferredItemHeight
+attr listPreferredItemHeightLarge
+attr listPreferredItemHeightSmall
+attr listPreferredItemPaddingEnd
+attr listPreferredItemPaddingLeft
+attr listPreferredItemPaddingRight
+attr listPreferredItemPaddingStart
+attr logo
+attr logoDescription
+attr maxButtonHeight
+attr measureWithLargestChild
+attr navigationContentDescription
+attr navigationIcon
+attr navigationMode
+attr overlapAnchor
+attr paddingEnd
+attr paddingStart
+attr panelBackground
+attr popupMenuStyle
+attr popupTheme
+attr popupWindowStyle
+attr preserveIconSpacing
+attr progressBarPadding
+attr progressBarStyle
+attr queryBackground
+attr queryHint
+attr radioButtonStyle
+attr ratingBarStyle
+attr ratingBarStyleIndicator
+attr ratingBarStyleSmall
+attr searchHintIcon
+attr searchIcon
+attr searchViewStyle
+attr seekBarStyle
+attr selectableItemBackground
+attr selectableItemBackgroundBorderless
+attr showAsAction
+attr showDividers
+attr showText
+attr spinBars
+attr spinnerDropDownItemStyle
+attr spinnerStyle
+attr splitTrack
+attr srcCompat
+attr state_above_anchor
+attr submitBackground
+attr subtitle
+attr subtitleTextAppearance
+attr subtitleTextColor
+attr subtitleTextStyle
+attr suggestionRowLayout
+layout support_simple_spinner_dropdown_item
+attr switchMinWidth
+attr switchPadding
+attr switchStyle
+attr switchTextAppearance
+attr textAllCaps
+attr textAppearanceLargePopupMenu
+attr textAppearanceListItem
+attr textAppearanceListItemSecondary
+attr textAppearanceListItemSmall
+attr textAppearancePopupMenuHeader
+attr textAppearanceSearchResultSubtitle
+attr textAppearanceSearchResultTitle
+attr textAppearanceSmallPopupMenu
+attr textColorAlertDialogListItem
+attr textLocale
+attr theme
+attr thickness
+attr thumbTextPadding
+attr thumbTint
+attr thumbTintMode
+attr tickMark
+attr tickMarkTint
+attr tickMarkTintMode
+attr tint
+attr tintMode
+attr title
+attr titleMargin
+attr titleMarginBottom
+attr titleMarginEnd
+attr titleMarginStart
+attr titleMarginTop
+attr titleMargins
+attr titleTextAppearance
+attr titleTextColor
+attr titleTextStyle
+attr toolbarNavigationButtonStyle
+attr toolbarStyle
+attr track
+attr trackTint
+attr trackTintMode
+attr voiceIcon
+attr windowActionBar
+attr windowActionBarOverlay
+attr windowActionModeOverlay
+attr windowNoTitle
diff --git a/arch/core-runtime/api/res-2.0.1-alpha01.txt b/arch/core-runtime/api/res-2.0.1-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/arch/core-runtime/api/res-2.0.1-alpha01.txt
diff --git a/arch/core-testing/api/res-2.0.0.txt b/arch/core-testing/api/res-2.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/arch/core-testing/api/res-2.0.0.txt
diff --git a/asynclayoutinflater/api/res-1.0.0.txt b/asynclayoutinflater/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/asynclayoutinflater/api/res-1.0.0.txt
diff --git a/biometric/api/res-1.0.0-alpha03.txt b/biometric/api/res-1.0.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/biometric/api/res-1.0.0-alpha03.txt
diff --git a/browser/api/res-1.0.0.txt b/browser/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/browser/api/res-1.0.0.txt
diff --git a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
index cdcb57f..82da47e 100644
--- a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
@@ -21,6 +21,9 @@
 import androidx.build.SupportConfig.TARGET_SDK_VERSION
 import androidx.build.SupportConfig.DEFAULT_MIN_SDK_VERSION
 import androidx.build.SupportConfig.INSTRUMENTATION_RUNNER
+import androidx.build.checkapi.ApiType
+import androidx.build.checkapi.getLastReleasedApiFileFromDir
+import androidx.build.checkapi.hasApiFolder
 import androidx.build.dependencyTracker.AffectedModuleDetector
 import androidx.build.dokka.Dokka
 import androidx.build.gradle.getByType
@@ -49,6 +52,7 @@
 import org.gradle.kotlin.dsl.getPlugin
 import org.gradle.kotlin.dsl.withType
 import java.util.concurrent.ConcurrentHashMap
+import java.io.File
 
 /**
  * A plugin which enables all of the Gradle customizations for AndroidX.
@@ -89,6 +93,7 @@
                     project.configureAndroidCommonOptions(extension)
                     project.configureAndroidLibraryOptions(extension)
                     project.configureVersionFileWriter(extension)
+                    project.configureResourceApiChecks()
                     val verifyDependencyVersionsTask = project.createVerifyDependencyVersionsTask()
                     extension.libraryVariants.all {
                         variant -> verifyDependencyVersionsTask.dependsOn(variant.javaCompiler)
@@ -324,3 +329,46 @@
             (version.endsWith("]") || version.endsWith(")")) ||
             version.endsWith("+"))
 }
+
+private fun Project.createCheckResourceApiTask(): DefaultTask {
+    return project.tasks.createWithConfig("checkResourceApi",
+            CheckResourceApiTask::class.java) {
+        newApiFile = getGenerateResourceApiFile()
+        oldApiFile = File(project.projectDir, "api/res-${project.version}.txt")
+    }
+}
+
+private fun Project.createUpdateResourceApiTask(): DefaultTask {
+    return project.tasks.createWithConfig("updateResourceApi", UpdateResourceApiTask::class.java) {
+        newApiFile = getGenerateResourceApiFile()
+        oldApiFile = getLastReleasedApiFileFromDir(File(project.projectDir, "api/"),
+                project.version(), true, false, ApiType.RESOURCEAPI)
+    }
+}
+
+private fun Project.configureResourceApiChecks() {
+    project.afterEvaluate {
+        if (project.hasApiFolder()) {
+            val checkResourceApiTask = project.createCheckResourceApiTask()
+            val updateResourceApiTask = project.createUpdateResourceApiTask()
+            project.tasks.all { task ->
+                if (task.name == "assembleRelease") {
+                    checkResourceApiTask.dependsOn(task)
+                    updateResourceApiTask.dependsOn(task)
+                } else if (task.name == "updateApi") {
+                    task.dependsOn(updateResourceApiTask)
+                }
+            }
+            project.rootProject.tasks.all { task ->
+                if (task.name == AndroidXPlugin.BUILD_ON_SERVER_TASK) {
+                    task.dependsOn(checkResourceApiTask)
+                }
+            }
+        }
+    }
+}
+
+private fun Project.getGenerateResourceApiFile(): File {
+    return File(project.buildDir, "intermediates/public_res/minDepVersionsRelease" +
+            "/packageMinDepVersionsReleaseResources/public.txt")
+}
\ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt
new file mode 100644
index 0000000..e97f7b3
--- /dev/null
+++ b/buildSrc/src/main/kotlin/androidx/build/CheckResourceApiTask.kt
@@ -0,0 +1,40 @@
+package androidx.build
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.Optional
+import org.gradle.api.tasks.TaskAction
+import java.io.File
+
+/**
+ * Task for detecting changes in the public resource surface
+ */
+open class CheckResourceApiTask : DefaultTask() {
+
+    @InputFiles
+    @Optional
+    var oldApiFile: File? = null
+
+    @InputFiles
+    @Optional
+    var newApiFile: File? = null
+
+    @TaskAction
+    fun checkResourceApi() {
+
+        if (oldApiFile == null || !oldApiFile!!.exists()) {
+            throw GradleException("No resource api file for the current version exists, please" +
+                    " run updateApi to create one.")
+        }
+        var oldResourceApi: HashSet<String> = HashSet<String>(oldApiFile?.readLines())
+        var newResourceApi: HashSet<String> = HashSet<String>()
+        if (newApiFile != null && newApiFile!!.exists()) {
+            newResourceApi = HashSet<String>(newApiFile?.readLines())
+        }
+        if (!oldResourceApi.equals(newResourceApi)) {
+            throw GradleException("Public resource surface changes detected, please run" +
+                    " updateApi to confirm this change is intentional.")
+        }
+    }
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/UpdateResourceApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/UpdateResourceApiTask.kt
new file mode 100644
index 0000000..33af461
--- /dev/null
+++ b/buildSrc/src/main/kotlin/androidx/build/UpdateResourceApiTask.kt
@@ -0,0 +1,78 @@
+package androidx.build
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.GradleException
+import org.gradle.api.tasks.InputFiles
+import org.gradle.api.tasks.Optional
+import org.gradle.api.tasks.TaskAction
+import java.io.File
+import java.util.SortedSet
+
+/**
+ * Task for updating the public resource surface
+ */
+open class UpdateResourceApiTask : DefaultTask() {
+
+    @InputFiles
+    @Optional
+    var oldApiFile: File? = null
+
+    @InputFiles
+    @Optional
+    var newApiFile: File? = null
+
+    @TaskAction
+    fun UpdateResourceApi() {
+        if (oldApiFile == null || !!oldApiFile!!.exists()) {
+            if (newApiFile != null && newApiFile!!.exists()) {
+                newApiFile?.copyTo(File(project.projectDir,
+                    "api/res-${project.version}.txt"), true, 8)
+                return
+            } else {
+                File(project.projectDir, "api/res-${project.version}.txt").createNewFile()
+                return
+            }
+        }
+        var oldResourceApi: HashSet<String> = HashSet<String>(oldApiFile?.readLines())
+        var newResourceApi: HashSet<String> = HashSet<String>()
+        if (newApiFile != null && newApiFile!!.exists()) {
+            newResourceApi = HashSet<String>(newApiFile?.readLines())
+        }
+        val removedResourceApi = HashSet<String>()
+        val addedResourceApi = HashSet<String>(newResourceApi)
+        for (e in oldResourceApi) {
+            if (newResourceApi.contains(e)) {
+                addedResourceApi.remove(e)
+            } else {
+                removedResourceApi.add(e)
+            }
+        }
+        val oldVersion = Version(oldApiFile!!.name.removePrefix("res-").removeSuffix(".txt"))
+        if (oldVersion.major == project.version().major && !removedResourceApi.isEmpty()) {
+            var errorMessage = "Cannot remove public resources within the same major version, " +
+                    "the following were removed since version $oldVersion:\n"
+            for (e in oldResourceApi) {
+                errorMessage = errorMessage + "$e\n"
+            }
+            throw GradleException(errorMessage)
+        }
+        if (oldVersion.major == project.version().major &&
+                oldVersion.minor == project.version().minor && !addedResourceApi.isEmpty() &&
+                project.version().isFinalApi()) {
+            var errorMessage = "Cannot add public resources when api becomes final, " +
+                    "the following resources were added since version $oldVersion:\n"
+            for (e in newResourceApi) {
+                errorMessage = errorMessage + "$e\n"
+            }
+            throw GradleException(errorMessage)
+        }
+        newResourceApi.addAll(newResourceApi)
+        val sortedNewResourceApi: SortedSet<String> = newResourceApi.toSortedSet()
+        File(project.projectDir, "api/res-${project.version}.txt").bufferedWriter().use { out ->
+            sortedNewResourceApi.forEach {
+                out.write(it)
+                out.newLine()
+            }
+        }
+    }
+}
diff --git a/buildSrc/src/main/kotlin/androidx/build/Version.kt b/buildSrc/src/main/kotlin/androidx/build/Version.kt
index 9a1d947..f063c18 100644
--- a/buildSrc/src/main/kotlin/androidx/build/Version.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/Version.kt
@@ -59,7 +59,7 @@
     }
 
     companion object {
-        private val VERSION_FILE_REGEX = Pattern.compile("^(.*).txt$")
+        private val VERSION_FILE_REGEX = Pattern.compile("^(res-)?(.*).txt$")
         private val VERSION_REGEX = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+)(-.+)?$")
 
         private fun checkedMatcher(versionString: String): Matcher {
@@ -76,7 +76,7 @@
         fun parseOrNull(file: File): Version? {
             if (!file.isFile) return null
             val matcher = VERSION_FILE_REGEX.matcher(file.name)
-            return if (matcher.matches()) parseOrNull(matcher.group(1)) else null
+            return if (matcher.matches()) parseOrNull(matcher.group(2)) else null
         }
 
         /**
diff --git a/buildSrc/src/main/kotlin/androidx/build/checkapi/CheckApi.kt b/buildSrc/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
index 47784d4..d0a7b16 100644
--- a/buildSrc/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/checkapi/CheckApi.kt
@@ -43,6 +43,11 @@
     val generateLocalDiffs: JDiffTask
 )
 
+enum class ApiType {
+    CLASSAPI,
+    RESOURCEAPI
+}
+
 /**
  * Sets up api tasks for the given project
  */
@@ -331,7 +336,7 @@
 ): File? {
     val apiDir = File(rootFolder, "api")
     return getLastReleasedApiFileFromDir(apiDir, refVersion, requireFinalApi,
-            requireSameMajorRevision)
+            requireSameMajorRevision, ApiType.CLASSAPI)
 }
 
 /**
@@ -339,12 +344,15 @@
  * maxVersionExclusive or null.
  * Ignores alpha versions if requireFinalApi is true.
  * If requireSameMajorRevision is true then only considers releases having the same major revision.
+ * If apiType is RESOURCEAPI, it will return the resource api file and if it is CLASSAPI, it will
+ * return the regular api file.
  */
-private fun getLastReleasedApiFileFromDir(
+fun getLastReleasedApiFileFromDir(
     apiDir: File,
     maxVersionExclusive: Version?,
     requireFinalApi: Boolean,
-    requireSameMajorRevision: Boolean
+    requireSameMajorRevision: Boolean,
+    apiType: ApiType
 ): File? {
     if (requireSameMajorRevision && maxVersionExclusive == null) {
         throw GradleException("Version is not specified for the current project, " +
@@ -352,7 +360,10 @@
     }
     var lastFile: File? = null
     var lastVersion: Version? = null
-    apiDir.listFiles().forEach { file ->
+    var apiFiles = apiDir.listFiles().toList()
+    apiFiles = apiFiles.filter { (apiType == ApiType.RESOURCEAPI && it.name.startsWith("res")) ||
+            (apiType == ApiType.CLASSAPI && !it.name.startsWith("res")) }
+    apiFiles.forEach { file ->
         val parsed = Version.parseOrNull(file)
         parsed?.let { version ->
             if ((lastFile == null || lastVersion!! < version) &&
diff --git a/car/cluster/api/res-1.0.0-alpha5.txt b/car/cluster/api/res-1.0.0-alpha5.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car/cluster/api/res-1.0.0-alpha5.txt
diff --git a/car/core/api/res-1.0.0-alpha6.txt b/car/core/api/res-1.0.0-alpha6.txt
new file mode 100644
index 0000000..b901403
--- /dev/null
+++ b/car/core/api/res-1.0.0-alpha6.txt
@@ -0,0 +1,296 @@
+style CarListVerticalDivider
+style CarPreference
+style CarPreference_Category
+style CarPreference_CheckBoxPreference
+style CarPreference_DialogPreference
+style CarPreference_DialogPreference_EditTextPreference
+style CarPreference_DropDown
+style CarPreference_Information
+style CarPreference_PreferenceScreen
+style CarPreference_SeekBarPreference
+style CarPreference_SwitchPreference
+style CarPreference_SwitchPreferenceCompat
+style CarPreferenceFragment
+style CarPreferenceFragmentList
+style PreferenceThemeOverlayCar
+style TextAppearance_Car
+style TextAppearance_Car_Body1
+style TextAppearance_Car_Body1_Dark
+style TextAppearance_Car_Body1_Light
+style TextAppearance_Car_Body1_Medium
+style TextAppearance_Car_Body1_Medium_Dark
+style TextAppearance_Car_Body1_Medium_Light
+style TextAppearance_Car_Body2
+style TextAppearance_Car_Body2_Dark
+style TextAppearance_Car_Body2_Light
+style TextAppearance_Car_Body3
+style TextAppearance_Car_Body3_Dark
+style TextAppearance_Car_Body3_Light
+style TextAppearance_Car_Body3_Medium
+style TextAppearance_Car_Body3_Medium_Dark
+style TextAppearance_Car_Body3_Medium_Light
+style TextAppearance_Car_Body4
+style TextAppearance_Car_Display1
+style TextAppearance_Car_Display2
+style TextAppearance_Car_Display3
+style TextAppearance_Car_Display4
+style TextAppearance_Car_Error
+style TextAppearance_Car_Hint
+style TextAppearance_Car_Hint_Light
+style TextAppearance_Car_HintActionBar_Menu
+style TextAppearance_Car_SubText1
+style TextAppearance_Car_SubText2
+style TextAppearance_Car_SubText3
+style TextAppearance_Car_SubText4
+style TextAppearance_Car_SubText5
+style TextAppearance_Car_Subheader
+style Theme_Car_Dark_Dialog
+style Theme_Car_Dark_Dialog_Alert
+style Theme_Car_Dark_NoActionBar
+style Theme_Car_Dark_NoActionBar_Drawer
+style Theme_Car_Dialog
+style Theme_Car_Dialog_Alert
+style Theme_Car_Light_Dialog_Alert
+style Theme_Car_Light_List
+style Theme_Car_Light_List_DarkItems
+style Theme_Car_Light_NoActionBar
+style Theme_Car_Light_NoActionBar_Drawer
+style Theme_Car_List
+style Theme_Car_NoActionBar
+style Theme_Car_NoActionBar_Drawer
+style Widget_Car_ActionButton
+style Widget_Car_ActionButton_Light
+style Widget_Car_Button
+style Widget_Car_Button_Borderless_Colored
+style Widget_Car_Button_DarkText
+style Widget_Car_Checkbox
+style Widget_Car_Checkbox_Dark
+style Widget_Car_Checkbox_Light
+style Widget_Car_Dialog
+style Widget_Car_Dialog_Body
+style Widget_Car_Dialog_Body_Dark
+style Widget_Car_Dialog_Body_Light
+style Widget_Car_Dialog_Title
+style Widget_Car_Dialog_Title_Dark
+style Widget_Car_Dialog_Title_Light
+style Widget_Car_DrawerArrowToggle
+style Widget_Car_EditText
+style Widget_Car_List
+style Widget_Car_List_Dark
+style Widget_Car_List_Light
+style Widget_Car_ListItem
+style Widget_Car_ListItem_Dark
+style Widget_Car_ProgressBar_Horizontal
+style Widget_Car_Scrollbar
+style Widget_Car_Scrollbar_Dark
+style Widget_Car_Scrollbar_Light
+style Widget_Car_SeekBar
+style Widget_Car_SeekBar_Dark
+style Widget_Car_SeekBar_Light
+style Widget_Car_Toolbar
+style Widget_Car_Toolbar_Button_Navigation
+style Widget_Car_Toolbar_Button_Navigation_Light
+style Widget_Car_Toolbar_Light
+attr alignDividerEndTo
+attr alignDividerStartTo
+attr buttonRippleBackground
+attr buttonTintColor
+attr carArrowAnimate
+attr carArrowColor
+attr carArrowHeadLength
+attr carArrowShaftLength
+attr carArrowSize
+attr carArrowThickness
+attr carDialogTheme
+attr carMenuBarSpacing
+attr carMenuBarThickness
+color car_accent
+color car_accent_dark
+color car_accent_light
+dimen car_app_bar_default_elevation
+dimen car_app_bar_height
+dimen car_app_icon_size
+dimen car_application_icon_size
+dimen car_avatar_icon_size
+dimen car_avatar_size
+color car_body1
+color car_body1_dark
+color car_body1_light
+dimen car_body1_size
+color car_body2
+color car_body2_dark
+color car_body2_light
+dimen car_body2_size
+color car_body3
+color car_body3_dark
+color car_body3_light
+dimen car_body3_size
+color car_body4
+color car_body4_dark
+color car_body4_light
+dimen car_body4_size
+dimen car_button_height
+dimen car_button_horizontal_padding
+dimen car_button_min_width
+dimen car_button_radius
+color car_card
+color car_card_action_bar
+color car_card_action_bar_dark
+dimen car_card_action_bar_height
+color car_card_action_bar_light
+color car_card_dark
+dimen car_card_header_height
+color car_card_light
+color car_card_ripple_background
+color car_card_ripple_background_dark
+color car_card_ripple_background_light
+dimen car_dialog_action_bar_height
+dimen car_dialog_elevation
+dimen car_dialog_header_height
+color car_display1
+color car_display1_dark
+color car_display1_light
+dimen car_display1_size
+color car_display2
+color car_display2_dark
+color car_display2_light
+dimen car_display2_size
+color car_display3
+color car_display3_dark
+color car_display3_light
+dimen car_display3_size
+color car_display4
+color car_display4_dark
+color car_display4_light
+dimen car_display4_size
+dimen car_double_line_list_item_height
+layout car_drawer
+layout car_drawer_activity
+dimen car_drawer_max_width
+dimen car_fab_icon_size
+dimen car_gutter_width
+dimen car_keyline_1
+dimen car_keyline_1_neg
+dimen car_keyline_2
+dimen car_keyline_2_neg
+dimen car_keyline_3
+dimen car_keyline_3_neg
+dimen car_keyline_4
+dimen car_keyline_4_neg
+dimen car_large_avatar_size
+dimen car_list_dialog_title_elevation
+color car_list_divider
+color car_list_divider_dark
+dimen car_list_divider_height
+color car_list_divider_light
+color car_list_header
+dimen car_margin
+dimen car_navigation_bar_height
+dimen car_padding_0
+dimen car_padding_1
+dimen car_padding_2
+dimen car_padding_3
+dimen car_padding_4
+dimen car_padding_5
+dimen car_padding_6
+dimen car_pill_button_size
+dimen car_primary_icon_size
+dimen car_radius_1
+dimen car_radius_2
+dimen car_radius_3
+dimen car_radius_5
+color car_scrollbar_thumb
+color car_scrollbar_thumb_dark
+color car_scrollbar_thumb_light
+dimen car_secondary_icon_size
+color car_seekbar_track_background
+color car_seekbar_track_background_dark
+color car_seekbar_track_background_light
+color car_seekbar_track_secondary_progress
+dimen car_single_line_list_item_height
+dimen car_status_bar_height
+dimen car_status_bar_icon_size
+dimen car_sub_header_height
+color car_subtext1
+color car_subtext1_dark
+color car_subtext1_light
+dimen car_subtext1_size
+color car_subtext2
+color car_subtext2_dark
+color car_subtext2_light
+dimen car_subtext2_size
+color car_subtext3
+color car_subtext3_dark
+color car_subtext3_light
+dimen car_subtext3_size
+color car_subtext4
+color car_subtext4_dark
+color car_subtext4_light
+dimen car_subtext4_size
+color car_subtext5
+color car_subtext5_dark
+color car_subtext5_light
+dimen car_subtext5_size
+color car_switch_compat_track_off
+color car_switch_compat_track_on
+color car_switch_thumb_off
+color car_switch_thumb_on
+color car_switch_track_off
+color car_switch_track_on
+color car_tint
+color car_tint_dark
+color car_tint_light
+dimen car_touch_target_size
+dimen car_vertical_line_divider_height
+dimen car_vertical_line_divider_width
+attr columnSpan
+attr dialogBackgroundColor
+attr dialogBodyStyle
+attr dialogButtonStyle
+attr dialogListTheme
+attr dialogTitleStyle
+attr dividerEndMargin
+attr dividerStartMargin
+attr downButtonIcon
+attr drawerBackButtonId
+attr drawerBackButtonTint
+attr drawerBackgroundColor
+attr drawerHeaderColor
+attr drawerItemBodyTextAppearance
+attr drawerItemTitleTextAppearance
+attr drawerListId
+attr drawerListTheme
+attr drawerNormalLayoutId
+attr drawerProgressId
+attr drawerRippleColor
+attr drawerSmallLayoutId
+attr drawerTitleId
+attr drawerToolbarId
+attr gutter
+attr gutterSize
+attr itemSpacing
+attr listContentTopOffset
+attr listDividerColor
+attr listEndMargin
+attr listItemActionDividerColor
+attr listItemBackgroundColor
+attr listItemBodyTextAppearance
+attr listItemSubheaderTextAppearance
+attr listItemTitleTextAppearance
+attr navigationIcon
+attr navigationIconBackground
+attr navigationIconContainerWidth
+attr offsetScrollBar
+attr pagedListViewStyle
+attr pagedScrollBarViewStyle
+attr scrollBarColor
+attr scrollBarContainerWidth
+attr scrollBarEnabled
+attr scrollBarGravity
+attr scrollBarTopMargin
+attr showPagedListViewDivider
+attr showScrollBarThumb
+attr title
+attr titleTextAppearance
+attr upButtonIcon
+attr verticallyCenterListContent
diff --git a/car/moderator/api/res-1.0.0-alpha1.txt b/car/moderator/api/res-1.0.0-alpha1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/car/moderator/api/res-1.0.0-alpha1.txt
diff --git a/cardview/api/res-1.0.0.txt b/cardview/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cardview/api/res-1.0.0.txt
diff --git a/content/api/res-1.0.0.txt b/content/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/content/api/res-1.0.0.txt
diff --git a/coordinatorlayout/api/res-1.1.0-alpha01.txt b/coordinatorlayout/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..ecd002a2
--- /dev/null
+++ b/coordinatorlayout/api/res-1.1.0-alpha01.txt
@@ -0,0 +1,9 @@
+style Widget_Support_CoordinatorLayout
+attr keylines
+attr layout_anchor
+attr layout_anchorGravity
+attr layout_behavior
+attr layout_dodgeInsetEdges
+attr layout_insetEdge
+attr layout_keyline
+attr statusBarBackground
diff --git a/core/api/res-1.1.0-alpha02.txt b/core/api/res-1.1.0-alpha02.txt
new file mode 100644
index 0000000..e52dd8c
--- /dev/null
+++ b/core/api/res-1.1.0-alpha02.txt
@@ -0,0 +1,17 @@
+style TextAppearance_Compat_Notification
+style TextAppearance_Compat_Notification_Info
+style TextAppearance_Compat_Notification_Line2
+style TextAppearance_Compat_Notification_Time
+style TextAppearance_Compat_Notification_Title
+attr alpha
+attr font
+attr fontProviderAuthority
+attr fontProviderCerts
+attr fontProviderFetchStrategy
+attr fontProviderFetchTimeout
+attr fontProviderPackage
+attr fontProviderQuery
+attr fontStyle
+attr fontVariationSettings
+attr fontWeight
+attr ttcIndex
diff --git a/core/ktx/api/res-1.0.1.txt b/core/ktx/api/res-1.0.1.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core/ktx/api/res-1.0.1.txt
diff --git a/cursoradapter/api/res-1.0.0.txt b/cursoradapter/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/cursoradapter/api/res-1.0.0.txt
diff --git a/customview/api/res-1.0.0.txt b/customview/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/customview/api/res-1.0.0.txt
diff --git a/documentfile/api/res-1.0.0.txt b/documentfile/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/documentfile/api/res-1.0.0.txt
diff --git a/drawerlayout/api/res-1.0.0.txt b/drawerlayout/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/drawerlayout/api/res-1.0.0.txt
diff --git a/dynamic-animation/api/res-1.0.0.txt b/dynamic-animation/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dynamic-animation/api/res-1.0.0.txt
diff --git a/dynamic-animation/ktx/api/res-1.0.0-alpha01.txt b/dynamic-animation/ktx/api/res-1.0.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/dynamic-animation/ktx/api/res-1.0.0-alpha01.txt
diff --git a/emoji/appcompat/api/res-1.0.0.txt b/emoji/appcompat/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji/appcompat/api/res-1.0.0.txt
diff --git a/emoji/bundled/api/res-1.0.0.txt b/emoji/bundled/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/emoji/bundled/api/res-1.0.0.txt
diff --git a/emoji/core/api/res-1.0.0.txt b/emoji/core/api/res-1.0.0.txt
new file mode 100644
index 0000000..8bc8423
--- /dev/null
+++ b/emoji/core/api/res-1.0.0.txt
@@ -0,0 +1,2 @@
+attr emojiReplaceStrategy
+attr maxEmojiCount
diff --git a/exifinterface/api/res-1.0.0.txt b/exifinterface/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/exifinterface/api/res-1.0.0.txt
diff --git a/fragment/api/res-1.1.0-alpha03.txt b/fragment/api/res-1.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/api/res-1.1.0-alpha03.txt
diff --git a/fragment/ktx/api/res-1.1.0-alpha03.txt b/fragment/ktx/api/res-1.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/ktx/api/res-1.1.0-alpha03.txt
diff --git a/fragment/testing/api/res-1.1.0-alpha03.txt b/fragment/testing/api/res-1.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/fragment/testing/api/res-1.1.0-alpha03.txt
diff --git a/graphics/drawable/animated/api/res-1.1.0-alpha01.txt b/graphics/drawable/animated/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/graphics/drawable/animated/api/res-1.1.0-alpha01.txt
diff --git a/graphics/drawable/static/api/res-1.1.0-alpha01.txt b/graphics/drawable/static/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/graphics/drawable/static/api/res-1.1.0-alpha01.txt
diff --git a/gridlayout/api/res-1.1.0-alpha01.txt b/gridlayout/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/gridlayout/api/res-1.1.0-alpha01.txt
diff --git a/heifwriter/api/res-1.0.0.txt b/heifwriter/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/heifwriter/api/res-1.0.0.txt
diff --git a/interpolator/api/res-1.0.0.txt b/interpolator/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/interpolator/api/res-1.0.0.txt
diff --git a/leanback-preference/api/res-1.1.0-alpha01.txt b/leanback-preference/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/leanback-preference/api/res-1.1.0-alpha01.txt
diff --git a/leanback/api/res-1.1.0-alpha01.txt b/leanback/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/leanback/api/res-1.1.0-alpha01.txt
diff --git a/legacy/core-ui/api/res-1.0.0.txt b/legacy/core-ui/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/legacy/core-ui/api/res-1.0.0.txt
diff --git a/legacy/core-utils/api/res-1.0.0.txt b/legacy/core-utils/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/legacy/core-utils/api/res-1.0.0.txt
diff --git a/lifecycle/extensions/api/res-2.1.0-alpha01.txt b/lifecycle/extensions/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/extensions/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/livedata-core/api/res-2.1.0-alpha01.txt b/lifecycle/livedata-core/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata-core/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/livedata-core/ktx/api/res-2.1.0-alpha01.txt b/lifecycle/livedata-core/ktx/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata-core/ktx/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/livedata/api/res-2.1.0-alpha01.txt b/lifecycle/livedata/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/livedata/ktx/api/res-2.1.0-alpha01.txt b/lifecycle/livedata/ktx/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/livedata/ktx/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/process/api/res-2.1.0-alpha01.txt b/lifecycle/process/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/process/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/reactivestreams/api/res-2.1.0-alpha01.txt b/lifecycle/reactivestreams/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/reactivestreams/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/reactivestreams/ktx/api/res-2.1.0-alpha01.txt b/lifecycle/reactivestreams/ktx/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/reactivestreams/ktx/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/runtime/api/res-2.1.0-alpha01.txt b/lifecycle/runtime/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/runtime/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/savedstate-core/api/res-1.0.0-alpha01.txt b/lifecycle/savedstate-core/api/res-1.0.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/savedstate-core/api/res-1.0.0-alpha01.txt
diff --git a/lifecycle/service/api/res-2.1.0-alpha01.txt b/lifecycle/service/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/service/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/viewmodel/api/res-2.1.0-alpha01.txt b/lifecycle/viewmodel/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/viewmodel/api/res-2.1.0-alpha01.txt
diff --git a/lifecycle/viewmodel/ktx/api/res-2.1.0-alpha01.txt b/lifecycle/viewmodel/ktx/api/res-2.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lifecycle/viewmodel/ktx/api/res-2.1.0-alpha01.txt
diff --git a/loader/api/res-1.1.0-alpha02.txt b/loader/api/res-1.1.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/loader/api/res-1.1.0-alpha02.txt
diff --git a/localbroadcastmanager/api/res-1.1.0-alpha01.txt b/localbroadcastmanager/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/localbroadcastmanager/api/res-1.1.0-alpha01.txt
diff --git a/media-widget/api/res-1.0.0-alpha06.txt b/media-widget/api/res-1.0.0-alpha06.txt
new file mode 100644
index 0000000..9015818
--- /dev/null
+++ b/media-widget/api/res-1.0.0-alpha06.txt
@@ -0,0 +1,2 @@
+attr enableControlView
+attr viewType
diff --git a/media/api/res-1.1.0-alpha01.txt b/media/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..7a1e44d
--- /dev/null
+++ b/media/api/res-1.1.0-alpha01.txt
@@ -0,0 +1,5 @@
+style TextAppearance_Compat_Notification_Info_Media
+style TextAppearance_Compat_Notification_Line2_Media
+style TextAppearance_Compat_Notification_Media
+style TextAppearance_Compat_Notification_Time_Media
+style TextAppearance_Compat_Notification_Title_Media
diff --git a/media2/api/res-1.0.0-alpha04.txt b/media2/api/res-1.0.0-alpha04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/media2/api/res-1.0.0-alpha04.txt
diff --git a/mediarouter/api/res-1.1.0-alpha01.txt b/mediarouter/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/mediarouter/api/res-1.1.0-alpha01.txt
diff --git a/navigation/common/api/res-1.0.0-alpha08.txt b/navigation/common/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/common/api/res-1.0.0-alpha08.txt
diff --git a/navigation/common/ktx/api/res-1.0.0-alpha08.txt b/navigation/common/ktx/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/common/ktx/api/res-1.0.0-alpha08.txt
diff --git a/navigation/fragment/api/res-1.0.0-alpha08.txt b/navigation/fragment/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/fragment/api/res-1.0.0-alpha08.txt
diff --git a/navigation/fragment/ktx/api/res-1.0.0-alpha08.txt b/navigation/fragment/ktx/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/fragment/ktx/api/res-1.0.0-alpha08.txt
diff --git a/navigation/runtime/api/res-1.0.0-alpha08.txt b/navigation/runtime/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/runtime/api/res-1.0.0-alpha08.txt
diff --git a/navigation/runtime/ktx/api/res-1.0.0-alpha08.txt b/navigation/runtime/ktx/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/runtime/ktx/api/res-1.0.0-alpha08.txt
diff --git a/navigation/testing/api/res-1.0.0-alpha08.txt b/navigation/testing/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/testing/api/res-1.0.0-alpha08.txt
diff --git a/navigation/ui/api/res-1.0.0-alpha08.txt b/navigation/ui/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/ui/api/res-1.0.0-alpha08.txt
diff --git a/navigation/ui/ktx/api/res-1.0.0-alpha08.txt b/navigation/ui/ktx/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/navigation/ui/ktx/api/res-1.0.0-alpha08.txt
diff --git a/paging/runtime/api/res-2.2.0-alpha01.txt b/paging/runtime/api/res-2.2.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/runtime/api/res-2.2.0-alpha01.txt
diff --git a/paging/runtime/ktx/api/res-2.2.0-alpha01.txt b/paging/runtime/ktx/api/res-2.2.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/runtime/ktx/api/res-2.2.0-alpha01.txt
diff --git a/paging/rxjava2/api/res-2.2.0-alpha01.txt b/paging/rxjava2/api/res-2.2.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/rxjava2/api/res-2.2.0-alpha01.txt
diff --git a/paging/rxjava2/ktx/api/res-2.2.0-alpha01.txt b/paging/rxjava2/ktx/api/res-2.2.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/paging/rxjava2/ktx/api/res-2.2.0-alpha01.txt
diff --git a/palette/api/res-1.1.0-alpha01.txt b/palette/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/palette/api/res-1.1.0-alpha01.txt
diff --git a/palette/ktx/api/res-1.0.0.txt b/palette/ktx/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/palette/ktx/api/res-1.0.0.txt
diff --git a/percent/api/res-1.0.0.txt b/percent/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/percent/api/res-1.0.0.txt
diff --git a/persistence/db-framework/api/res-2.0.0.txt b/persistence/db-framework/api/res-2.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/persistence/db-framework/api/res-2.0.0.txt
diff --git a/persistence/db/api/res-2.0.0.txt b/persistence/db/api/res-2.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/persistence/db/api/res-2.0.0.txt
diff --git a/persistence/db/ktx/api/res-2.0.0.txt b/persistence/db/ktx/api/res-2.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/persistence/db/ktx/api/res-2.0.0.txt
diff --git a/preference/api/res-1.1.0-alpha02.txt b/preference/api/res-1.1.0-alpha02.txt
new file mode 100644
index 0000000..d6ead9d
--- /dev/null
+++ b/preference/api/res-1.1.0-alpha02.txt
@@ -0,0 +1,76 @@
+style Preference
+style Preference_Category
+style Preference_CheckBoxPreference
+style Preference_DialogPreference
+style Preference_DialogPreference_EditTextPreference
+style Preference_DropDown
+style Preference_Information
+style Preference_PreferenceScreen
+style Preference_SeekBarPreference
+style Preference_SwitchPreferenceCompat
+style PreferenceFragment
+style PreferenceFragmentList
+style PreferenceThemeOverlay
+attr adjustable
+attr allowDividerAbove
+attr allowDividerAfterLastItem
+attr allowDividerBelow
+attr checkBoxPreferenceStyle
+attr defaultValue
+attr dependency
+attr dialogIcon
+attr dialogLayout
+attr dialogMessage
+attr dialogPreferenceStyle
+attr dialogTitle
+attr disableDependentsState
+attr dropdownPreferenceStyle
+attr editTextPreferenceStyle
+attr enabled
+attr entries
+attr entryValues
+attr fragment
+attr icon
+attr iconSpaceReserved
+attr key
+attr layout
+attr maxHeight
+attr maxWidth
+attr min
+attr negativeButtonText
+attr order
+attr orderingFromXml
+attr persistent
+attr positiveButtonText
+attr preferenceActivityStyle
+attr preferenceCategoryStyle
+attr preferenceFragmentCompatStyle
+attr preferenceFragmentListStyle
+attr preferenceFragmentPaddingSide
+attr preferenceFragmentStyle
+attr preferenceHeaderPanelStyle
+attr preferenceInformationStyle
+attr preferenceLayoutChild
+attr preferenceListStyle
+attr preferencePanelStyle
+attr preferenceScreenStyle
+attr preferenceStyle
+attr preferenceTheme
+attr ringtonePreferenceStyle
+attr seekBarIncrement
+attr seekBarPreferenceStyle
+attr selectable
+attr selectableItemBackground
+attr shouldDisableView
+attr showSeekBarValue
+attr singleLineTitle
+attr summary
+attr summaryOff
+attr summaryOn
+attr switchPreferenceCompatStyle
+attr switchPreferenceStyle
+attr switchTextOff
+attr switchTextOn
+attr title
+attr widgetLayout
+attr yesNoPreferenceStyle
diff --git a/preference/ktx/api/res-1.0.0.txt b/preference/ktx/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/preference/ktx/api/res-1.0.0.txt
diff --git a/print/api/res-1.0.0.txt b/print/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/print/api/res-1.0.0.txt
diff --git a/recommendation/api/res-1.0.0.txt b/recommendation/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/recommendation/api/res-1.0.0.txt
diff --git a/recyclerview/recyclerview/api/res-1.1.0-alpha01.txt b/recyclerview/recyclerview/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..475bfc43
--- /dev/null
+++ b/recyclerview/recyclerview/api/res-1.1.0-alpha01.txt
@@ -0,0 +1,9 @@
+attr fastScrollEnabled
+attr fastScrollHorizontalThumbDrawable
+attr fastScrollHorizontalTrackDrawable
+attr fastScrollVerticalThumbDrawable
+attr fastScrollVerticalTrackDrawable
+attr layoutManager
+attr reverseLayout
+attr spanCount
+attr stackFromEnd
diff --git a/recyclerview/selection/api/res-1.1.0-alpha01.txt b/recyclerview/selection/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/recyclerview/selection/api/res-1.1.0-alpha01.txt
diff --git a/remotecallback/api/res-1.0.0-alpha01.txt b/remotecallback/api/res-1.0.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/remotecallback/api/res-1.0.0-alpha01.txt
diff --git a/room/runtime/api/res-2.1.0-alpha03.txt b/room/runtime/api/res-2.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/runtime/api/res-2.1.0-alpha03.txt
diff --git a/room/rxjava2/api/res-2.1.0-alpha03.txt b/room/rxjava2/api/res-2.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/rxjava2/api/res-2.1.0-alpha03.txt
diff --git a/room/testing/api/res-2.1.0-alpha03.txt b/room/testing/api/res-2.1.0-alpha03.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/room/testing/api/res-2.1.0-alpha03.txt
diff --git a/savedstate/bundle/api/res-1.0.0-alpha01.txt b/savedstate/bundle/api/res-1.0.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/savedstate/bundle/api/res-1.0.0-alpha01.txt
diff --git a/slices/builders/api/res-1.1.0-alpha01.txt b/slices/builders/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slices/builders/api/res-1.1.0-alpha01.txt
diff --git a/slices/builders/ktx/api/res-1.0.0-alpha6.txt b/slices/builders/ktx/api/res-1.0.0-alpha6.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slices/builders/ktx/api/res-1.0.0-alpha6.txt
diff --git a/slices/core/api/res-1.1.0-alpha01.txt b/slices/core/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slices/core/api/res-1.1.0-alpha01.txt
diff --git a/slices/view/api/res-1.1.0-alpha01.txt b/slices/view/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slices/view/api/res-1.1.0-alpha01.txt
diff --git a/slidingpanelayout/api/res-1.0.0.txt b/slidingpanelayout/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slidingpanelayout/api/res-1.0.0.txt
diff --git a/swiperefreshlayout/api/res-1.1.0-alpha01.txt b/swiperefreshlayout/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/swiperefreshlayout/api/res-1.1.0-alpha01.txt
diff --git a/textclassifier/api/res-1.0.0-alpha01.txt b/textclassifier/api/res-1.0.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/textclassifier/api/res-1.0.0-alpha01.txt
diff --git a/transition/api/res-1.1.0-alpha01.txt b/transition/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/transition/api/res-1.1.0-alpha01.txt
diff --git a/tv-provider/api/res-1.0.0.txt b/tv-provider/api/res-1.0.0.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tv-provider/api/res-1.0.0.txt
diff --git a/versionedparcelable/api/res-1.1.0-alpha01.txt b/versionedparcelable/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/versionedparcelable/api/res-1.1.0-alpha01.txt
diff --git a/viewpager/api/res-1.1.0-alpha01.txt b/viewpager/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/viewpager/api/res-1.1.0-alpha01.txt
diff --git a/wear/api/res-1.0.0.txt b/wear/api/res-1.0.0.txt
new file mode 100644
index 0000000..44b0b55
--- /dev/null
+++ b/wear/api/res-1.0.0.txt
@@ -0,0 +1 @@
+style Widget_Wear_RoundSwitch
diff --git a/webkit/api/res-1.1.0-alpha01.txt b/webkit/api/res-1.1.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/webkit/api/res-1.1.0-alpha01.txt
diff --git a/work/workmanager-firebase/api/res-1.0.0-alpha11.txt b/work/workmanager-firebase/api/res-1.0.0-alpha11.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-firebase/api/res-1.0.0-alpha11.txt
diff --git a/work/workmanager-ktx/api/res-1.0.0-alpha12.txt b/work/workmanager-ktx/api/res-1.0.0-alpha12.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-ktx/api/res-1.0.0-alpha12.txt
diff --git a/work/workmanager-testing/api/res-1.0.0-alpha12.txt b/work/workmanager-testing/api/res-1.0.0-alpha12.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-testing/api/res-1.0.0-alpha12.txt
diff --git a/work/workmanager/api/res-1.0.0-alpha12.txt b/work/workmanager/api/res-1.0.0-alpha12.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager/api/res-1.0.0-alpha12.txt