android_builder.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #!/bin/sh
  2. #
  3. # (C) 2018 Dawid Gan, under the GPLv3
  4. #
  5. # A script that builds Android APKs for all architectures
  6. #
  7. # The script assumes that you know what you are doing. It allows to generate all
  8. # packages for Google Play Store with single command. If you just want to build
  9. # STK for your own use, then use android/make.sh script instead.
  10. export BUILD_TYPE=Beta
  11. export PROJECT_VERSION=git20211004
  12. export PROJECT_CODE=299
  13. export STK_STOREPASS="xxx"
  14. export STK_KEYSTORE="/path/to/stk.keystore"
  15. export STK_ALIAS="alias"
  16. check_error()
  17. {
  18. if [ $? -gt 0 ]; then
  19. echo "Error ocurred."
  20. exit
  21. fi
  22. }
  23. clean()
  24. {
  25. echo "Clean everything"
  26. rm -rf ./android/assets
  27. rm -rf ./android-output
  28. cd android
  29. ./make.sh clean
  30. cd -
  31. }
  32. generate_assets()
  33. {
  34. echo "Generate assets"
  35. if [ -d "./android/assets" ]; then
  36. echo "Assets already found in ./android/assets"
  37. return
  38. fi
  39. cd ./android
  40. DECREASE_QUALITY=0 \
  41. CONVERT_TO_JPG=0 \
  42. ASSETS_PATHS="../android-output/assets-lq/data" \
  43. ./generate_assets.sh
  44. if [ ! -f "./assets/files.txt" ]; then
  45. echo "Error: Couldn't generate assets"
  46. return
  47. fi
  48. if [ -f "./assets/data/supertuxkart.git" ]; then
  49. mv "./assets/data/supertuxkart.git" \
  50. "./assets/data/supertuxkart.$PROJECT_VERSION"
  51. sed -i "s/data\/supertuxkart.git/data\/supertuxkart.$PROJECT_VERSION/g" \
  52. "./assets/files.txt"
  53. fi
  54. cd -
  55. }
  56. generate_full_assets()
  57. {
  58. echo "Generate zip file with full assets"
  59. if [ -f "./android-output/stk-assets.zip" ]; then
  60. echo "Full assets already found in ./android-output/stk-assets.zip"
  61. return
  62. fi
  63. cp -a ./android/generate_assets.sh ./android-output/
  64. cd ./android-output/
  65. ONLY_ASSETS=1 \
  66. TRACKS="all" \
  67. TEXTURE_SIZE=512 \
  68. JPEG_QUALITY=95 \
  69. PNG_QUALITY=95 \
  70. PNGQUANT_QUALITY=95 \
  71. SOUND_QUALITY=112 \
  72. SOUND_MONO=0 \
  73. SOUND_SAMPLE=44100 \
  74. OUTPUT_PATH="assets-hq" \
  75. ./generate_assets.sh
  76. if [ ! -f "./assets-hq/files.txt" ]; then
  77. echo "Error: Couldn't generate full assets"
  78. return
  79. fi
  80. cd ./assets-hq/data
  81. zip -r ../../stk-assets.zip ./*
  82. cd ../../
  83. rm ./generate_assets.sh
  84. if [ ! -f "./stk-assets.zip" ]; then
  85. echo "Error: Couldn't generate full assets"
  86. return
  87. fi
  88. FULL_ASSETS_SIZE=`du -b ./stk-assets.zip | cut -f1`
  89. sed -i "s/stk_assets_size = .*\;/stk_assets_size = $FULL_ASSETS_SIZE\;/g" \
  90. "../src/utils/download_assets_size.hpp"
  91. cd ../
  92. }
  93. generate_lq_assets()
  94. {
  95. echo "Generate zip file with lq assets"
  96. if [ -f "./android-output/stk-assets-lq.zip" ]; then
  97. echo "Full assets already found in ./android-output/stk-assets-lq..zip"
  98. return
  99. fi
  100. cp -a ./android/generate_assets.sh ./android-output/
  101. cd ./android-output/
  102. ONLY_ASSETS=1 \
  103. OUTPUT_PATH="assets-lq" \
  104. ./generate_assets.sh
  105. if [ ! -f "./assets-lq/files.txt" ]; then
  106. echo "Error: Couldn't generate lq assets"
  107. return
  108. fi
  109. cd ./assets-lq/data
  110. zip -r ../../stk-assets-lq.zip ./*
  111. cd ../../
  112. rm ./generate_assets.sh
  113. if [ ! -f "./stk-assets-lq.zip" ]; then
  114. echo "Error: Couldn't generate lq assets"
  115. return
  116. fi
  117. cd ../
  118. }
  119. # Handle clean command
  120. if [ ! -z "$1" ] && [ "$1" = "clean" ]; then
  121. clean
  122. exit
  123. fi
  124. #Build packages
  125. if [ ! -d "./android-output" ]; then
  126. mkdir ./android-output
  127. fi
  128. generate_lq_assets
  129. generate_full_assets
  130. generate_assets
  131. if [ -f "./android-output/SuperTuxKart-$PROJECT_VERSION.apk" ]; then
  132. echo "Package for architecture $ARCH1 is already built"
  133. #exit
  134. fi
  135. cd ./android
  136. ./make_deps.sh
  137. check_error
  138. ./make.sh
  139. cd -
  140. if [ ! -f ./android/build/outputs/apk/release/android-release.apk ]; then
  141. echo "Error: Couldn't build apk"
  142. exit
  143. fi
  144. if [ ! -f ./android/build/outputs/bundle/release/android-release.aab ]; then
  145. echo "Error: Couldn't build app bundle"
  146. exit
  147. fi
  148. cp ./android/build/outputs/apk/release/android-release.apk \
  149. ./android-output/SuperTuxKart-$PROJECT_VERSION.apk
  150. cp ./android/build/outputs/bundle/release/android-release.aab \
  151. ./android-output/SuperTuxKart-$PROJECT_VERSION.aab
  152. for arch in $(ls ./android/build/intermediates/merged_native_libs/release/out/lib); do
  153. cp ./android/build/intermediates/merged_native_libs/release/out/lib/$arch/libmain.so \
  154. ./android-output/SuperTuxKart-$PROJECT_VERSION-$arch-libmain.so
  155. cp ./android/build/intermediates/merged_native_libs/release/out/lib/$arch/libSDL2.so \
  156. ./android-output/SuperTuxKart-$PROJECT_VERSION-$arch-libSDL2.so
  157. done