mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 15:25:52 +00:00
Bug 1417232 - Part 2: Extract magic Gradle configuration from build into |mach android assemble-app|. r=ted.mielczarek
These magic locations evolve over time. Baking them into moz.configure is the easiest way to share them across the build system, and pushing them into a new |mach android *| command continues a pattern that has been very successful. MozReview-Commit-ID: CyxVQ0LHHgl --HG-- extra : rebase_source : 8350d71665f0126aa4ee2c8fec32c4b8e34dc772
This commit is contained in:
parent
b76185017f
commit
d1d1541e8d
@ -236,12 +236,7 @@ ifdef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
|
||||
define gradle_command
|
||||
$(1): $(2)
|
||||
@$$(TOUCH) $$@
|
||||
$$(topsrcdir)/mach gradle \
|
||||
geckoview:generateJNIWrappersForGeneratedRelease \
|
||||
app:generateJNIWrappersForFennecOfficialPhotonDebug \
|
||||
app:assembleOfficialPhotonDebug \
|
||||
app:assembleOfficialPhotonDebugAndroidTest \
|
||||
-x lint
|
||||
$$(topsrcdir)/mach android assemble-app
|
||||
endef
|
||||
|
||||
# .gradle.deps: .aapt.deps FORCE
|
||||
@ -508,7 +503,7 @@ $(eval $(call gradle_command,.gradle.nodeps,AndroidManifest.xml $(constants_PP_J
|
||||
|
||||
.aapt.nodeps: .gradle.nodeps FORCE
|
||||
@$(TOUCH) $@
|
||||
cp $(gradle_dir)/app/outputs/apk/app-official-photon-debug.apk gecko-nodeps.ap_
|
||||
cp $(GRADLE_ANDROID_APP_APK) gecko-nodeps.ap_
|
||||
cp $(gradle_dir)/app/intermediates/transforms/dex/officialPhoton/debug/folders/1000/1f/main/classes.dex classes.dex
|
||||
else
|
||||
# .aapt.nodeps: AndroidManifest.xml FORCE
|
||||
|
@ -36,6 +36,75 @@ def gradle(value, build_env):
|
||||
set_config('GRADLE', gradle)
|
||||
|
||||
|
||||
@dependable
|
||||
@imports(_from='itertools', _import='chain')
|
||||
def gradle_android_build_config():
|
||||
def capitalize(s):
|
||||
# str.capitalize lower cases trailing letters.
|
||||
if s:
|
||||
return s[0].upper() + s[1:]
|
||||
else:
|
||||
return s
|
||||
|
||||
# It's not really possible to abstract the GeckoView details just yet; post
|
||||
# Android-Gradle plugin 3.0+, the configurations can be more sensible and
|
||||
# we'll do this work.
|
||||
def variant(productFlavors, buildType):
|
||||
return namespace(
|
||||
productFlavors=productFlavors,
|
||||
buildType=buildType,
|
||||
# Like 'OfficialWithoutGeckoBinariesPhotonDebug'
|
||||
name = ''.join(capitalize(t) for t in chain(productFlavors, (buildType, )))
|
||||
)
|
||||
|
||||
return namespace(
|
||||
app=namespace(
|
||||
variant=variant(('official', 'photon'), 'debug'),
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@depends(gradle_android_build_config)
|
||||
def gradle_android_app_variant_name(build_config):
|
||||
'''Like "officialPhotonDebug".'''
|
||||
def uncapitalize(s):
|
||||
if s:
|
||||
return s[0].lower() + s[1:]
|
||||
else:
|
||||
return s
|
||||
|
||||
return uncapitalize(build_config.app.variant.name)
|
||||
|
||||
set_config('GRADLE_ANDROID_APP_VARIANT_NAME', gradle_android_app_variant_name)
|
||||
|
||||
|
||||
@depends(gradle_android_build_config)
|
||||
def gradle_android_app_tasks(build_config):
|
||||
'''Gradle tasks run by |mach android assemble-app|.'''
|
||||
return [
|
||||
'geckoview:generateJNIWrappersForGeneratedRelease',
|
||||
'app:generateJNIWrappersForFennec{app.variant.name}'.format(app=build_config.app),
|
||||
'app:assemble{app.variant.name}'.format(app=build_config.app),
|
||||
'app:assemble{app.variant.name}AndroidTest'.format(app=build_config.app),
|
||||
]
|
||||
|
||||
set_config('GRADLE_ANDROID_APP_TASKS', gradle_android_app_tasks)
|
||||
|
||||
|
||||
@depends(gradle_android_build_config, check_build_environment)
|
||||
def gradle_android_app_apks(build_config, build_env):
|
||||
'''Paths to APK files produced by |mach android assemble-app|.'''
|
||||
flavor = '-'.join(build_config.app.variant.productFlavors)
|
||||
buildType = build_config.app.variant.buildType
|
||||
f = '{}/gradle/build/mobile/android/app/outputs/apk/app-{}-{}.apk'
|
||||
g = '{}/gradle/build/mobile/android/app/outputs/apk/app-{}-{}-androidTest.apk'
|
||||
return namespace(app_apk=f.format(build_env.topobjdir, flavor, buildType),
|
||||
app_androidTest_apk=g.format(build_env.topobjdir, flavor, buildType))
|
||||
|
||||
set_config('GRADLE_ANDROID_APP_APK', gradle_android_app_apks.app_apk)
|
||||
set_config('GRADLE_ANDROID_APP_ANDROIDTEST_APK', gradle_android_app_apks.app_androidTest_apk)
|
||||
|
||||
|
||||
# Automation uses this to change log levels, not use the daemon, and use
|
||||
# offline mode.
|
||||
option(env='GRADLE_FLAGS', default='', help='Flags to pass to Gradle.')
|
||||
|
@ -54,6 +54,16 @@ class MachCommands(MachCommandBase):
|
||||
pass
|
||||
|
||||
|
||||
@SubCommand('android', 'assemble-app',
|
||||
"""Assemble Firefox for Android.
|
||||
See http://firefox-source-docs.mozilla.org/build/buildsystem/toolchains.html#firefox-for-android-with-gradle""")
|
||||
@CommandArgument('args', nargs=argparse.REMAINDER)
|
||||
def android_assemble_app(self, args):
|
||||
ret = self.gradle(self.substs['GRADLE_ANDROID_APP_TASKS'] + ['-x', 'lint', '--continue'] + args, verbose=True)
|
||||
|
||||
return ret
|
||||
|
||||
|
||||
@SubCommand('android', 'test',
|
||||
"""Run Android local unit tests.
|
||||
See https://developer.mozilla.org/en-US/docs/Mozilla/Android-specific_test_suites#android-test""")
|
||||
|
@ -25,7 +25,7 @@ include $(topsrcdir)/config/android-common.mk
|
||||
ifndef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
|
||||
robocop_apk := $(topobjdir)/mobile/android/tests/browser/robocop/robocop-debug-unsigned-unaligned.apk
|
||||
else
|
||||
robocop_apk := $(topobjdir)/gradle/build/mobile/android/app/outputs/apk/app-official-photon-debug-androidTest.apk
|
||||
robocop_apk := $(GRADLE_ANDROID_APP_ANDROIDTEST_APK)
|
||||
endif
|
||||
|
||||
stage-package-android:
|
||||
|
@ -1003,9 +1003,7 @@ class AndroidArguments(ArgumentContainer):
|
||||
|
||||
if not options.robocopApk and build_obj:
|
||||
if build_obj.substs.get('MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE'):
|
||||
options.robocopApk = os.path.join(build_obj.topobjdir, 'gradle', 'build',
|
||||
'mobile', 'android', 'app', 'outputs', 'apk',
|
||||
'app-official-photon-debug-androidTest.apk')
|
||||
options.robocopApk = build_obj.substs.get('GRADLE_ANDROID_APP_ANDROIDTEST_APK')
|
||||
else:
|
||||
options.robocopApk = os.path.join(build_obj.topobjdir, 'mobile', 'android',
|
||||
'tests', 'browser',
|
||||
|
@ -32,7 +32,7 @@ UPLOAD_EXTRA_FILES += robocop.apk
|
||||
ifndef MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE
|
||||
robocop_apk := $(topobjdir)/mobile/android/tests/browser/robocop/robocop-debug-unsigned-unaligned.apk
|
||||
else
|
||||
robocop_apk := $(topobjdir)/gradle/build/mobile/android/app/outputs/apk/app-official-photon-debug-androidTest.apk
|
||||
robocop_apk := $(GRADLE_ANDROID_APP_ANDROIDTEST_APK)
|
||||
endif
|
||||
|
||||
INNER_ROBOCOP_PACKAGE= \
|
||||
|
Loading…
Reference in New Issue
Block a user