#!/usr/bin/env python3 # # Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import argparse import os import subprocess import sys ANDROID_SRC_ROOT = 'flutter/shell/platform/android' SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) def JavadocBin(): if sys.platform == 'darwin': return os.path.join( SCRIPT_DIR, '..', '..', 'third_party', 'java', 'openjdk', 'Contents', 'Home', 'bin', 'javadoc' ) elif sys.platform.startswith(('cygwin', 'win')): return os.path.join( SCRIPT_DIR, '..', '..', 'third_party', 'java', 'openjdk', 'bin', 'javadoc.exe' ) else: return os.path.join(SCRIPT_DIR, '..', '..', 'third_party', 'java', 'openjdk', 'bin', 'javadoc') def main(): parser = argparse.ArgumentParser(description='Runs javadoc on Flutter Android libraries') parser.add_argument('--out-dir', type=str, required=True) parser.add_argument('--android-source-root', type=str, default=ANDROID_SRC_ROOT) parser.add_argument('--build-config-path', type=str) parser.add_argument('--src-dir', type=str, default='.') parser.add_argument('--quiet', default=False, action='store_true') args = parser.parse_args() if not os.path.exists(args.android_source_root): print( 'This script must be run at the root of the Flutter source tree, or ' 'the --android-source-root must be set.' ) return 1 if not os.path.exists(args.out_dir): os.makedirs(args.out_dir) android_jar_path = os.path.join( args.src_dir, 'flutter', 'third_party', 'android_tools', 'sdk', 'platforms', 'android-35', 'android.jar' ) if not os.path.exists(android_jar_path): print('Android SDK not found at %s' % android_jar_path) return 1 classpath = [ args.android_source_root, android_jar_path, os.path.join( args.src_dir, 'flutter', 'third_party', 'android_embedding_dependencies', 'lib', '*' ), ] if args.build_config_path: classpath.append(args.build_config_path) packages = [ 'io.flutter.app', 'io.flutter.embedding.android', 'io.flutter.embedding.engine', 'io.flutter.embedding.engine.dart', 'io.flutter.embedding.engine.loader', 'io.flutter.embedding.engine.mutatorsstack', 'io.flutter.embedding.engine.plugins', 'io.flutter.embedding.engine.plugins.activity', 'io.flutter.embedding.engine.plugins.broadcastreceiver', 'io.flutter.embedding.engine.plugins.contentprovider', 'io.flutter.embedding.engine.plugins.lifecycle', 'io.flutter.embedding.engine.plugins.service', 'io.flutter.embedding.engine.plugins.shim', 'io.flutter.embedding.engine.renderer', 'io.flutter.embedding.engine.systemchannels', 'io.flutter.plugin.common', 'io.flutter.plugin.editing', 'io.flutter.plugin.platform', 'io.flutter.util', 'io.flutter.view', ] android_package_list = os.path.join(SCRIPT_DIR, 'android_reference') command = [ JavadocBin(), '-classpath', ':'.join(classpath), '-d', args.out_dir, '-linkoffline', 'https://developer.android.com/reference/', android_package_list, '-source', '1.8', ] + packages if not args.quiet: print(' '.join(command)) try: output = subprocess.check_output(command, stderr=subprocess.STDOUT) if not args.quiet: print(output) except subprocess.CalledProcessError as e: print(e.output.decode('utf-8')) return e.returncode return 0 if __name__ == '__main__': sys.exit(main())