113 lines
3.1 KiB
Batchfile
113 lines
3.1 KiB
Batchfile
@echo off
|
|
:: sign_apk.bat - Sign a YAMA APK with the release keystore
|
|
:: Usage: sign_apk.bat <apk-path>
|
|
setlocal
|
|
|
|
if "%~1"=="" (
|
|
echo Usage: sign_apk.bat ^<apk-path^>
|
|
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
|