diff --git a/packages/flutter/lib/sky_tool b/packages/flutter/lib/sky_tool index cbf267f644..de56fd1986 100755 --- a/packages/flutter/lib/sky_tool +++ b/packages/flutter/lib/sky_tool @@ -175,7 +175,9 @@ class StartSky(object): project_or_path = os.path.abspath(args.project_or_path) - if args.android_build_available: + if args.android_build_available and args.use_release: + apk_path = os.path.join(os.path.normpath(args.sky_src_path), args.android_release_build_path, 'apks', APK_NAME) + elif args.android_build_available: apk_path = os.path.join(os.path.normpath(args.sky_src_path), args.android_debug_build_path, 'apks', APK_NAME) else: apk_path = os.path.join(APK_DIR, APK_NAME) @@ -228,12 +230,18 @@ class StartSky(object): # Install on connected iOS device if IOSDevice.is_connected() and args.ios_build_available: - app_path = os.path.join(args.sky_src_path, args.ios_debug_build_path, IOS_APP_NAME) + if args.use_release: + app_path = os.path.join(args.sky_src_path, args.ios_release_build_path, IOS_APP_NAME) + else: + app_path = os.path.join(args.sky_src_path, args.ios_debug_build_path, IOS_APP_NAME) IOSDevice.install_app(app_path) # Install on iOS simulator if it's running if IOSSimulator.is_booted() and args.ios_sim_build_available: - app_path = os.path.join(args.sky_src_path, args.ios_sim_debug_build_path, IOS_APP_NAME) + if args.use_release: + app_path = os.path.join(args.sky_src_path, args.ios_sim_release_build_path, IOS_APP_NAME) + else: + app_path = os.path.join(args.sky_src_path, args.ios_sim_debug_build_path, IOS_APP_NAME) IOSSimulator.fork_install_app(app_path) # Set up port forwarding for observatory @@ -618,6 +626,11 @@ class StartListening(object): return True def run(self, args, pids): + if args.use_release: + logging.info('Note that the listen command is not compatible with the ' + 'release flag for iOS and iOS simulator builds. If you have ' + 'installed iOS release builds, your Sky app will fail to ' + 'reload while using listen.') tempdir = tempfile.mkdtemp() currdir = os.getcwd() while True: @@ -819,6 +832,12 @@ class SkyShellRunner(object): sys.exit(2) parser = argparse.ArgumentParser(description='Sky App Runner') + parser.add_argument('--release', dest='use_release', action='store_true', + help='Set this if you are building Sky locally and want to use the release build products. ' + 'When set, attempts to automaticaly determine sky-src-path if sky-src-path is ' + 'not set. Using this flag automatically turns on local-build as well, so you do not ' + 'need to specify both. Note that --release is not compatible with the listen command ' + 'on iOS devices and simulators. Not normally required.') parser.add_argument('--local-build', dest='local_build', action='store_true', help='Set this if you are building Sky locally and want to use those build products. ' 'When set, attempts to automaticaly determine sky-src-path if sky-src-path is ' @@ -830,14 +849,26 @@ class SkyShellRunner(object): help='Path to your Android Debug out directory, if you are building Sky locally. ' 'This path is relative to sky-src-path. Not normally required.', default='out/android_Debug/') + parser.add_argument('--android-release-build-path', dest='android_release_build_path', + help='Path to your Android Release out directory, if you are building Sky locally. ' + 'This path is relative to sky-src-path. Not normally required.', + default='out/android_Release/') parser.add_argument('--ios-debug-build-path', dest='ios_debug_build_path', help='Path to your iOS Debug out directory, if you are building Sky locally. ' 'This path is relative to sky-src-path. Not normally required.', default='out/ios_Debug/') + parser.add_argument('--ios-release-build-path', dest='ios_release_build_path', + help='Path to your iOS Release out directory, if you are building Sky locally. ' + 'This path is relative to sky-src-path. Not normally required.', + default='out/ios_Release/') parser.add_argument('--ios-sim-debug-build-path', dest='ios_sim_debug_build_path', help='Path to your iOS Simulator Debug out directory, if you are building Sky locally. ' 'This path is relative to sky-src-path. Not normally required.', default='out/ios_sim_Debug/') + parser.add_argument('--ios-sim-release-build-path', dest='ios_sim_release_build_path', + help='Path to your iOS Simulator Release out directory, if you are building Sky locally. ' + 'This path is relative to sky-src-path. Not normally required.', + default='out/ios_sim_Release/') subparsers = parser.add_subparsers(help='sub-command help') @@ -845,6 +876,9 @@ class SkyShellRunner(object): command.add_subparser(subparsers) args = parser.parse_args() + if args.use_release: + args.local_build = True + # TODO(iansf): args is unfortunately just a global context variable. For now, add some additional context to it. args.android_build_available = False args.ios_build_available = False @@ -880,7 +914,14 @@ class SkyShellRunner(object): logging.warning('The selected sky-src-path (' + args.sky_src_path + ') does not exist.' 'Disabling local-build flag.') args.local_build = False - if args.local_build: + if args.local_build and args.use_release: + if os.path.isdir(os.path.join(args.sky_src_path, args.android_release_build_path)): + args.android_build_available = True + if os.path.isdir(os.path.join(args.sky_src_path, args.ios_release_build_path)): + args.ios_build_available = True + if os.path.isdir(os.path.join(args.sky_src_path, args.ios_sim_release_build_path)): + args.ios_sim_build_available = True + elif args.local_build: if os.path.isdir(os.path.join(args.sky_src_path, args.android_debug_build_path)): args.android_build_available = True if os.path.isdir(os.path.join(args.sky_src_path, args.ios_debug_build_path)):