build_without_gradle.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #!/usr/bin/env bash
  2. #
  3. # This script generates the scrcpy binary "manually" (without gradle).
  4. #
  5. # Adapt Android platform and build tools versions (via ANDROID_PLATFORM and
  6. # ANDROID_BUILD_TOOLS environment variables).
  7. #
  8. # Then execute:
  9. #
  10. # BUILD_DIR=my_build_dir ./build_without_gradle.sh
  11. set -e
  12. SCRCPY_DEBUG=false
  13. SCRCPY_VERSION_NAME=v2.2
  14. PLATFORM=${ANDROID_PLATFORM:-33}
  15. BUILD_TOOLS=${ANDROID_BUILD_TOOLS:-33.0.0}
  16. BUILD_TOOLS_DIR="$ANDROID_HOME/build-tools/$BUILD_TOOLS"
  17. BUILD_DIR="$(realpath ${BUILD_DIR:-build_manual})"
  18. CLASSES_DIR="$BUILD_DIR/classes"
  19. GEN_DIR="$BUILD_DIR/gen"
  20. SERVER_DIR=$(dirname "$0")
  21. SERVER_BINARY=scrcpy-server
  22. ANDROID_JAR="$ANDROID_HOME/platforms/android-$PLATFORM/android.jar"
  23. LAMBDA_JAR="$BUILD_TOOLS_DIR/core-lambda-stubs.jar"
  24. echo "Platform: android-$PLATFORM"
  25. echo "Build-tools: $BUILD_TOOLS"
  26. echo "Build dir: $BUILD_DIR"
  27. rm -rf "$CLASSES_DIR" "$GEN_DIR" "$BUILD_DIR/$SERVER_BINARY" classes.dex
  28. mkdir -p "$CLASSES_DIR"
  29. mkdir -p "$GEN_DIR/com/genymobile/scrcpy"
  30. << EOF cat > "$GEN_DIR/com/genymobile/scrcpy/BuildConfig.java"
  31. package com.genymobile.scrcpy;
  32. public final class BuildConfig {
  33. public static final boolean DEBUG = $SCRCPY_DEBUG;
  34. public static final String VERSION_NAME = "$SCRCPY_VERSION_NAME";
  35. }
  36. EOF
  37. echo "Generating java from aidl..."
  38. cd "$SERVER_DIR/src/main/aidl"
  39. "$BUILD_TOOLS_DIR/aidl" -o"$GEN_DIR" android/view/IRotationWatcher.aidl
  40. "$BUILD_TOOLS_DIR/aidl" -o"$GEN_DIR" \
  41. android/content/IOnPrimaryClipChangedListener.aidl
  42. "$BUILD_TOOLS_DIR/aidl" -o"$GEN_DIR" android/view/IDisplayFoldListener.aidl
  43. echo "Compiling java sources..."
  44. cd ../java
  45. javac -bootclasspath "$ANDROID_JAR" \
  46. -cp "$LAMBDA_JAR:$GEN_DIR" \
  47. -d "$CLASSES_DIR" \
  48. -source 1.8 -target 1.8 \
  49. com/genymobile/scrcpy/*.java \
  50. com/genymobile/scrcpy/wrappers/*.java
  51. echo "Dexing..."
  52. cd "$CLASSES_DIR"
  53. if [[ $PLATFORM -lt 31 ]]
  54. then
  55. # use dx
  56. "$BUILD_TOOLS_DIR/dx" --dex --output "$BUILD_DIR/classes.dex" \
  57. android/view/*.class \
  58. android/content/*.class \
  59. com/genymobile/scrcpy/*.class \
  60. com/genymobile/scrcpy/wrappers/*.class
  61. echo "Archiving..."
  62. cd "$BUILD_DIR"
  63. jar cvf "$SERVER_BINARY" classes.dex
  64. rm -rf classes.dex
  65. else
  66. # use d8
  67. "$BUILD_TOOLS_DIR/d8" --classpath "$ANDROID_JAR" \
  68. --output "$BUILD_DIR/classes.zip" \
  69. android/view/*.class \
  70. android/content/*.class \
  71. com/genymobile/scrcpy/*.class \
  72. com/genymobile/scrcpy/wrappers/*.class
  73. cd "$BUILD_DIR"
  74. mv classes.zip "$SERVER_BINARY"
  75. fi
  76. rm -rf "$GEN_DIR" "$CLASSES_DIR"
  77. echo "Server generated in $BUILD_DIR/$SERVER_BINARY"