From ecc159f2e454e3d992520ff47068cd5cc10ce885 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Wed, 30 Nov 2016 04:01:39 +0000 Subject: [PATCH] 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 --- Android.mk | 55 ++++++++++++------- .../internal/NavigationMenuItemView.java | 3 +- .../design/widget/CollapsingTextHelper.java | 50 +++++++++++------ .../widget/CollapsingToolbarLayout.java | 2 +- .../support/design/widget/NavigationView.java | 3 +- .../support/design/widget/TabLayout.java | 8 ++- .../design/widget/TextInputLayout.java | 4 +- .../support/design/widget/ThemeUtils.java | 4 +- 8 files changed, 81 insertions(+), 48 deletions(-) diff --git a/Android.mk b/Android.mk index c4004f51a..12bfbe383 100644 --- a/Android.mk +++ b/Android.mk @@ -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) diff --git a/src/android/support/design/internal/NavigationMenuItemView.java b/src/android/support/design/internal/NavigationMenuItemView.java index 042334576..1e2c92837 100644 --- a/src/android/support/design/internal/NavigationMenuItemView.java +++ b/src/android/support/design/internal/NavigationMenuItemView.java @@ -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)); diff --git a/src/android/support/design/widget/CollapsingTextHelper.java b/src/android/support/design/widget/CollapsingTextHelper.java index 6f8d51c31..4a95a1375 100644 --- a/src/android/support/design/widget/CollapsingTextHelper.java +++ b/src/android/support/design/widget/CollapsingTextHelper.java @@ -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) { diff --git a/src/android/support/design/widget/CollapsingToolbarLayout.java b/src/android/support/design/widget/CollapsingToolbarLayout.java index 17fada510..1de290918 100644 --- a/src/android/support/design/widget/CollapsingToolbarLayout.java +++ b/src/android/support/design/widget/CollapsingToolbarLayout.java @@ -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)) { diff --git a/src/android/support/design/widget/NavigationView.java b/src/android/support/design/widget/NavigationView.java index 696a7e4a5..05fdedb50 100644 --- a/src/android/support/design/widget/NavigationView.java +++ b/src/android/support/design/widget/NavigationView.java @@ -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; diff --git a/src/android/support/design/widget/TabLayout.java b/src/android/support/design/widget/TabLayout.java index 1059b9a31..cf3d1eba5 100755 --- a/src/android/support/design/widget/TabLayout.java +++ b/src/android/support/design/widget/TabLayout.java @@ -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(); } diff --git a/src/android/support/design/widget/TextInputLayout.java b/src/android/support/design/widget/TextInputLayout.java index ffd7a83a9..21c6c530e 100644 --- a/src/android/support/design/widget/TextInputLayout.java +++ b/src/android/support/design/widget/TextInputLayout.java @@ -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)); } diff --git a/src/android/support/design/widget/ThemeUtils.java b/src/android/support/design/widget/ThemeUtils.java index 327a44d7d..ffdc3f4b1 100644 --- a/src/android/support/design/widget/ThemeUtils.java +++ b/src/android/support/design/widget/ThemeUtils.java @@ -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);