androidbuild.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/bin/bash
  2. SOURCES=()
  3. MKSOURCES=""
  4. CURDIR=`pwd -P`
  5. # Fetch sources
  6. if [[ $# -ge 2 ]]; then
  7. for src in ${@:2}
  8. do
  9. SOURCES+=($src)
  10. MKSOURCES="$MKSOURCES $(basename $src)"
  11. done
  12. else
  13. if [ -n "$1" ]; then
  14. while read src
  15. do
  16. SOURCES+=($src)
  17. MKSOURCES="$MKSOURCES $(basename $src)"
  18. done
  19. fi
  20. fi
  21. if [ -z "$1" ] || [ -z "$SOURCES" ]; then
  22. echo "Usage: androidbuild.sh com.yourcompany.yourapp < sources.list"
  23. echo "Usage: androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c"
  24. echo "To copy SDL source instead of symlinking: COPYSOURCE=1 androidbuild.sh ... "
  25. exit 1
  26. fi
  27. SDLPATH="$( cd "$(dirname "$0")/.." ; pwd -P )"
  28. if [ -z "$ANDROID_HOME" ];then
  29. echo "Please set the ANDROID_HOME directory to the path of the Android SDK"
  30. exit 1
  31. fi
  32. if [ ! -d "$ANDROID_HOME/ndk-bundle" -a -z "$ANDROID_NDK_HOME" ]; then
  33. echo "Please set the ANDROID_NDK_HOME directory to the path of the Android NDK"
  34. exit 1
  35. fi
  36. APP="$1"
  37. APPARR=(${APP//./ })
  38. BUILDPATH="$SDLPATH/build/$APP"
  39. # Start Building
  40. rm -rf $BUILDPATH
  41. mkdir -p $BUILDPATH
  42. cp -r $SDLPATH/android-project/* $BUILDPATH
  43. # Copy SDL sources
  44. mkdir -p $BUILDPATH/app/jni/SDL
  45. if [ -z "$COPYSOURCE" ]; then
  46. ln -s $SDLPATH/src $BUILDPATH/app/jni/SDL
  47. ln -s $SDLPATH/include $BUILDPATH/app/jni/SDL
  48. else
  49. cp -r $SDLPATH/src $BUILDPATH/app/jni/SDL
  50. cp -r $SDLPATH/include $BUILDPATH/app/jni/SDL
  51. fi
  52. cp -r $SDLPATH/LICENSE.txt $BUILDPATH/app/jni/SDL
  53. cp -r $SDLPATH/README.md $BUILDPATH/app/jni/SDL
  54. cp -r $SDLPATH/Android.mk $BUILDPATH/app/jni/SDL
  55. cp -r $SDLPATH/CMakeLists.txt $BUILDPATH/app/jni/SDL
  56. cp -r $SDLPATH/cmake $BUILDPATH/app/jni/SDL
  57. sed -i -e "s|YourSourceHere.c|$MKSOURCES|g" $BUILDPATH/app/jni/src/Android.mk
  58. sed -i -e "s|YourSourceHere.c|$MKSOURCES|g" $BUILDPATH/app/jni/src/CMakeLists.txt
  59. sed -i -e "s|org\.libsdl\.app|$APP|g" $BUILDPATH/app/build.gradle
  60. sed -i -e "s|org\.libsdl\.app|$APP|g" $BUILDPATH/app/src/main/AndroidManifest.xml
  61. # Copy user sources
  62. for src in "${SOURCES[@]}"
  63. do
  64. cp $src $BUILDPATH/app/jni/src
  65. done
  66. # Create an inherited Activity
  67. cd $BUILDPATH/app/src/main/java
  68. for folder in "${APPARR[@]}"
  69. do
  70. mkdir -p $folder
  71. cd $folder
  72. done
  73. # Uppercase the first char in the activity class name because it's Java
  74. ACTIVITY="$(echo $folder | awk '{$1=toupper(substr($1,0,1))substr($1,2)}1')Activity"
  75. sed -i -e "s|\"SDLActivity\"|\"$ACTIVITY\"|g" $BUILDPATH/app/src/main/AndroidManifest.xml
  76. # Fill in a default Activity
  77. cat >"$ACTIVITY.java" <<__EOF__
  78. package $APP;
  79. import org.libsdl.app.SDLActivity;
  80. public class $ACTIVITY extends SDLActivity
  81. {
  82. }
  83. __EOF__
  84. # Update project and build
  85. echo "To build and install to a device for testing, run the following:"
  86. echo "cd $BUILDPATH"
  87. echo "./gradlew installDebug"