Build support libs with AAPT2

Use AAPT2 to build the framework support libraries. Apps built with AAPT2 can more efficiently
link against these libraries by specifying their module name in LOCAL_STATIC_ANDROID_LIBRARIES.

Ex:

LOCAL_STATIC_ANDROID_LIBRARIES := android-support-v7-appcompat android-support-v4

Apps built with AAPT2 do not need to specify --auto-add-overlay or --extra-packages, as these
are automatically added as needed by the build system.

This change will not affect any apps that currently depend on the support libraries.
This is because they import the resources directly.

We use LOCAL_JAR_EXCLUDE_FILES := none only to support javac when building javadoc.
Jack builds are correct because the build system passes in the latest generated R.java
ahead of any previous ones packaged in classes.jack. This means we can dynamically reference
a support lib module, correctly seeing non-final R.java. Then at app package time, we only
include the final R.java generated by the AAPT2 packaging step.

Bug:25958912
Change-Id: I71bff080ff2694aa3df1c8a67d933e2daab0f245

GitOrigin-RevId=0dac8d82e2a249d7c9c42ab259389e11cac15400

PiperOrigin-RevId: 140560475
This commit is contained in:
Adam Lesinski 2016-11-30 04:01:39 +00:00 committed by Travis Collins
parent e89eec227d
commit ecc159f2e4
8 changed files with 81 additions and 48 deletions

View File

@ -14,22 +14,23 @@
LOCAL_PATH := $(call my-dir)
# Android libraries referenced by this module's resources.
resource_libs := \
android-support-v7-appcompat \
android-support-v7-recyclerview
# Build the resources using the latest applicable SDK version.
# We do this here because the final static library must be compiled with an older
# SDK version than the resources. The resources library and the R class that it
# contains will not be linked into the final static library.
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-design-res
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_SRC_FILES := $(call all-java-files-under, dummy)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res \
frameworks/support/v7/appcompat/res \
frameworks/support/v7/recyclerview/res
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages android.support.v7.appcompat \
--extra-packages android.support.v7.recyclerview \
--no-version-vectors
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SHARED_ANDROID_LIBRARIES := $(resource_libs)
LOCAL_AAPT_FLAGS := --no-version-vectors
LOCAL_JAR_EXCLUDE_FILES := none
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
include $(BUILD_STATIC_JAVA_LIBRARY)
@ -42,7 +43,8 @@ include $(CLEAR_VARS)
LOCAL_MODULE := android-support-design-base
LOCAL_SDK_VERSION := 7
LOCAL_SRC_FILES := $(call all-java-files-under, base)
LOCAL_JAVA_LIBRARIES := android-support-design-res \
LOCAL_JAVA_LIBRARIES := \
android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
@ -57,7 +59,8 @@ LOCAL_MODULE := android-support-design-eclair-mr1
LOCAL_SDK_VERSION := 7
LOCAL_SRC_FILES := $(call all-java-files-under, eclair-mr1)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-design-base
LOCAL_JAVA_LIBRARIES := android-support-design-res \
LOCAL_JAVA_LIBRARIES := \
android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
@ -72,7 +75,8 @@ LOCAL_MODULE := android-support-design-honeycomb
LOCAL_SDK_VERSION := 11
LOCAL_SRC_FILES := $(call all-java-files-under, honeycomb)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-design-eclair-mr1
LOCAL_JAVA_LIBRARIES := android-support-design-res \
LOCAL_JAVA_LIBRARIES := \
android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
@ -87,7 +91,8 @@ LOCAL_MODULE := android-support-design-honeycomb-mr1
LOCAL_SDK_VERSION := 12
LOCAL_SRC_FILES := $(call all-java-files-under, honeycomb-mr1)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-design-honeycomb
LOCAL_JAVA_LIBRARIES := android-support-design-res \
LOCAL_JAVA_LIBRARIES := \
android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
@ -102,7 +107,8 @@ LOCAL_MODULE := android-support-design-ics
LOCAL_SDK_VERSION := 14
LOCAL_SRC_FILES := $(call all-java-files-under, ics)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-design-honeycomb-mr1
LOCAL_JAVA_LIBRARIES := android-support-design-res \
LOCAL_JAVA_LIBRARIES := \
android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
@ -117,7 +123,8 @@ LOCAL_MODULE := android-support-design-lollipop
LOCAL_SDK_VERSION := 21
LOCAL_SRC_FILES := $(call all-java-files-under, lollipop)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-design-ics
LOCAL_JAVA_LIBRARIES := android-support-design-res \
LOCAL_JAVA_LIBRARIES := \
android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
@ -127,18 +134,24 @@ include $(BUILD_STATIC_JAVA_LIBRARY)
support_module_src_files += $(LOCAL_SRC_FILES)
# Here is the final static library that apps can link against.
# The R class is automatically excluded from the generated library.
# Applications that use this library must specify LOCAL_RESOURCE_DIR
# in their makefiles to include the resources in their package.
# Applications that use this library must specify
#
# LOCAL_STATIC_ANDROID_LIBRARIES := \
# android-support-design \
# android-support-v7-appcompat \
# android-support-v7-recyclerview \
# android-support-v4
#
# in their makefiles to include the resources and their dependencies in their package.
include $(CLEAR_VARS)
LOCAL_USE_AAPT2 := true
LOCAL_MODULE := android-support-design
LOCAL_SDK_VERSION := $(SUPPORT_CURRENT_SDK_VERSION)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_STATIC_JAVA_LIBRARIES := android-support-design-lollipop
LOCAL_JAVA_LIBRARIES := android-support-design-res \
android-support-v4 \
android-support-v7-appcompat \
android-support-v7-recyclerview
LOCAL_STATIC_ANDROID_LIBRARIES := android-support-design-res
LOCAL_SHARED_ANDROID_LIBRARIES := $(resource_libs) android-support-v4
LOCAL_JAR_EXCLUDE_FILES := none
LOCAL_JAVA_LANGUAGE_VERSION := 1.7
include $(BUILD_STATIC_JAVA_LIBRARY)

