androidbuild.sh 3.2 KB

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