androidbuild.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. exit 1
  25. fi
  26. SDLPATH="$( cd "$(dirname "$0")/.." ; pwd -P )"
  27. NDKBUILD=`which ndk-build`
  28. if [ -z "$NDKBUILD" ];then
  29. echo "Could not find the ndk-build utility, install Android's NDK and add it to the path"
  30. exit 1
  31. fi
  32. ANDROID=`which android`
  33. if [ -z "$ANDROID" ];then
  34. echo "Could not find the android utility, install Android's SDK and add it to the path"
  35. exit 1
  36. fi
  37. ANT=`which ant`
  38. if [ -z "$ANT" ];then
  39. echo "Could not find the ant utility, install Android's SDK and add it to the path"
  40. exit 1
  41. fi
  42. APP="$1"
  43. APPARR=(${APP//./ })
  44. BUILDPATH="$SDLPATH/build/$APP"
  45. # Start Building
  46. rm -rf $BUILDPATH
  47. mkdir -p $BUILDPATH
  48. cp -r $SDLPATH/android-project/* $BUILDPATH
  49. # Copy SDL sources
  50. mkdir -p $BUILDPATH/jni/SDL
  51. cp -r $SDLPATH/src $BUILDPATH/jni/SDL
  52. cp -r $SDLPATH/include $BUILDPATH/jni/SDL
  53. cp $SDLPATH/Android.mk $BUILDPATH/jni/SDL
  54. sed -i "s|YourSourceHere.c|$MKSOURCES|g" $BUILDPATH/jni/src/Android.mk
  55. sed -i "s|org\.libsdl\.app|$APP|g" $BUILDPATH/AndroidManifest.xml
  56. # Copy user sources
  57. for src in "${SOURCES[@]}"
  58. do
  59. cp $src $BUILDPATH/jni/src
  60. done
  61. # Create an inherited Activity
  62. cd $BUILDPATH/src
  63. for folder in "${APPARR[@]}"
  64. do
  65. mkdir -p $folder
  66. cd $folder
  67. done
  68. ACTIVITY="${folder}Activity"
  69. sed -i "s|SDLActivity|$ACTIVITY|g" $BUILDPATH/AndroidManifest.xml
  70. sed -i "s|SDLActivity|$APP|g" $BUILDPATH/build.xml
  71. # Fill in a default Activity
  72. echo "package $APP;" > "$ACTIVITY.java"
  73. echo "import org.libsdl.app.SDLActivity;" >> "$ACTIVITY.java"
  74. echo "public class $ACTIVITY extends SDLActivity {}" >> "$ACTIVITY.java"
  75. # Update project and build
  76. cd $BUILDPATH
  77. android update project --path $BUILDPATH
  78. $NDKBUILD
  79. $ANT debug
  80. cd $CURDIR
  81. APK="$BUILDPATH/bin/$APP-debug.apk"
  82. if [ -f "$APK" ]; then
  83. echo "Your APK is ready at $APK"
  84. echo "To install to your device: "
  85. echo "cd $BUILDPATH"
  86. echo "ant debug install"
  87. exit 0
  88. fi
  89. echo "There was an error building the APK"
  90. exit 1