291 lines
8.0 KiB
Batchfile
291 lines
8.0 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
echo ========================================
|
|
echo TSS Party Android APK Builder
|
|
echo ========================================
|
|
echo.
|
|
|
|
:: Check if gradlew exists
|
|
if not exist "gradlew.bat" (
|
|
echo [ERROR] gradlew.bat not found!
|
|
echo Please run this script from the service-party-android directory.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
:: Check and create local.properties if needed
|
|
if not exist "local.properties" (
|
|
echo [INFO] local.properties not found, attempting to detect Android SDK...
|
|
|
|
:: Try common SDK locations
|
|
set SDK_FOUND=0
|
|
|
|
:: Check ANDROID_HOME environment variable first
|
|
if defined ANDROID_HOME (
|
|
:: Remove any surrounding quotes from ANDROID_HOME
|
|
set "ANDROID_HOME_CLEAN=!ANDROID_HOME:"=!"
|
|
if exist "!ANDROID_HOME_CLEAN!\platform-tools" (
|
|
set "SDK_PATH_CLEAN=!ANDROID_HOME_CLEAN:\=/!"
|
|
echo sdk.dir=!SDK_PATH_CLEAN!> local.properties
|
|
echo [INFO] Created local.properties with ANDROID_HOME: !ANDROID_HOME_CLEAN!
|
|
set SDK_FOUND=1
|
|
)
|
|
)
|
|
|
|
:: Try common Windows locations
|
|
if !SDK_FOUND!==0 (
|
|
for %%P in (
|
|
"%LOCALAPPDATA%\Android\Sdk"
|
|
"%USERPROFILE%\AppData\Local\Android\Sdk"
|
|
"C:\Android\Sdk"
|
|
"C:\Android"
|
|
"C:\Users\%USERNAME%\Android\Sdk"
|
|
) do (
|
|
if exist "%%~P\platform-tools" (
|
|
set "SDK_PATH=%%~P"
|
|
set "SDK_PATH=!SDK_PATH:\=/!"
|
|
echo sdk.dir=!SDK_PATH!> local.properties
|
|
echo [INFO] Created local.properties with SDK path: %%~P
|
|
set SDK_FOUND=1
|
|
goto :sdk_found
|
|
)
|
|
)
|
|
)
|
|
|
|
:sdk_found
|
|
if !SDK_FOUND!==0 (
|
|
echo [ERROR] Android SDK not found!
|
|
echo.
|
|
echo Please do one of the following:
|
|
echo 1. Set ANDROID_HOME environment variable to your SDK path
|
|
echo 2. Create local.properties file with: sdk.dir=C:/path/to/android/sdk
|
|
echo 3. Install Android Studio which includes the SDK
|
|
echo.
|
|
echo Common SDK locations:
|
|
echo - %LOCALAPPDATA%\Android\Sdk
|
|
echo - C:\Android\Sdk
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
)
|
|
|
|
echo [INFO] Using SDK from local.properties
|
|
type local.properties
|
|
echo.
|
|
|
|
:: Check and build tsslib.aar if needed
|
|
if not exist "app\libs\tsslib.aar" (
|
|
echo [INFO] tsslib.aar not found, attempting to build TSS library...
|
|
echo.
|
|
|
|
:: Check if Go is installed
|
|
where go >nul 2>nul
|
|
if !errorlevel! neq 0 (
|
|
echo [ERROR] Go is not installed or not in PATH!
|
|
echo Please install Go from https://golang.org/dl/
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
:: Get GOPATH for bin directory
|
|
for /f "tokens=*" %%G in ('go env GOPATH') do set "GOPATH_DIR=%%G"
|
|
if not defined GOPATH_DIR set "GOPATH_DIR=%USERPROFILE%\go"
|
|
set "GOBIN_DIR=!GOPATH_DIR!\bin"
|
|
|
|
:: Add GOPATH/bin to PATH if not already there
|
|
echo !PATH! | findstr /i /c:"!GOBIN_DIR!" >nul 2>nul
|
|
if !errorlevel! neq 0 (
|
|
echo [INFO] Adding !GOBIN_DIR! to PATH...
|
|
set "PATH=!PATH!;!GOBIN_DIR!"
|
|
)
|
|
|
|
:: Show Go version
|
|
for /f "tokens=3" %%V in ('go version') do set "GO_VERSION=%%V"
|
|
echo [INFO] Go version: !GO_VERSION!
|
|
|
|
:: Get the tsslib directory path (inside service-party-android)
|
|
set "TSSLIB_DIR=tsslib"
|
|
|
|
if not exist "!TSSLIB_DIR!\go.mod" (
|
|
echo [ERROR] TSS library source not found at !TSSLIB_DIR!
|
|
echo Please ensure the tsslib source code exists.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
:: IMPORTANT: Add gomobile dependency to go.mod (official recommended step)
|
|
echo [INFO] Adding gomobile dependency to go.mod...
|
|
pushd "!TSSLIB_DIR!"
|
|
go get -d golang.org/x/mobile/cmd/gomobile
|
|
if !errorlevel! neq 0 (
|
|
echo [WARNING] go get gomobile failed, continuing anyway...
|
|
)
|
|
popd
|
|
|
|
:: Install gomobile
|
|
echo [INFO] Installing gomobile...
|
|
go install golang.org/x/mobile/cmd/gomobile@latest
|
|
if !errorlevel! neq 0 (
|
|
echo [ERROR] Failed to install gomobile!
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
:: Verify gomobile exists
|
|
if not exist "!GOBIN_DIR!\gomobile.exe" (
|
|
echo [ERROR] gomobile was not installed correctly!
|
|
echo Please check your Go installation and GOPATH.
|
|
echo Expected location: !GOBIN_DIR!\gomobile.exe
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
echo [INFO] Initializing gomobile...
|
|
"!GOBIN_DIR!\gomobile.exe" init
|
|
if !errorlevel! neq 0 (
|
|
echo [WARNING] gomobile init failed, but continuing...
|
|
)
|
|
|
|
echo [INFO] Building tsslib.aar with gomobile...
|
|
pushd "!TSSLIB_DIR!"
|
|
|
|
:: Build the AAR
|
|
:: Use -androidapi 21 to ensure compatibility with modern NDK
|
|
"!GOBIN_DIR!\gomobile.exe" bind -target=android -androidapi 21 -o "..\app\libs\tsslib.aar" .
|
|
if !errorlevel! neq 0 (
|
|
echo [ERROR] gomobile bind failed!
|
|
popd
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
popd
|
|
|
|
if exist "app\libs\tsslib.aar" (
|
|
echo [SUCCESS] tsslib.aar built successfully!
|
|
for %%F in ("app\libs\tsslib.aar") do echo Size: %%~zF bytes
|
|
) else (
|
|
echo [ERROR] tsslib.aar was not created!
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo.
|
|
) else (
|
|
echo [INFO] tsslib.aar found, skipping TSS library build
|
|
for %%F in ("app\libs\tsslib.aar") do echo Size: %%~zF bytes
|
|
echo.
|
|
)
|
|
|
|
:: Parse command line arguments
|
|
set BUILD_TYPE=all
|
|
if "%1"=="debug" set BUILD_TYPE=debug
|
|
if "%1"=="release" set BUILD_TYPE=release
|
|
if "%1"=="clean" set BUILD_TYPE=clean
|
|
if "%1"=="help" goto :show_help
|
|
|
|
:: Show build type
|
|
echo Build type: %BUILD_TYPE%
|
|
echo.
|
|
|
|
:: Clean build
|
|
if "%BUILD_TYPE%"=="clean" (
|
|
echo [1/1] Cleaning build files...
|
|
call gradlew.bat clean --no-daemon
|
|
if !errorlevel! neq 0 (
|
|
echo [ERROR] Clean failed!
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo.
|
|
echo [SUCCESS] Clean completed!
|
|
goto :end
|
|
)
|
|
|
|
:: Build Debug APK
|
|
if "%BUILD_TYPE%"=="debug" goto :build_debug
|
|
if "%BUILD_TYPE%"=="all" goto :build_debug
|
|
goto :check_release
|
|
|
|
:build_debug
|
|
echo [1/2] Building Debug APK...
|
|
call gradlew.bat assembleDebug --no-daemon
|
|
if !errorlevel! neq 0 (
|
|
echo [ERROR] Debug build failed!
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo [SUCCESS] Debug APK built successfully!
|
|
echo Location: app\build\outputs\apk\debug\app-debug.apk
|
|
echo.
|
|
|
|
:check_release
|
|
if "%BUILD_TYPE%"=="debug" goto :show_results
|
|
|
|
:: Build Release APK
|
|
:build_release
|
|
echo [2/2] Building Release APK...
|
|
call gradlew.bat assembleRelease --no-daemon
|
|
if !errorlevel! neq 0 (
|
|
echo [ERROR] Release build failed!
|
|
pause
|
|
exit /b 1
|
|
)
|
|
echo [SUCCESS] Release APK built successfully!
|
|
echo Location: app\build\outputs\apk\release\app-release.apk
|
|
echo.
|
|
|
|
:show_results
|
|
echo ========================================
|
|
echo Build Results
|
|
echo ========================================
|
|
echo.
|
|
|
|
:: Check and show Debug APK
|
|
if exist "app\build\outputs\apk\debug\app-debug.apk" (
|
|
for %%F in ("app\build\outputs\apk\debug\app-debug.apk") do (
|
|
echo [DEBUG APK]
|
|
echo Path: %%~fF
|
|
echo Size: %%~zF bytes
|
|
)
|
|
echo.
|
|
)
|
|
|
|
:: Check and show Release APK
|
|
if exist "app\build\outputs\apk\release\app-release.apk" (
|
|
for %%F in ("app\build\outputs\apk\release\app-release.apk") do (
|
|
echo [RELEASE APK]
|
|
echo Path: %%~fF
|
|
echo Size: %%~zF bytes
|
|
)
|
|
echo.
|
|
)
|
|
|
|
echo ========================================
|
|
echo Build completed successfully!
|
|
echo ========================================
|
|
goto :end
|
|
|
|
:show_help
|
|
echo.
|
|
echo Usage: build-apk.bat [option]
|
|
echo.
|
|
echo Options:
|
|
echo debug - Build debug APK only
|
|
echo release - Build release APK only
|
|
echo all - Build both debug and release APKs (default)
|
|
echo clean - Clean build files
|
|
echo help - Show this help message
|
|
echo.
|
|
echo Examples:
|
|
echo build-apk.bat - Build both APKs
|
|
echo build-apk.bat debug - Build debug APK only
|
|
echo build-apk.bat release - Build release APK only
|
|
echo build-apk.bat clean - Clean project
|
|
echo.
|
|
|
|
:end
|
|
echo.
|
|
pause
|