Add parameters to specify custom native build path and enable unity build in Android gradle builds (#1494)
* Add parameters to specify custom native build path and enable unity build in Android gradle builds * Enable unity build for gradle to shorten the path to the generated object files which fixes build failures on Jenkins due to paths exceeding limit. This also speeds up builds.
This commit is contained in:
@@ -331,7 +331,7 @@ android_gradle_plugin={android_gradle_plugin_version}
|
||||
NATIVE_CMAKE_SECTION_ANDROID_FORMAT = """
|
||||
externalNativeBuild {{
|
||||
cmake {{
|
||||
buildStagingDirectory "."
|
||||
buildStagingDirectory "{native_build_path}"
|
||||
version "{cmake_version}"
|
||||
path "{absolute_cmakelist_path}"
|
||||
}}
|
||||
@@ -447,8 +447,8 @@ class AndroidProjectGenerator(object):
|
||||
|
||||
def __init__(self, engine_root, build_dir, android_sdk_path, build_tool, android_sdk_platform, android_native_api_level, android_ndk,
|
||||
project_path, third_party_path, cmake_version, override_cmake_path, override_gradle_path, gradle_version, gradle_plugin_version,
|
||||
override_ninja_path, include_assets_in_apk, asset_mode, asset_type, signing_config, is_test_project=False,
|
||||
overwrite_existing=True):
|
||||
override_ninja_path, include_assets_in_apk, asset_mode, asset_type, signing_config, native_build_path, is_test_project=False,
|
||||
overwrite_existing=True, unity_build_enabled=False):
|
||||
"""
|
||||
Initialize the object with all the required parameters needed to create an Android Project. The parameters should be verified before initializing this object
|
||||
|
||||
@@ -509,6 +509,8 @@ class AndroidProjectGenerator(object):
|
||||
|
||||
self.include_assets_in_apk = include_assets_in_apk
|
||||
|
||||
self.native_build_path = native_build_path
|
||||
|
||||
self.asset_mode = asset_mode
|
||||
|
||||
self.asset_type = asset_type
|
||||
@@ -519,6 +521,8 @@ class AndroidProjectGenerator(object):
|
||||
|
||||
self.overwrite_existing = overwrite_existing
|
||||
|
||||
self.unity_build_enabled = unity_build_enabled
|
||||
|
||||
def execute(self):
|
||||
"""
|
||||
Execute the android project creation workflow
|
||||
@@ -756,6 +760,9 @@ class AndroidProjectGenerator(object):
|
||||
template_engine_root = common.normalize_path_for_settings(self.engine_root)
|
||||
template_third_party_path = common.normalize_path_for_settings(self.third_party_path)
|
||||
template_ndk_path = common.normalize_path_for_settings(os.path.join(self.android_sdk_path, self.android_ndk.location))
|
||||
template_unity_build = 1 if self.unity_build_enabled else 0
|
||||
|
||||
native_build_path = pathlib.Path(self.native_build_path).resolve().as_posix() if self.native_build_path else '.'
|
||||
|
||||
gradle_build_env = dict()
|
||||
|
||||
@@ -766,7 +773,7 @@ class AndroidProjectGenerator(object):
|
||||
|
||||
gradle_build_env['TARGET_TYPE'] = 'application'
|
||||
gradle_build_env['PROJECT_DEPENDENCIES'] = PROJECT_DEPENDENCIES_VALUE_FORMAT.format(dependencies='\n'.join(gradle_project_dependencies))
|
||||
gradle_build_env['NATIVE_CMAKE_SECTION_ANDROID'] = NATIVE_CMAKE_SECTION_ANDROID_FORMAT.format(cmake_version=str(self.cmake_version), absolute_cmakelist_path=absolute_cmakelist_path)
|
||||
gradle_build_env['NATIVE_CMAKE_SECTION_ANDROID'] = NATIVE_CMAKE_SECTION_ANDROID_FORMAT.format(cmake_version=str(self.cmake_version), native_build_path=native_build_path, absolute_cmakelist_path=absolute_cmakelist_path)
|
||||
gradle_build_env['NATIVE_CMAKE_SECTION_DEFAULT_CONFIG'] = NATIVE_CMAKE_SECTION_DEFAULT_CONFIG_NDK_FORMAT_STR.format(abi=ANDROID_ARCH)
|
||||
|
||||
gradle_build_env['OVERRIDE_JAVA_SOURCESET'] = OVERRIDE_JAVA_SOURCESET_STR.format(absolute_azandroid_path=absolute_azandroid_path)
|
||||
@@ -784,7 +791,8 @@ class AndroidProjectGenerator(object):
|
||||
f'"-S{template_engine_root}"',
|
||||
f'"-DCMAKE_BUILD_TYPE={native_config_lower}"',
|
||||
f'"-DCMAKE_TOOLCHAIN_FILE={template_engine_root}/cmake/Platform/Android/Toolchain_Android.cmake"',
|
||||
f'"-DLY_3RDPARTY_PATH={template_third_party_path}"']
|
||||
f'"-DLY_3RDPARTY_PATH={template_third_party_path}"',
|
||||
f'"-DLY_UNITY_BUILD={template_unity_build}"']
|
||||
|
||||
if not self.is_test_project:
|
||||
cmake_argument_list.append(f'"-DLY_PROJECTS={pathlib.PurePath(self.project_path).as_posix()}"')
|
||||
|
||||
@@ -215,6 +215,11 @@ def main(args):
|
||||
default=None,
|
||||
required=False)
|
||||
|
||||
parser.add_argument('--native-build-path',
|
||||
help='Custom path to place native build artifacts.',
|
||||
default=None,
|
||||
required=False)
|
||||
|
||||
# Asset Options
|
||||
parser.add_argument(INCLUDE_APK_ASSETS_ARGUMENT_NAME,
|
||||
action='store_true',
|
||||
@@ -258,6 +263,10 @@ def main(args):
|
||||
action='store_true',
|
||||
help='Option to overwrite existing scripts in the target build folder if they exist already.')
|
||||
|
||||
parser.add_argument('--enable-unity-build',
|
||||
action='store_true',
|
||||
help='Enable unity build')
|
||||
|
||||
parsed_args = parser.parse_args(args)
|
||||
wrap_parsed_args(parsed_args)
|
||||
|
||||
@@ -395,7 +404,9 @@ def main(args):
|
||||
asset_type=parsed_args.get_argument(ASSET_TYPE_ARGUMENT_NAME),
|
||||
signing_config=signing_config,
|
||||
is_test_project=is_test_project,
|
||||
overwrite_existing=parsed_args.overwrite_existing)
|
||||
overwrite_existing=parsed_args.overwrite_existing,
|
||||
unity_build_enabled=parsed_args.enable_unity_build,
|
||||
native_build_path=parsed_args.native_build_path)
|
||||
generator.execute()
|
||||
|
||||
|
||||
|
||||
@@ -135,11 +135,11 @@ IF "%GENERATE_SIGNED_APK%"=="true" (
|
||||
ECHO Using keystore file at %CI_ANDROID_KEYSTORE_FILE_ABS%
|
||||
)
|
||||
|
||||
ECHO [ci_build] %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% --gradle-install-path=%GRADLE_BUILD_HOME% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% --android-sdk-path=%ANDROID_HOME% %ANDROID_GRADLE_PLUGIN_OPTION% --signconfig-store-file %CI_ANDROID_KEYSTORE_FILE_ABS% --signconfig-store-password %CI_ANDROID_KEYSTORE_PASSWORD% --signconfig-key-alias %CI_ANDROID_KEYSTORE_ALIAS% --signconfig-key-password %CI_ANDROID_KEYSTORE_PASSWORD% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
CALL %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% --gradle-install-path=%GRADLE_BUILD_HOME% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% --android-sdk-path=%ANDROID_HOME% %ANDROID_GRADLE_PLUGIN_OPTION% --signconfig-store-file %CI_ANDROID_KEYSTORE_FILE_ABS% --signconfig-store-password %CI_ANDROID_KEYSTORE_PASSWORD% --signconfig-key-alias %CI_ANDROID_KEYSTORE_ALIAS% --signconfig-key-password %CI_ANDROID_KEYSTORE_PASSWORD% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
ECHO [ci_build] %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% --gradle-install-path=%GRADLE_BUILD_HOME% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% --enable-unity-build --android-sdk-path=%ANDROID_HOME% %ANDROID_GRADLE_PLUGIN_OPTION% --signconfig-store-file %CI_ANDROID_KEYSTORE_FILE_ABS% --signconfig-store-password %CI_ANDROID_KEYSTORE_PASSWORD% --signconfig-key-alias %CI_ANDROID_KEYSTORE_ALIAS% --signconfig-key-password %CI_ANDROID_KEYSTORE_PASSWORD% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
CALL %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% --gradle-install-path=%GRADLE_BUILD_HOME% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% --enable-unity-build --android-sdk-path=%ANDROID_HOME% %ANDROID_GRADLE_PLUGIN_OPTION% --signconfig-store-file %CI_ANDROID_KEYSTORE_FILE_ABS% --signconfig-store-password %CI_ANDROID_KEYSTORE_PASSWORD% --signconfig-key-alias %CI_ANDROID_KEYSTORE_ALIAS% --signconfig-key-password %CI_ANDROID_KEYSTORE_PASSWORD% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
) ELSE (
|
||||
ECHO [ci_build] %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% %GRADLE_OVERRIDE_OPTION% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% %ANDROID_GRADLE_PLUGIN_OPTION% --android-sdk-path=%ANDROID_HOME% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
CALL %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% --gradle-install-path=%GRADLE_BUILD_HOME% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% %ANDROID_GRADLE_PLUGIN_OPTION% --android-sdk-path=%ANDROID_HOME% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
ECHO [ci_build] %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% %GRADLE_OVERRIDE_OPTION% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% --enable-unity-build %ANDROID_GRADLE_PLUGIN_OPTION% --android-sdk-path=%ANDROID_HOME% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
CALL %PYTHON% cmake\Tools\Platform\Android\generate_android_project.py --engine-root=. --build-dir=%OUTPUT_DIRECTORY% -g %GAME_PROJECT% --gradle-install-path=%GRADLE_BUILD_HOME% --ninja-install-path=%LY_NINJA_PATH% --third-party-path=%LY_3RDPARTY_PATH% --enable-unity-build %ANDROID_GRADLE_PLUGIN_OPTION% --android-sdk-path=%ANDROID_HOME% %ADDITIONAL_GENERATE_ARGS% --overwrite-existing
|
||||
)
|
||||
|
||||
REM Validate the android project generation
|
||||
|
||||
Reference in New Issue
Block a user