Bug 1306021 - Remove unneeded R.java copies to reduce field wastage r?nalexander
MozReview-Commit-ID: GHYCqzaMaGe
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -397,31 +397,35 @@ all_resources = \
# All of generated/org/mozilla/gecko/R.java, gecko.ap_, and R.txt are
# produced by aapt; this saves aapt invocations. The trailing
# semi-colon defines an empty recipe; defining no recipe at all causes
# Make to treat the target differently, in a way that defeats our
# dependencies.
generated/org/mozilla/gecko/R.java: .aapt.deps ;
+# Only add libraries that contain resources here. We (unecessarily) generate an identical R.java which
+# is copied into each of these locations, and each of these files contains thousands of fields.
+# Each unnecessary copy therefore wastes unnecessary fields in the output dex file.
+# Note: usually proguard will help clean this up after the fact, but having too many fields will cause
+# dexing to fail, regardless of any later optimisations proguard could later make to bring us back
+# under the limit.
+# Ideally we would fix our aapt invocations to correctly generate minimal copies of R.java for each
+# package, but that seems redundant since gradle builds are able to correctly generate these files.
+
# If native devices are enabled, add Google Play Services, build their resources
-generated/android/support/v4/R.java: .aapt.deps ;
generated/android/support/v7/appcompat/R.java: .aapt.deps ;
generated/android/support/v7/cardview/R.java: .aapt.deps ;
generated/android/support/design/R.java: .aapt.deps ;
generated/android/support/v7/mediarouter/R.java: .aapt.deps ;
generated/android/support/v7/recyclerview/R.java: .aapt.deps ;
-generated/android/support/customtabs/R.java: .aapt.deps ;
-generated/android/support/v7/palette/R.java: .aapt.deps ;
generated/com/google/android/gms/R.java: .aapt.deps ;
generated/com/google/android/gms/ads/R.java: .aapt.deps ;
generated/com/google/android/gms/base/R.java: .aapt.deps ;
generated/com/google/android/gms/cast/R.java: .aapt.deps ;
-generated/com/google/android/gms/gcm/R.java: .aapt.deps ;
-generated/com/google/android/gms/measurement/R.java: .aapt.deps ;
gecko.ap_: .aapt.deps ;
R.txt: .aapt.deps ;
# [Comment 2/3] This tom-foolery provides a target that forces a
# rebuild of gecko.ap_. This is used during packaging to ensure that
# resources are fresh. The alternative would be complicated; see
# [Comment 1/3].
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -57,17 +57,16 @@ resjar = add_java_jar('gecko-R')
resjar.sources = []
resjar.generated_sources += [
'org/mozilla/gecko/R.java',
]
if CONFIG['ANDROID_SUPPORT_V4_AAR']:
ANDROID_EXTRA_PACKAGES += ['android.support.v4']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_SUPPORT_V4_AAR_RES']]
- resjar.generated_sources += ['android/support/v4/R.java']
if CONFIG['ANDROID_APPCOMPAT_V7_AAR']:
ANDROID_EXTRA_PACKAGES += ['android.support.v7.appcompat']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_APPCOMPAT_V7_AAR_RES']]
resjar.generated_sources += ['android/support/v7/appcompat/R.java']
if CONFIG['ANDROID_CARDVIEW_V7_AAR']:
ANDROID_EXTRA_PACKAGES += ['android.support.v7.cardview']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_CARDVIEW_V7_AAR_RES']]
resjar.generated_sources += ['android/support/v7/cardview/R.java']
@@ -77,21 +76,19 @@ if CONFIG['ANDROID_DESIGN_AAR']:
resjar.generated_sources += ['android/support/design/R.java']
if CONFIG['ANDROID_RECYCLERVIEW_V7_AAR']:
ANDROID_EXTRA_PACKAGES += ['android.support.v7.recyclerview']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_RECYCLERVIEW_V7_AAR_RES']]
resjar.generated_sources += ['android/support/v7/recyclerview/R.java']
if CONFIG['ANDROID_CUSTOMTABS_AAR']:
ANDROID_EXTRA_PACKAGES += ['android.support.customtabs']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_CUSTOMTABS_AAR_RES']]
- resjar.generated_sources += ['android/support/customtabs/R.java']
if CONFIG['ANDROID_PALETTE_V7_AAR']:
ANDROID_EXTRA_PACKAGES += ['android.support.v7.palette']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PALETTE_V7_AAR_RES']]
- resjar.generated_sources += ['android/support/v7/palette/R.java']
resjar.javac_flags += ['-Xlint:all']
mgjar = add_java_jar('gecko-mozglue')
mgjar.sources += [geckoview_source_dir + 'java/org/mozilla/gecko/' + x for x in [
'mozglue/ByteBufferInputStream.java',
'mozglue/DirectBufferAllocator.java',
@@ -876,22 +873,20 @@ if CONFIG['MOZ_ANDROID_GCM']:
if CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR']:
ANDROID_EXTRA_PACKAGES += ['com.google.android.gms']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_RES']]
resjar.generated_sources += ['com/google/android/gms/R.java']
if CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR']:
ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.gcm']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_GCM_AAR_RES']]
- resjar.generated_sources += ['com/google/android/gms/gcm/R.java']
if CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR']:
ANDROID_EXTRA_PACKAGES += ['com.google.android.gms.measurement']
ANDROID_EXTRA_RES_DIRS += ['%' + CONFIG['ANDROID_PLAY_SERVICES_MEASUREMENT_AAR_RES']]
- resjar.generated_sources += ['com/google/android/gms/measurement/R.java']
if CONFIG['MOZ_INSTALL_TRACKING']:
gbjar.extra_jars += [
CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR_LIB'],
CONFIG['ANDROID_PLAY_SERVICES_BASEMENT_AAR_LIB'],
]
if CONFIG['ANDROID_PLAY_SERVICES_ADS_AAR']: