From 478d3854122464294f237f602099da6abdc2403a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonin=20D=C3=A9cimo?= Date: Tue, 19 Aug 2014 17:18:57 +0200 Subject: [PATCH] Add Android module --- README.md | 4 +- love-release.1 | 4 +- love-release.sh | 7 ++- scripts/android.sh | 108 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 scripts/android.sh diff --git a/README.md b/README.md index f979d74..0e8b601 100644 --- a/README.md +++ b/README.md @@ -92,8 +92,8 @@ with eventual underscores (i.e. [a-zA-Z0-9\_]), otherwise you'll get errors. It must be only alphanumerical characters, with eventual underscores. `--package-name` Set the name of the package. By default, it is the name of your project, with eventual spaces replaced by underscores. -`--update-repo` Update the love-android-sdl2.git repository used in the cache. -`--version` Set the version of your package. +`--update-android` Update the love-android-sdl2.git repository used in the cache. +`--package-version` Set the version of your package. #### OTHERS `--refresh` Refresh the cache located in `~/.cache/love-release`. diff --git a/love-release.1 b/love-release.1 index be98140..aec5896 100644 --- a/love-release.1 +++ b/love-release.1 @@ -121,10 +121,10 @@ It must be only alphanumerical characters, with eventual underscores. Set the name of the package. By default, it is the name of your project, with eventual spaces replaced by underscores. .TP -.B \-\-update\-repo +.B \-\-update\-android Update the love-android-sdl2.git repository used in the cache. .TP -.B \-\-version \fIversion\fR +.B \-\-package\-version \fIversion\fR Set the version of your package. .SH OTHERS .TP diff --git a/love-release.sh b/love-release.sh index 1ba3508..bcd03ce 100755 --- a/love-release.sh +++ b/love-release.sh @@ -14,12 +14,14 @@ LOVE_VERSION=0.9.1 ## - a colon ":" if it requires an argument ## SCRIPT_ARGS="a; osname:" -SCRIPT_ARGS="l; d; w." +SCRIPT_ARGS="l; d; g; w." ## Windows SCRIPT_ARGS="icon: $SCRIPT_ARGS" ## Debian SCRIPT_ARGS="package-version: maintainer-name: maintainer-email: homepage: description: package-name: $SCRIPT_ARGS" +## Android +SCRIPT_ARGS="activity: package-version: maintainer-name: package-name: update-android; $SCRIPT_ARGS" ## Add a short summary of your platform script here @@ -27,6 +29,7 @@ SCRIPT_ARGS="package-version: maintainer-name: maintainer-email: homepage: descr ## --osname Create an executable for osname" SHORT_HELP=" -l Create a plain Love file -d Create a Debian package + -g Create an Android package -w, Create a Windows application -w32 Create a Windows x86 application -w64 Create a Windows x64 application" @@ -191,6 +194,8 @@ do source "$PLATFORMS_DIR"/love.sh elif [ "$OPTOPT" = "d" ]; then source "$PLATFORMS_DIR"/debian.sh + elif [ "$OPTOPT" = "g" ]; then + source "$PLATFORMS_DIR"/android.sh elif [ "$OPTOPT" = "w" ]; then if [ "$OPTARG" = "32" ]; then RELEASE_WIN_32=true diff --git a/scripts/android.sh b/scripts/android.sh new file mode 100644 index 0000000..cf8d673 --- /dev/null +++ b/scripts/android.sh @@ -0,0 +1,108 @@ +# Android debug package +init_module "Android" + + +# Options +activity_defined_argument=false +package_name_defined_argument=false +while getoptex "$SCRIPT_ARGS" "$@" +do + if [ "$OPTOPT" = "activity" ]; then + ACTIVITY=$OPTARG + activity_defined_argument=true + elif [ "$OPTOPT" = "package-version" ]; then + PACKAGE_VERSION=$OPTARG + elif [ "$OPTOPT" = "maintainer-name" ]; then + MAINTAINER_NAME=$OPTARG + elif [ "$OPTOPT" = "package-name" ]; then + PACKAGE_NAME=$OPTARG + package_name_defined_argument=true + elif [ "$OPTOPT" = "update-android" ]; then + UPDATE_ANDROID_REPO=true + fi +done +if [ "$package_name_defined_argument" = false ]; then + PACKAGE_NAME=$(echo $PROJECT_NAME | sed -e 's/[^-a-zA-Z0-9_]/-/g') +fi +if [ "$activity_defined_argument" = false ]; then + ACTIVITY=$(echo $PROJECT_NAME | sed -e 's/[^a-zA-Z0-9_]/_/g') +fi + + +create_love_file + + +# Android +MISSING_INFO=0 +ERROR_MSG="Could not build Android package." +if [ -z "$PACKAGE_VERSION" ]; then + MISSING_INFO=1 + ERROR_MSG="$ERROR_MSG + Missing project's version. Use --package-version." +fi +if [ -z "$MAINTAINER_NAME" ]; then + MISSING_INFO=1 + ERROR_MSG="$ERROR_MSG + Missing maintainer's name. Use --maintainer-name." +fi +if [ "$MISSING_INFO" -eq 1 ]; then + exit_module "$MISSING_INFO" "$ERROR_MSG" +fi + +LOVE_ANDROID_DIR="$CACHE_DIR"/love-android-sdl2 +if [ -d "$LOVE_ANDROID_DIR" ]; then + cd "$LOVE_ANDROID_DIR" + git checkout -- . + rm -rf src/com bin gen + if [ "$UPDATE_ANDROID_REPO" = true ]; then + LOCAL=$(git rev-parse @) + REMOTE=$(git rev-parse @{u}) + BASE=$(git merge-base @ @{u}) + if [ $LOCAL = $REMOTE ]; then + echo "love-android-sdl2 is already up-to-date." + elif [ $LOCAL = $BASE ]; then + git pull + ndk-build --jobs $(( $(nproc) + 1)) + fi + fi + cd "$RELEASE_DIR" +else + cd "$CACHE_DIR" + git clone https://bitbucket.org/MartinFelis/love-android-sdl2.git + cd "$LOVE_ANDROID_DIR" + ndk-build --jobs $(( $(nproc) + 1)) + cd "$RELEASE_DIR" +fi + +ANDROID_VERSION=$(grep -Eo -m 1 "[0-9]+.[0-9]+.[0-9]+[a-z]*" "$LOVE_ANDROID_DIR"/AndroidManifest.xml) +ANDROID_LOVE_VERSION=$(echo "$ANDROID_VERSION" | grep -Eo "[0-9]+.[0-9]+.[0-9]+") + +if [ "$LOVE_VERSION" != "$ANDROID_LOVE_VERSION" ]; then + echo "Love version ($LOVE_VERSION) differs from love-android-sdl2 version ($ANDROID_LOVE_VERSION). Could not create package." + +else + mkdir -p "$LOVE_ANDROID_DIR"/assets + cp "$LOVE_FILE" "$LOVE_ANDROID_DIR"/assets/game.love + cd "$LOVE_ANDROID_DIR" + sed -i "s/org.love2d.android/com.${MAINTAINER_NAME}.${PACKAGE_NAME}/" AndroidManifest.xml + sed -i "s/$ANDROID_VERSION/${ANDROID_VERSION}-${PACKAGE_NAME}-v${PACKAGE_VERSION}/" AndroidManifest.xml + sed -i "0,/LÖVE for Android/s//$PROJECT_NAME $PACKAGE_VERSION/" AndroidManifest.xml + sed -i "s/LÖVE for Android/$PROJECT_NAME/" AndroidManifest.xml + sed -i "s/GameActivity/$ACTIVITY/" AndroidManifest.xml + + mkdir -p src/com/$MAINTAINER_NAME/$PACKAGE_NAME + echo "package com.${MAINTAINER_NAME}.${PACKAGE_NAME}; + import org.love2d.android.GameActivity; + + public class $ACTIVITY extends GameActivity {} + " > src/com/$MAINTAINER_NAME/$PACKAGE_NAME/${ACTIVITY}.java + + ant debug + cp bin/love_android_sdl2-debug.apk "$RELEASE_DIR" + cd "$RELEASE_DIR" +fi + + +remove_love_file +exit_module +