Edit

kc3-lang/SDL/build-scripts/androidbuild.sh

Branch :

  • Show log

    Commit

  • Author : Ryan C. Gordon
    Date : 2015-04-20 12:22:44
    Hash : b72938c8
    Message : Windows: Always set the system timer resolution to 1ms by default. An existing hint lets apps that don't need the timer resolution changed avoid this, to save battery, etc, but this fixes several problems in timing, audio callbacks not firing fast enough, etc. Fixes Bugzilla #2944.

  • build-scripts/androidbuild.sh
  • #!/bin/bash
    
    SOURCES=()
    MKSOURCES=""
    CURDIR=`pwd -P`
    
    # Fetch sources
    if [[ $# -ge 2 ]]; then
        for src in ${@:2}
        do
            SOURCES+=($src)
            MKSOURCES="$MKSOURCES $(basename $src)"
        done
    else
        if [ -n "$1" ]; then
            while read src
            do
                SOURCES+=($src)
                MKSOURCES="$MKSOURCES $(basename $src)"
            done
        fi
    fi
    
    if [ -z "$1" ] || [ -z "$SOURCES" ]; then
        echo "Usage: androidbuild.sh com.yourcompany.yourapp < sources.list"
        echo "Usage: androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c"
        echo "To copy SDL source instead of symlinking: COPYSOURCE=1 androidbuild.sh ... "
        echo "You can pass additional arguments to ndk-build with the NDKARGS variable: NDKARGS=\"-s\" androidbuild.sh ..."
        exit 1
    fi
    
    
    
    SDLPATH="$( cd "$(dirname "$0")/.." ; pwd -P )"
    
    NDKBUILD=`which ndk-build`
    if [ -z "$NDKBUILD" ];then
        echo "Could not find the ndk-build utility, install Android's NDK and add it to the path"
        exit 1
    fi
    
    ANDROID=`which android`
    if [ -z "$ANDROID" ];then
        echo "Could not find the android utility, install Android's SDK and add it to the path"
        exit 1
    fi
    
    ANT=`which ant`
    
    if [ -z "$ANT" ];then
        echo "Could not find the ant utility, install Android's SDK and add it to the path"
        exit 1
    fi
    
    NCPUS="1"
    case "$OSTYPE" in
        darwin*)
            NCPU=`sysctl -n hw.ncpu`
            ;; 
        linux*)
            if [ -n `which nproc` ]; then
                NCPUS=`nproc`
            fi  
            ;;
      *);;
    esac
    
    APP="$1"
    APPARR=(${APP//./ })
    BUILDPATH="$SDLPATH/build/$APP"
    
    # Start Building
    
    rm -rf $BUILDPATH
    mkdir -p $BUILDPATH
    
    cp -r $SDLPATH/android-project/* $BUILDPATH
    
    # Copy SDL sources
    mkdir -p $BUILDPATH/jni/SDL
    if [ -z "$COPYSOURCE" ]; then
        ln -s $SDLPATH/src $BUILDPATH/jni/SDL
        ln -s $SDLPATH/include $BUILDPATH/jni/SDL
    else
        cp -r $SDLPATH/src $BUILDPATH/jni/SDL
        cp -r $SDLPATH/include $BUILDPATH/jni/SDL
    fi
    
    cp -r $SDLPATH/Android.mk $BUILDPATH/jni/SDL
    sed -i "s|YourSourceHere.c|$MKSOURCES|g" $BUILDPATH/jni/src/Android.mk
    sed -i "s|org\.libsdl\.app|$APP|g" $BUILDPATH/AndroidManifest.xml
    
    # Copy user sources
    for src in "${SOURCES[@]}"
    do
        cp $src $BUILDPATH/jni/src
    done
    
    # Create an inherited Activity
    cd $BUILDPATH/src
    for folder in "${APPARR[@]}"
    do
        mkdir -p $folder
        cd $folder
    done
    
    ACTIVITY="${folder}Activity"
    sed -i "s|SDLActivity|$ACTIVITY|g" $BUILDPATH/AndroidManifest.xml
    sed -i "s|SDLActivity|$APP|g" $BUILDPATH/build.xml
    
    # Fill in a default Activity
    echo "package $APP;" >  "$ACTIVITY.java"
    echo "import org.libsdl.app.SDLActivity;" >> "$ACTIVITY.java"
    echo "public class $ACTIVITY extends SDLActivity {}" >> "$ACTIVITY.java"
    
    # Update project and build
    cd $BUILDPATH
    android update project --path $BUILDPATH
    $NDKBUILD -j $NCPUS $NDKARGS
    $ANT debug
    
    cd $CURDIR
    
    APK="$BUILDPATH/bin/$APP-debug.apk"
    
    if [ -f "$APK" ]; then
        echo "Your APK is ready at $APK"
        echo "To install to your device: "
        echo "cd  $BUILDPATH"
        echo "ant debug install"
        exit 0
    fi
    
    echo "There was an error building the APK"
    exit 1