1
0
Fork 0
mirror of https://github.com/syncthing/syncthing-android.git synced 2024-11-25 22:01:16 +00:00

Improve build scripts (#427)

* Create tx_pull_all_translations.cmd

* Add script: build_and_release.cmd

* Workaround play-publisher issue 597

ref: https://github.com/Triple-T/gradle-play-publisher/issues/597

* Display generated APK versionCode after build

* Create versions.gradle

* postbuild_rename_apk: Get versionCode from "versions.gradle", copy instead of rename

* Fix Workaround for GPP left-over process kill

* Update build.gradle
This commit is contained in:
Catfriend1 2019-06-17 06:18:11 +02:00 committed by GitHub
parent 090cb19dd1
commit 36fb216dcf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 154 additions and 10 deletions

View file

@ -20,6 +20,10 @@ dependencies {
androidTestImplementation 'com.android.support:support-annotations:28.0.0' androidTestImplementation 'com.android.support:support-annotations:28.0.0'
} }
apply from: 'versions.gradle'
def ourVersionCode = versionMajor * 1000000 + versionMinor * 10000 + versionPatch * 100 + versionWrapper
def ourVersionName = "${versionMajor}.${versionMinor}.${versionPatch}.${versionWrapper}"
android { android {
// Changes to these values need to be reflected in `.travis.yml` // Changes to these values need to be reflected in `.travis.yml`
compileSdkVersion 28 compileSdkVersion 28
@ -37,8 +41,8 @@ android {
applicationId "com.github.catfriend1.syncthingandroid" applicationId "com.github.catfriend1.syncthingandroid"
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 28 targetSdkVersion 28
versionCode 1020001 versionCode ourVersionCode
versionName "1.2.0.1" versionName ourVersionName
testApplicationId 'com.github.catfriend1.syncthingandroid.test' testApplicationId 'com.github.catfriend1.syncthingandroid.test'
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
playAccountConfig = playAccountConfigs.defaultAccountConfig playAccountConfig = playAccountConfigs.defaultAccountConfig

6
app/versions.gradle Normal file
View file

@ -0,0 +1,6 @@
ext {
versionMajor = 1
versionMinor = 2
versionPatch = 0
versionWrapper = 2
}

84
build_and_release.cmd Normal file
View file

@ -0,0 +1,84 @@
@echo off
setlocal enabledelayedexpansion
SET SCRIPT_PATH=%~dps0
cd /d "%SCRIPT_PATH%"
cls
REM
REM Script Consts.
SET CLEANUP_BEFORE_BUILD=1
REM
REM Runtime Variables.
REM
REM SET SYNCTHING_RELEASE_PLAY_ACCOUNT_CONFIG_FILE=%userprofile%\.android\play_key.json"
REM SET SYNCTHING_RELEASE_STORE_FILE="%userprofile%\.android\signing_key.jks"
SET SYNCTHING_RELEASE_KEY_ALIAS=Syncthing-Fork
title %SYNCTHING_RELEASE_KEY_ALIAS% - Build and Release
REM
SET PATH=C:\Program Files\Android\Android Studio\jre\bin;%PATH%
REM
echo [INFO] Let's prepare a new "%SYNCTHING_RELEASE_KEY_ALIAS%" GPlay release.
REM
echo [INFO] Checking prerequisites ...
IF NOT EXIST "%SYNCTHING_RELEASE_PLAY_ACCOUNT_CONFIG_FILE%" echo [ERROR] SYNCTHING_RELEASE_PLAY_ACCOUNT_CONFIG_FILE env var not set or file does not exist. & goto :eos
REM
echo [INFO] Checking if SyncthingNative was built before starting this script ...
REM
SET LIBCOUNT=
for /f "tokens=*" %%A IN ('dir /s /a "%SCRIPT_PATH%app\src\main\jniLibs\*" 2^>NUL: ^| find /C "libsyncthing.so"') DO SET LIBCOUNT=%%A
IF NOT "%LIBCOUNT%" == "3" echo [ERROR] SyncthingNative[s] "libsyncthing.so" are missing. Please run "gradlew buildNative" first. & goto :eos
REM
REM User has to enter the signing password if it is not filled in here.
SET SIGNING_PASSWORD=
:enterSigningPassword
IF NOT DEFINED SIGNING_PASSWORD SET /p SIGNING_PASSWORD=Enter signing password:
IF NOT DEFINED SIGNING_PASSWORD echo [ERROR] Signing password is required. Please retry. & goto :enterSigningPassword
REM
echo [INFO] Running lint before building ...
call gradlew --quiet lint
SET RESULT=%ERRORLEVEL%
IF NOT "%RESULT%" == "0" echo [ERROR] "gradlew lint" exited with code #%RESULT%. & goto :eos
REM
echo [INFO] Building Android APK variant "debug" ...
IF "%CLEANUP_BEFORE_BUILD%" == "1" del /f "%SCRIPT_PATH%app\build\outputs\apk\debug\app-debug.apk" 2> NUL:
call gradlew --quiet assembleDebug
SET RESULT=%ERRORLEVEL%
IF NOT "%RESULT%" == "0" echo [ERROR] "gradlew assembleDebug" exited with code #%RESULT%. & goto :eos
type "app\build\intermediates\merged_manifests\debug\AndroidManifest.xml" | findstr /i "android:version"
REM
IF "%CLEANUP_BEFORE_BUILD%" == "1" del /f "%SCRIPT_PATH%app\build\outputs\apk\release\app-release.apk" 2> NUL:
echo [INFO] Building Android APK variant "release" ...
call gradlew --quiet assembleRelease
SET RESULT=%ERRORLEVEL%
IF NOT "%RESULT%" == "0" echo [ERROR] "gradlew assembleRelease" exited with code #%RESULT%. & goto :eos
type "app\build\intermediates\merged_manifests\release\AndroidManifest.xml" | findstr /i "android:version"
REM
echo [INFO] Deleting unsupported play translations ...
call gradlew --quiet deleteUnsupportedPlayTranslations
SET RESULT=%ERRORLEVEL%
IF NOT "%RESULT%" == "0" echo [ERROR] "gradlew deleteUnsupportedPlayTranslations" exited with code #%RESULT%. & goto :eos
REM
:askUserReadyToPublish
SET UI_ANSWER=
SET /p UI_ANSWER=Are you ready to publish this release to GPlay? [y/n]
IF NOT "%UI_ANSWER%" == "y" goto :askUserReadyToPublish
REM
REM Workaround for play-publisher issue, see https://github.com/Triple-T/gradle-play-publisher/issues/597
:clearPlayPublisherCache
IF EXIST "app\build\generated\gpp" rd /s /q "app\build\generated\gpp"
IF EXIST "app\build\generated\gpp" TASKKILL /F /IM java.exe & sleep 1 & goto :clearPlayPublisherCache
REM
REM Publish APK to GPlay
echo [INFO] Publishing APK to GPlay ...
call gradlew --quiet publishRelease
SET RESULT=%ERRORLEVEL%
IF NOT "%RESULT%" == "0" echo [ERROR] "gradlew publishRelease" exited with code #%RESULT%. & goto :eos
REM
goto :eos
:eos
REM
echo [INFO] End of Script.
REM
pause
goto :eof

View file

@ -17,14 +17,37 @@ REM
SET PATH=%PATH%;"%GIT_INSTALL_DIR%\bin" SET PATH=%PATH%;"%GIT_INSTALL_DIR%\bin"
REM REM
REM Get "applicationId" REM Get "applicationId"
SET APPLICATION_ID=
FOR /F "tokens=2 delims= " %%A IN ('type "%SCRIPT_PATH%app\build.gradle" 2^>^&1 ^| findstr "applicationId"') DO SET APPLICATION_ID=%%A FOR /F "tokens=2 delims= " %%A IN ('type "%SCRIPT_PATH%app\build.gradle" 2^>^&1 ^| findstr "applicationId"') DO SET APPLICATION_ID=%%A
SET APPLICATION_ID=%APPLICATION_ID:"=% SET APPLICATION_ID=%APPLICATION_ID:"=%
echo [INFO] applicationId="%APPLICATION_ID%" echo [INFO] applicationId="%APPLICATION_ID%"
REM REM
REM Get "versionName" REM Get "versionMajor"
FOR /F "tokens=2 delims= " %%A IN ('type "%SCRIPT_PATH%app\build.gradle" 2^>^&1 ^| findstr "versionName"') DO SET VERSION_NAME=%%A SET VERSION_MAJOR=
SET VERSION_NAME=%VERSION_NAME:"=% FOR /F "tokens=2 delims== " %%A IN ('type "%SCRIPT_PATH%app\versions.gradle" 2^>^&1 ^| findstr "versionMajor"') DO SET VERSION_MAJOR=%%A
echo [INFO] versionName="%VERSION_NAME%" SET VERSION_MAJOR=%VERSION_MAJOR:"=%
REM echo [INFO] versionMajor="%VERSION_MAJOR%"
REM
REM Get "versionMinor"
SET VERSION_MINOR=
FOR /F "tokens=2 delims== " %%A IN ('type "%SCRIPT_PATH%app\versions.gradle" 2^>^&1 ^| findstr "versionMinor"') DO SET VERSION_MINOR=%%A
SET VERSION_MINOR=%VERSION_MINOR:"=%
REM echo [INFO] versionMinor="%VERSION_MINOR%"
REM
REM Get "versionPatch"
SET VERSION_PATCH=
FOR /F "tokens=2 delims== " %%A IN ('type "%SCRIPT_PATH%app\versions.gradle" 2^>^&1 ^| findstr "versionPatch"') DO SET VERSION_PATCH=%%A
SET VERSION_PATCH=%VERSION_PATCH:"=%
REM echo [INFO] versionPatch="%VERSION_PATCH%"
REM
REM Get "versionWrapper"
SET VERSION_WRAPPER=
FOR /F "tokens=2 delims== " %%A IN ('type "%SCRIPT_PATH%app\versions.gradle" 2^>^&1 ^| findstr "versionWrapper"') DO SET VERSION_WRAPPER=%%A
SET VERSION_WRAPPER=%VERSION_WRAPPER:"=%
REM echo [INFO] versionWrapper="%VERSION_WRAPPER%"
REM
SET VERSION_NAME=%VERSION_MAJOR%.%VERSION_MINOR%.%VERSION_PATCH%.%VERSION_WRAPPER%
echo [INFO] VERSION_NAME=[%VERSION_NAME%]
REM REM
REM Get short hash of last commit. REM Get short hash of last commit.
IF NOT EXIST %GIT_BIN% echo [ERROR] git.exe not found. & pause & goto :eof IF NOT EXIST %GIT_BIN% echo [ERROR] git.exe not found. & pause & goto :eof
@ -33,13 +56,15 @@ FOR /F "tokens=1" %%A IN ('git rev-parse --short --verify HEAD 2^>NUL:') DO SET
popd popd
echo [INFO] commit="%COMMIT_SHORT_HASH%" echo [INFO] commit="%COMMIT_SHORT_HASH%"
REM REM
REM Rename APK to be ready for upload to the GitHub release page. REM Copy APK to be ready for upload to the GitHub release page.
SET APK_GITHUB_NEW_FILENAME=%APPLICATION_ID%_v%VERSION_NAME%_%COMMIT_SHORT_HASH%.apk SET APK_GITHUB_NEW_FILENAME=%APPLICATION_ID%_v%VERSION_NAME%_%COMMIT_SHORT_HASH%.apk
call :renIfExist %SCRIPT_PATH%app\build\outputs\apk\debug\app-debug.apk %APK_GITHUB_NEW_FILENAME% REM call :renIfExist %SCRIPT_PATH%app\build\outputs\apk\debug\app-debug.apk %APK_GITHUB_NEW_FILENAME%
call :copyIfExist %SCRIPT_PATH%app\build\outputs\apk\debug\app-debug.apk %SCRIPT_PATH%app\build\outputs\apk\debug\%APK_GITHUB_NEW_FILENAME%
REM REM
SET APK_GPLAY_NEW_FILENAME=%APPLICATION_ID%_gplay_v%VERSION_NAME%_%COMMIT_SHORT_HASH%.apk SET APK_GPLAY_NEW_FILENAME=%APPLICATION_ID%_gplay_v%VERSION_NAME%_%COMMIT_SHORT_HASH%.apk
call :renIfExist %SCRIPT_PATH%app\build\outputs\apk\release\app-release.apk %APK_GPLAY_NEW_FILENAME% REM call :renIfExist %SCRIPT_PATH%app\build\outputs\apk\release\app-release.apk %APK_GPLAY_NEW_FILENAME%
echo [INFO] APK file rename step complete. call :copyIfExist %SCRIPT_PATH%app\build\outputs\apk\release\app-release.apk %SCRIPT_PATH%app\build\outputs\apk\release\%APK_GPLAY_NEW_FILENAME%
echo [INFO] APK file copy step complete.
REM REM
REM Copy both APK to temporary storage location if the storage is available. REM Copy both APK to temporary storage location if the storage is available.
IF EXIST %TEMP_OUTPUT_FOLDER% copy /y %SCRIPT_PATH%app\build\outputs\apk\debug\%APK_GITHUB_NEW_FILENAME% %TEMP_OUTPUT_FOLDER% 2> NUL: IF EXIST %TEMP_OUTPUT_FOLDER% copy /y %SCRIPT_PATH%app\build\outputs\apk\debug\%APK_GITHUB_NEW_FILENAME% %TEMP_OUTPUT_FOLDER% 2> NUL:
@ -49,6 +74,16 @@ echo [INFO] End of Script.
timeout 3 timeout 3
goto :eof goto :eof
:copyIfExist
REM
REM Syntax:
REM call :copyIfExist [FULL_FN_ORIGINAL] [FILENAME_COPY_TARGET]
REM IF EXIST %1 REN %1 %2 & goto :eof
IF EXIST %1 copy /y %1 %2 & goto :eof
echo [INFO] File not found: %1
REM
goto :eof
:renIfExist :renIfExist
REM REM
REM Syntax: REM Syntax:

View file

@ -0,0 +1,15 @@
@echo off
title %~nx0
cls
cd /d "%~dps0"
REM
REM SET FORCE_FLAG=-f
SET FORCE_FLAG=
REM
echo Pulling all reviewed translations ...
tx pull -a --mode reviewed %FORCE_FLAG% -r "syncthing-android-1.stringsxml"
tx pull -a --mode reviewed %FORCE_FLAG% -r "syncthing-android-1.description_fulltxt"
tx pull -a --mode reviewed %FORCE_FLAG% -r "syncthing-android-1.description_shorttxt"
tx pull -a --mode reviewed %FORCE_FLAG% -r "syncthing-android-1.titletxt"
REM
pause