Best Practice - o3de/wikicollection GitHub Wiki
Download URL:https://github.com/ninja-build/ninja/releases :1.10.1
Path Config:
create dir "ninja/1.10.1/Windows"
set path=%LY_3RDPARTY_PATH%/ninja/1.10.1/Windows;%path%
Note: Do not contain space within path, since it can't be parsed by the scripts: .\scripts\build\Platform\Android\gradle_windows.cmd
NDK Version:21.4.7075529 (can be downloaded through Android studio SDKmanager)
- To be Added
NDK:21.4.7075529
Android SDK:30.0.2
CMake:3.21.0-rc2
O3DE Version:fantasy_main_release_2107
set GE_ROOT=D:/01_code/
set GE_CODE_ROOT=%GE_ROOT%/GameEngine
set GE_BUILD_ROOT=%GE_CODE_ROOT%/build_main
set LY_PACKAGE_DOWNLOAD_CACHE_LOCATION=%GE_ROOT%/3rdParty
set LY_3RDPARTY_PATH=%LY_PACKAGE_DOWNLOAD_CACHE_LOCATION%
call .\scripts\o3de.bat register --this-engine
set LY_PACKAGE_SERVER_URLS=https://d2c171ws20a1rv.cloudfront.net
set CL=/source-charset:utf-8
set LY_PACKAGE_SERVER_URLS=http://cmc-szver-artifactory.cmc.tools.huawei.com/artifactory/ccs/cloud-game/3rdParty/
cmake -B %GE_BUILD_ROOT% -S %GE_CODE_ROOT% -G "Visual Studio 16 2019" -DLY_3RDPARTY_PATH=%LY_3RDPARTY_PATH% -DLY_UNITY_BUILD=ON -DLY_PROJECTS=AutomatedTesting;AtomSampleViewerGems Config: Comment gems in "engine.json", if you do not need them, such as:
-
Gems/Multiplayer
-
Gems/CertificateManager
-
Gems/AWSClientAuth (if your mobile phone can't access the AWS server)
-
... and so on
Build config: Change the Test project cmake flags to accelerate building process
- ly_set(PAL_TRAIT_BUILD_TESTS_SUPPORTED TRUE) -> FALSE (cmake\Platform\Android\PAL_android.cmake)
Asset bundle config:
- project name : engine.json ("projects": "AtomSampleViewer")
- bundle flag: AtomSampleViewer\project.json ("place_assets_in_apk": 0 -> 1)
- Asset mode:
- debug : --asset-mode -> LOOSE
- release: --asset-mode -> PAK
-
Build AssetProcessor
-
Asset build configuration:
-
GameEngine\Registry\AssetProcessorPlatformConfig.setreg
"Platforms": {
"android": "enabled"
}
-
-
asset build
Load the project in O3DE project manager, the asset will be processed by AssetProcessor automatically
-
environment config
set GAME_PROJECT=D:\01_code\GameEngine\AtomSampleViewer
set OUTPUT_DIRECTORY=D:\01_code\GameEngine\build_android
-
cd D:\01_code\GameEngine & scripts\build\Platform\Android\gradle_windows.cmd
-
check the output
verify the project config file:build_android\platform.settings (embed_assets_in_apk = False -> True)
-
configuration
To shrink the apk package size: D:\01_code\GameEngine\build_signpal\app\src\main\AndroidManifest.xml
<application> android:extractNativeLibs="true" <\application> -
Gradle sync
-
Set the target version
Project update recommended -> build Variants: release or debug
Note:
-
Release Pak: You should process asset_bundle.bat script (see attachment) to generate the pak files in following dir
D:\01_code\GameEngine\SignPal\Pak\SignPal_android_paks
-
Debug Pak:
- verify the *.setreg file (GameEngine\SignPal\Cache\android\Registry\cmake_dependencies.signpal.signpal_gamelauncher.setreg) to make sure the lib files suffix is ***.so
- Remove dir GameEngine\SignPal\Pak\SignPal_android_paks
- adb install -r -t .\app-release.apk
-
Android Studio (AS) Project building error
Q1: :app:syncLYLayoutModeDebug, unable to open "project.json"
A1: solution: To use absolute path in gradle_windows.cmd
Q2: Could not find a version that satisfies the requirement certifi==2019.11.2
A2: To check your proxy configuration, maybe change or disable proxy will solve this problem
-
Release Asset bundle uncorrectly
Q1: Pak folder for the project at path '***' is missing
A1: To see the generate Apk section in Build & Compile & Package
-
Asset build error
Q1: Lost connections to asset builder
A1: To close the AP in the background
Q2: AssetProcessor broken down
A2: Low resource PC raise this problem, you can decrease the AP thread num. Maybe close other unrelated process is also helpful
To be added
To be added
::Step 1, param setting
::set ly_project=%1%
::set AssetBundlerBatchexe_path=%2%
::set PLATFORM=%3%
::set other_seed=%4%
set ly_project=SignPal
set engine_root=D:\01_code\GameEngine
set AssetBundlerBatchexe_path=%engine_root%\build_main\bin\profile
set PLATFORM=android
set assetdir=%engine_root%\%ly_project%\Cache\%PLATFORM%
set pakdir=%engine_root%\%ly_project%\Pak\%ly_project%_%PLATFORM%_paks
::Step 2, generate assets
echo %AssetBundlerBatchexe_path%\AssetBundlerBatch.exe assetLists ^^>>%ly_project%_asset_bundle.bat
echo --addDefaultSeedListFiles ^^>>%ly_project%_asset_bundle.bat
echo --addSeed SignPal_Dependencies.xml ^^>>%ly_project%_asset_bundle.bat
echo --addSeed Levels\signpal\level.pak ^^>>%ly_project%_asset_bundle.bat
echo --addSeed user.cfg ^^>>%ly_project%_asset_bundle.bat
echo --addSeed assetcatalog.xml ^^>>%ly_project%_asset_bundle.bat
echo --addSeed project.json --generateDebugFile --assetListFile %ly_project%_%PLATFORM%.assetlist --platform %PLATFORM% --allowOverwrites ^^>> %ly_project%_asset_bundle.bat
echo --regset="/Amazon/AzCore/Bootstrap/project_path=%ly_project%">> %ly_project%_asset_bundle.bat
echo "generate assetLists ..."
call %ly_project%_asset_bundle.bat
echo "generate assetLists success"
::step 3, bundle assets
%AssetBundlerBatchexe_path%\AssetBundlerBatch.exe bundles --assetListFile %ly_project%_%PLATFORM%.assetlist --outputBundlePath engine_%PLATFORM%.pak --regset="/Amazon/AzCore/Bootstrap/project_path=%ly_project%" --allowOverwrites --platform %PLATFORM%
echo "bundles assets success"
::Step 4, compress assets
rd /s /q %pakdir%
md %pakdir%
md %pakdir%\tmp
move %engine_root%\engine_%PLATFORM%.pak %pakdir%
copy %assetdir% %pakdir%\tmp
if exist %pakdir%\tmp\engine_%PLATFORM%.pak (
del %pakdir%\tmp\engine_%PLATFORM%.pak
)
:: compress %pakdir%\engine_%PLATFORM%.pak %pakdir%\tmp\*
::Step 5: move & copy asset files
copy %assetdir%\bootstrap.game.release.android.setreg %pakdir%
copy %assetdir%\*.json %pakdir%
echo d | xcopy %assetdir%\assets %pakdir%\assets /e
echo d | xcopy %assetdir%\config %pakdir%\config /e
echo d | xcopy %assetdir%\levels %pakdir%\levels /e
echo d | xcopy %assetdir%\passes %pakdir%\passes /e
echo d | xcopy %assetdir%\shaderlib %pakdir%\shaderlib /e
echo d | xcopy %assetdir%\shaders %pakdir%\shaders /e
::Step 6--- rename pak
del %engine_root%\%ly_project%_%PLATFORM%.assetlist
del %engine_root%\%ly_project%_asset_bundle.bat
del %engine_root%\%ly_project%_%PLATFORM%.assetlistdebug
rd /s /q %pakdir%\tmp
move %pakdir%\engine_%PLATFORM%.pak %pakdir%\engine.pak
- Project Structure -> Build Variants -> app -> Build Types -> Signing Config: $signingConfigs.debug
- build -> generate Signed Bundle or APK, then choose APK -> next
- click button Create new, fill in the password
- choose the target platform: Release of profile
-
Project configuration
Run/Debug Configurations -> app -> Debugger
Debug type : Dual (Java + Native)
Symbol Directories:GameEngine\build_***\app\build\intermediates\cmake\debug\obj
-
Array values check
LLDB tools to check JNI Array: parray $num $arrayname
-
Log info
IDE Log: view -> tool windows -> logcat: com.lumberyard.***
Log print: AZ_TracePrintf(window, ...)