@echo off :: sign_apk.bat - Sign a YAMA APK with the release keystore :: Usage: sign_apk.bat setlocal if "%~1"=="" ( echo Usage: sign_apk.bat ^ exit /b 1 ) set "APK=%~f1" if not exist "%APK%" ( echo ERROR: APK not found: %APK% exit /b 1 ) set "KEYSTORE=%~dp0yama-release.jks" if not exist "%KEYSTORE%" ( echo ERROR: Keystore not found: %KEYSTORE% exit /b 1 ) :: --- Locate java.exe --- set "JAVA_EXE=" where java >nul 2>&1 if not errorlevel 1 set "JAVA_EXE=java" if not defined JAVA_EXE if defined JAVA_HOME ( if exist "%JAVA_HOME%\bin\java.exe" set "JAVA_EXE=%JAVA_HOME%\bin\java.exe" ) if not defined JAVA_EXE if exist "%ProgramFiles%\Android\Android Studio\jbr\bin\java.exe" ( set "JAVA_EXE=%ProgramFiles%\Android\Android Studio\jbr\bin\java.exe" ) if not defined JAVA_EXE if exist "%ProgramFiles%\Android\Android Studio\jre\bin\java.exe" ( set "JAVA_EXE=%ProgramFiles%\Android\Android Studio\jre\bin\java.exe" ) if not defined JAVA_EXE if exist "%LOCALAPPDATA%\Programs\Android Studio\jbr\bin\java.exe" ( set "JAVA_EXE=%LOCALAPPDATA%\Programs\Android Studio\jbr\bin\java.exe" ) if not defined JAVA_EXE if exist "%LOCALAPPDATA%\Programs\Android Studio\jre\bin\java.exe" ( set "JAVA_EXE=%LOCALAPPDATA%\Programs\Android Studio\jre\bin\java.exe" ) if not defined JAVA_EXE ( echo ERROR: java.exe not found. Install JDK or Android Studio. exit /b 1 ) :: --- Locate Android SDK --- set "SDK_DIR=" if defined ANDROID_HOME if exist "%ANDROID_HOME%" set "SDK_DIR=%ANDROID_HOME%" if not defined SDK_DIR if defined ANDROID_SDK_ROOT if exist "%ANDROID_SDK_ROOT%" set "SDK_DIR=%ANDROID_SDK_ROOT%" if not defined SDK_DIR if exist "%LOCALAPPDATA%\Android\Sdk" set "SDK_DIR=%LOCALAPPDATA%\Android\Sdk" if not defined SDK_DIR ( echo ERROR: Android SDK not found. Set ANDROID_HOME or ANDROID_SDK_ROOT. exit /b 1 ) :: --- Find latest apksigner.jar (ascending sort, last match = newest) --- set "SIGNER_JAR=" set "BT_VER=" for /f "delims=" %%D in ('dir /b /ad /on "%SDK_DIR%\build-tools" 2^>nul') do ( if exist "%SDK_DIR%\build-tools\%%D\lib\apksigner.jar" ( set "SIGNER_JAR=%SDK_DIR%\build-tools\%%D\lib\apksigner.jar" set "BT_VER=%%D" ) if exist "%SDK_DIR%\build-tools\%%D\apksigner.jar" ( set "SIGNER_JAR=%SDK_DIR%\build-tools\%%D\apksigner.jar" set "BT_VER=%%D" ) ) if not defined SIGNER_JAR ( echo ERROR: apksigner.jar not found under %SDK_DIR%\build-tools exit /b 1 ) echo. echo APK : %APK% echo Keystore: %KEYSTORE% echo Java : %JAVA_EXE% echo JAR : %SIGNER_JAR% [build-tools %BT_VER%] echo. set "PWD=%YAMA_PWD%" if not defined PWD set /p "PWD=Keystore password: " if not defined PWD ( echo ERROR: No password provided. exit /b 1 ) echo. echo Signing... "%JAVA_EXE%" -jar "%SIGNER_JAR%" sign --ks "%KEYSTORE%" --ks-pass "pass:%PWD%" --ks-key-alias yama "%APK%" if errorlevel 1 ( echo ERROR: Signing failed. exit /b 1 ) echo Verifying... "%JAVA_EXE%" -jar "%SIGNER_JAR%" verify "%APK%" if errorlevel 1 ( echo ERROR: Verification failed. exit /b 1 ) echo. echo Done: %APK% endlocal