View File

@ -108,7 +108,8 @@ public class NavigationMenuItemView extends ForegroundLinearLayout implements Me
private StateListDrawable createDefaultBackground() {
TypedValue value = new TypedValue();
if (getContext().getTheme().resolveAttribute(R.attr.colorControlHighlight, value, true)) {
if (getContext().getTheme().resolveAttribute(
android.support.v7.appcompat.R.attr.colorControlHighlight, value, true)) {
StateListDrawable drawable = new StateListDrawable();
drawable.addState(CHECKED_STATE_SET, new ColorDrawable(value.data));
drawable.addState(EMPTY_STATE_SET, new ColorDrawable(Color.TRANSPARENT));

View File

@ -194,19 +194,26 @@ final class CollapsingTextHelper {
}
void setCollapsedTextAppearance(int resId) {
TypedArray a = mView.getContext().obtainStyledAttributes(resId, R.styleable.TextAppearance);
if (a.hasValue(R.styleable.TextAppearance_android_textColor)) {
TypedArray a = mView.getContext().obtainStyledAttributes(resId,
android.support.v7.appcompat.R.styleable.TextAppearance);
if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor)) {
mCollapsedTextColor = a.getColor(
R.styleable.TextAppearance_android_textColor, mCollapsedTextColor);
android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor,
mCollapsedTextColor);
}
if (a.hasValue(R.styleable.TextAppearance_android_textSize)) {
if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize)) {
mCollapsedTextSize = a.getDimensionPixelSize(
R.styleable.TextAppearance_android_textSize, (int) mCollapsedTextSize);
android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize,
(int) mCollapsedTextSize);
}
mCollapsedShadowColor = a.getInt(R.styleable.TextAppearance_android_shadowColor, 0);
mCollapsedShadowDx = a.getFloat(R.styleable.TextAppearance_android_shadowDx, 0);
mCollapsedShadowDy = a.getFloat(R.styleable.TextAppearance_android_shadowDy, 0);
mCollapsedShadowRadius = a.getFloat(R.styleable.TextAppearance_android_shadowRadius, 0);
mCollapsedShadowColor = a.getInt(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowColor, 0);
mCollapsedShadowDx = a.getFloat(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDx, 0);
mCollapsedShadowDy = a.getFloat(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDy, 0);
mCollapsedShadowRadius = a.getFloat(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowRadius, 0);
a.recycle();
if (Build.VERSION.SDK_INT >= 16) {
@ -217,19 +224,26 @@ final class CollapsingTextHelper {
}
void setExpandedTextAppearance(int resId) {
TypedArray a = mView.getContext().obtainStyledAttributes(resId, R.styleable.TextAppearance);
if (a.hasValue(R.styleable.TextAppearance_android_textColor)) {
TypedArray a = mView.getContext().obtainStyledAttributes(resId,
android.support.v7.appcompat.R.styleable.TextAppearance);
if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor)) {
mExpandedTextColor = a.getColor(
R.styleable.TextAppearance_android_textColor, mExpandedTextColor);
android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor,
mExpandedTextColor);
}
if (a.hasValue(R.styleable.TextAppearance_android_textSize)) {
if (a.hasValue(android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize)) {
mExpandedTextSize = a.getDimensionPixelSize(
R.styleable.TextAppearance_android_textSize, (int) mExpandedTextSize);
android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize,
(int) mExpandedTextSize);
}
mExpandedShadowColor = a.getInt(R.styleable.TextAppearance_android_shadowColor, 0);
mExpandedShadowDx = a.getFloat(R.styleable.TextAppearance_android_shadowDx, 0);
mExpandedShadowDy = a.getFloat(R.styleable.TextAppearance_android_shadowDy, 0);
mExpandedShadowRadius = a.getFloat(R.styleable.TextAppearance_android_shadowRadius, 0);
mExpandedShadowColor = a.getInt(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowColor, 0);
mExpandedShadowDx = a.getFloat(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDx, 0);
mExpandedShadowDy = a.getFloat(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowDy, 0);
mExpandedShadowRadius = a.getFloat(
android.support.v7.appcompat.R.styleable.TextAppearance_android_shadowRadius, 0);
a.recycle();
if (Build.VERSION.SDK_INT >= 16) {

View File

@ -179,7 +179,7 @@ public class CollapsingToolbarLayout extends FrameLayout {
mCollapsingTextHelper.setExpandedTextAppearance(
R.style.TextAppearance_Design_CollapsingToolbar_Expanded);
mCollapsingTextHelper.setCollapsedTextAppearance(
R.style.TextAppearance_AppCompat_Widget_ActionBar_Title);
android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Widget_ActionBar_Title);
// Now overlay any custom text appearances
if (a.hasValue(R.styleable.CollapsingToolbarLayout_expandedTitleTextAppearance)) {

View File

@ -413,7 +413,8 @@ public class NavigationView extends ScrimInsetsFrameLayout {
return null;
}
ColorStateList baseColor = getResources().getColorStateList(value.resourceId);
if (!getContext().getTheme().resolveAttribute(R.attr.colorPrimary, value, true)) {
if (!getContext().getTheme().resolveAttribute(
android.support.v7.appcompat.R.attr.colorPrimary, value, true)) {
return null;
}
int colorPrimary = value.data;

View File

@ -299,10 +299,12 @@ public class TabLayout extends HorizontalScrollView {
// Text colors/sizes come from the text appearance first
final TypedArray ta = context.obtainStyledAttributes(mTabTextAppearance,
R.styleable.TextAppearance);
android.support.v7.appcompat.R.styleable.TextAppearance);
try {
mTabTextSize = ta.getDimensionPixelSize(R.styleable.TextAppearance_android_textSize, 0);
mTabTextColors = ta.getColorStateList(R.styleable.TextAppearance_android_textColor);
mTabTextSize = ta.getDimensionPixelSize(
android.support.v7.appcompat.R.styleable.TextAppearance_android_textSize, 0);
mTabTextColors = ta.getColorStateList(
android.support.v7.appcompat.R.styleable.TextAppearance_android_textColor);
} finally {
ta.recycle();
}

View File

@ -494,7 +494,7 @@ public class TextInputLayout extends LinearLayout {
// Probably caused by our theme not extending from Theme.Design*. Instead
// we manually set something appropriate
mErrorView.setTextAppearance(getContext(),
R.style.TextAppearance_AppCompat_Caption);
android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Caption);
mErrorView.setTextColor(ContextCompat.getColor(
getContext(), R.color.design_textinput_error_color_light));
}
@ -615,7 +615,7 @@ public class TextInputLayout extends LinearLayout {
// Probably caused by our theme not extending from Theme.Design*. Instead
// we manually set something appropriate
mCounterView.setTextAppearance(getContext(),
R.style.TextAppearance_AppCompat_Caption);
android.support.v7.appcompat.R.style.TextAppearance_AppCompat_Caption);
mCounterView.setTextColor(ContextCompat.getColor(
getContext(), R.color.design_textinput_error_color_light));
}

View File

@ -22,7 +22,9 @@ import android.support.design.R;
class ThemeUtils {
private static final int[] APPCOMPAT_CHECK_ATTRS = { R.attr.colorPrimary };
private static final int[] APPCOMPAT_CHECK_ATTRS = {
android.support.v7.appcompat.R.attr.colorPrimary
};
static void checkAppCompatTheme(Context context) {
TypedArray a = context.obtainStyledAttributes(APPCOMPAT_CHECK_ATTRS);