You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
5.8 KiB
Python
130 lines
5.8 KiB
Python
#
|
|
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
# its licensors.
|
|
#
|
|
# For complete copyright and license terms please see the LICENSE at the root of this
|
|
# distribution (the "License"). All use of this software is governed by the License,
|
|
# or, if provided, by the license below or the license accompanying this file. Do not
|
|
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
#
|
|
|
|
import argparse
|
|
import logging
|
|
import os
|
|
import pathlib
|
|
import sys
|
|
|
|
# Resolve the common python module
|
|
ROOT_DEV_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..'))
|
|
if ROOT_DEV_PATH not in sys.path:
|
|
sys.path.append(ROOT_DEV_PATH)
|
|
|
|
from cmake.Tools import common
|
|
from cmake.Tools.Platform.Android import android_deployment
|
|
|
|
DEPLOY_TYPES = (android_deployment.AndroidDeployment.DEPLOY_APK_ONLY,
|
|
android_deployment.AndroidDeployment.DEPLOY_ASSETS_ONLY,
|
|
android_deployment.AndroidDeployment.DEPLOY_BOTH)
|
|
|
|
|
|
def validate_android_deployment_arguments(build_dir_name):
|
|
"""
|
|
Validate the minimal platform deployment arguments
|
|
|
|
@param build_dir_name: The name of the build directory relative to the current working directory
|
|
@param game_name: The name of the game project to deploy
|
|
@return: Tuple of (resolved pathlib, game name, asset mode, asset_type, platform_settings object, Android SDK path, embedded_assets (bool) )
|
|
"""
|
|
|
|
build_dir = pathlib.Path(os.getcwd()) / build_dir_name
|
|
if not build_dir.is_dir():
|
|
raise common.LmbrCmdError(f"Invalid build directory {build_dir_name}")
|
|
|
|
platform_settings = common.PlatformSettings(build_dir)
|
|
|
|
if not platform_settings.projects:
|
|
raise common.LmbrCmdError("Missing required platform settings object from build directory.")
|
|
game_name = platform_settings.projects[0]
|
|
|
|
android_sdk_path = getattr(platform_settings, 'android_sdk_path', None)
|
|
if not android_sdk_path:
|
|
raise common.LmbrCmdError(f"Android SDK Path {android_sdk_path} is missing in the platform settings for {build_dir_name}.")
|
|
if not os.path.isdir(android_sdk_path):
|
|
raise common.LmbrCmdError(f"Android SDK Path {android_sdk_path} in the platform settings for {build_dir_name} is not valid.")
|
|
|
|
embedded_assets_str = getattr(platform_settings, 'embed_assets_in_apk', None)
|
|
if not embedded_assets_str:
|
|
raise common.LmbrCmdError(f"The emdedded assets flag 'embed_assets_in_apk' is missing in the platform settings for {build_dir_name}.")
|
|
|
|
embedded_assets = embedded_assets_str.lower() in ('t', 'true', '1')
|
|
|
|
is_unit_test_str = getattr(platform_settings, 'is_unit_test', 'False')
|
|
is_unit_test = is_unit_test_str.lower() in ('t', 'true', '1')
|
|
|
|
return build_dir, game_name, platform_settings.asset_deploy_mode, platform_settings.asset_deploy_type, android_sdk_path, embedded_assets, is_unit_test
|
|
|
|
|
|
def main(args):
|
|
parser = argparse.ArgumentParser()
|
|
|
|
parser.add_argument('-b', '--build-dir',
|
|
help='The relative build directory to deploy from.',
|
|
required=True)
|
|
|
|
parser.add_argument('-c', '--configuration',
|
|
help='The build configuration from the build directory for the source deployment files',
|
|
default='profile')
|
|
|
|
parser.add_argument('--device-id-filter',
|
|
help='Comma separated list of connected android device IDs to filter the deployment to. If not supplied, no filter will be applied and deployment will occur on all devices.',
|
|
default='')
|
|
|
|
parser.add_argument('-t', '--deployment-type',
|
|
help=f'The deployment type ({"|".join(DEPLOY_TYPES)}) to execute.',
|
|
choices=DEPLOY_TYPES,
|
|
default=android_deployment.AndroidDeployment.DEPLOY_BOTH)
|
|
|
|
parser.add_argument('--clean',
|
|
help='Option to clean the target dev kit before deploying, ensuring a clean installation.',
|
|
action='store_true')
|
|
|
|
parser.add_argument('--debug',
|
|
help='Option to enable debug messages',
|
|
action='store_true')
|
|
|
|
parsed_args = parser.parse_args(args)
|
|
|
|
# Prepare the logging
|
|
logging.basicConfig(format='%(levelname)s: %(message)s',
|
|
level=logging.DEBUG if parsed_args.debug else logging.INFO)
|
|
|
|
build_dir, game_project, asset_mode, asset_type, android_sdk_path, embedded_assets, is_unit_test = validate_android_deployment_arguments(build_dir_name=parsed_args.build_dir)
|
|
|
|
deployment = android_deployment.AndroidDeployment(dev_root=ROOT_DEV_PATH,
|
|
build_dir=build_dir,
|
|
configuration=parsed_args.configuration,
|
|
game_name=game_project,
|
|
asset_mode=asset_mode,
|
|
asset_type=asset_type,
|
|
embedded_assets=embedded_assets,
|
|
android_device_filter=parsed_args.device_id_filter,
|
|
clean_deploy=parsed_args.clean,
|
|
android_sdk_path=android_sdk_path,
|
|
deployment_type=parsed_args.deployment_type,
|
|
is_unit_test=is_unit_test)
|
|
|
|
deployment.execute()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
try:
|
|
main(sys.argv[1:])
|
|
exit(0)
|
|
|
|
except common.LmbrCmdError as err:
|
|
print(str(err), file=sys.stderr)
|
|
exit(err.code)
|
|
|