androidbuild.sh 3.0 KB

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