aboutsummaryrefslogtreecommitdiff
path: root/backends/platform
diff options
context:
space:
mode:
authordhewg2011-02-18 17:18:27 +0100
committerdhewg2011-02-18 17:18:27 +0100
commit8cddb2a401f7604bc7ffa7d7dfcafbc90cf2bada (patch)
tree22420998f87d8958dbbeeb75789d0ab6de8e5a67 /backends/platform
parent8a5078966290a3fbc0ee78d662cafa66a910b029 (diff)
parent2586e15e4ea6a365eced1888759630907b6b5870 (diff)
downloadscummvm-rg350-8cddb2a401f7604bc7ffa7d7dfcafbc90cf2bada.tar.gz
scummvm-rg350-8cddb2a401f7604bc7ffa7d7dfcafbc90cf2bada.tar.bz2
scummvm-rg350-8cddb2a401f7604bc7ffa7d7dfcafbc90cf2bada.zip
Merge branch 'dhewg-android'
Diffstat (limited to 'backends/platform')
-rw-r--r--backends/platform/android/android.cpp57
-rw-r--r--backends/platform/android/android.mk184
-rw-r--r--backends/platform/android/asset-archive.cpp2
-rw-r--r--backends/platform/android/asset-archive.h2
-rw-r--r--backends/platform/android/module.mk78
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java4
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVM.java22
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java13
-rw-r--r--backends/platform/android/org/inodes/gus/scummvm/Unpacker.java30
-rw-r--r--backends/platform/android/video.cpp14
-rw-r--r--backends/platform/android/video.h2
11 files changed, 243 insertions, 165 deletions
diff --git a/backends/platform/android/android.cpp b/backends/platform/android/android.cpp
index efcee488a5..07fb1d5d98 100644
--- a/backends/platform/android/android.cpp
+++ b/backends/platform/android/android.cpp
@@ -23,14 +23,14 @@
*
*/
+#if defined(__ANDROID__)
+
#include "backends/base-backend.h"
#include "base/main.h"
#include "graphics/surface.h"
#include "backends/platform/android/video.h"
-#if defined(ANDROID_BACKEND)
-
#include <jni.h>
#include <string.h>
@@ -73,12 +73,20 @@
#undef JNIEXPORT
#define JNIEXPORT __attribute__ ((visibility("default")))
-// This replaces the bionic libc assert message with something that
+// This replaces the bionic libc assert functions with something that
// actually prints the assertion failure before aborting.
-extern "C"
-void __assert(const char *file, int line, const char *expr) {
- __android_log_assert(expr, LOG_TAG, "%s:%d: Assertion failure: %s",
- file, line, expr);
+extern "C" {
+ void __assert(const char *file, int line, const char *expr) {
+ __android_log_assert(expr, LOG_TAG,
+ "Assertion failure: '%s' in %s:%d",
+ expr, file, line);
+ }
+
+ void __assert2(const char *file, int line, const char *func, const char *expr) {
+ __android_log_assert(expr, LOG_TAG,
+ "Assertion failure: '%s' in %s:%d (%s)",
+ expr, file, line, func);
+ }
}
static JavaVM *cached_jvm;
@@ -94,10 +102,14 @@ static jfieldID FID_ScummVM_nativeScummVM;
static jmethodID MID_Object_wait;
JNIEnv* JNU_GetEnv() {
- JNIEnv* env;
- bool version_unsupported =
- cached_jvm->GetEnv((void**)&env, JNI_VERSION_1_2);
- assert(! version_unsupported);
+ JNIEnv* env = 0;
+
+ jint res = cached_jvm->GetEnv((void**)&env, JNI_VERSION_1_2);
+ if (res != JNI_OK) {
+ __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "GetEnv() failed: %d", res);
+ abort();
+ }
+
return env;
}
@@ -445,6 +457,14 @@ void* OSystem_Android::timerThreadFunc(void* arg) {
OSystem_Android* system = (OSystem_Android*)arg;
DefaultTimerManager* timer = (DefaultTimerManager*)(system->_timer);
+ JNIEnv *env = 0;
+ jint res = cached_jvm->AttachCurrentThread(&env, 0);
+
+ if (res != JNI_OK) {
+ __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "AttachCurrentThread() failed: %d", res);
+ abort();
+ }
+
struct timespec tv;
tv.tv_sec = 0;
tv.tv_nsec = 100 * 1000 * 1000; // 100ms
@@ -454,6 +474,13 @@ void* OSystem_Android::timerThreadFunc(void* arg) {
nanosleep(&tv, NULL);
}
+ res = cached_jvm->DetachCurrentThread();
+
+ if (res != JNI_OK) {
+ __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "DetachCurrentThread() failed: %d", res);
+ abort();
+ }
+
return NULL;
}
@@ -1276,17 +1303,15 @@ void OSystem_Android::addSysArchivesToSearchSet(Common::SearchSet &s,
void OSystem_Android::logMessage(LogMessageType::Type type, const char *message) {
switch (type) {
case LogMessageType::kDebug:
- BaseBackend::logMessage(type, message);
+ __android_log_write(ANDROID_LOG_DEBUG, LOG_TAG, message);
break;
case LogMessageType::kWarning:
- __android_log_write(ANDROID_LOG_WARN, "ScummVM", message);
+ __android_log_write(ANDROID_LOG_WARN, LOG_TAG, message);
break;
case LogMessageType::kError:
- // FIXME: From the name it looks like this will also quit the program.
- // This shouldn't do that though.
- __android_log_assert("Fatal error", "ScummVM", "%s", message);
+ __android_log_write(ANDROID_LOG_ERROR, LOG_TAG, message);
break;
}
}
diff --git a/backends/platform/android/android.mk b/backends/platform/android/android.mk
index 95e848e0d9..ea2117c5a3 100644
--- a/backends/platform/android/android.mk
+++ b/backends/platform/android/android.mk
@@ -1,59 +1,173 @@
# Android specific build targets
-AAPT = aapt
-DX = dx
-APKBUILDER = apkbuilder
-ADB = adb -e
-JAVAC ?= javac
-JAVACFLAGS = -source 1.5 -target 1.5
+# These must be incremented for each market upload
+#ANDROID_VERSIONCODE = 6 Specified in dists/android/AndroidManifest.xml.in
+ANDROID_PLUGIN_VERSIONCODE = 6
+
+JAVA_FILES = \
+ ScummVM.java \
+ ScummVMApplication.java \
+ ScummVMActivity.java \
+ EditableSurfaceView.java \
+ Unpacker.java
+
+JAVA_FILES_PLUGIN = \
+ PluginProvider.java
+
+JAVA_FILES_GEN = \
+ Manifest.java \
+ R.java
+
+PATH_DIST = $(srcdir)/dists/android
+PATH_RESOURCES = $(PATH_DIST)/res
+
+RESOURCES = \
+ $(PATH_RESOURCES)/values/strings.xml \
+ $(PATH_RESOURCES)/layout/main.xml \
+ $(PATH_RESOURCES)/layout/splash.xml \
+ $(PATH_RESOURCES)/drawable/gradient.xml \
+ $(PATH_RESOURCES)/drawable/scummvm.png \
+ $(PATH_RESOURCES)/drawable/scummvm_big.png
+
+PLUGIN_RESOURCES = \
+ $(PATH_RESOURCES)/values/strings.xml \
+ $(PATH_RESOURCES)/drawable/scummvm.png
# FIXME: find/mark plugin entry points and add all this back again:
#LDFLAGS += -Wl,--gc-sections
#CXXFLAGS += -ffunction-sections -fdata-sections -fvisibility=hidden -fvisibility-inlines-hidden
-resources.ap_: $(srcdir)/dists/android/AndroidManifest.xml $(RESOURCES) $(ASSETS) $(ANDROID_JAR8) $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA)
- $(INSTALL) -d build.tmp/assets/
- $(INSTALL) -c -m 644 $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA) build.tmp/assets/
- $(AAPT) package -f -M $< -S $(srcdir)/dists/android/res -A build.tmp/assets -I $(ANDROID_JAR8) -F $@
-
-build.tmp/%/resources.ap_: build.tmp/%/AndroidManifest.xml build.stage/%/res/values/strings.xml build.stage/%/res/drawable/scummvm.png $(ANDROID_JAR8)
- $(AAPT) package -f -M $< -S build.stage/$*/res -I $(ANDROID_JAR8) -F $@
-
-scummvm.apk: build.tmp/libscummvm.so resources.ap_ classes.dex
- # Package installer won't delete old libscummvm.so on upgrade so
- # replace it with a zero size file
- $(INSTALL) -d build.stage/common/lib/armeabi
- touch build.stage/common/lib/armeabi/libscummvm.so
- # We now handle the library unpacking ourselves from mylib/
- $(INSTALL) -d build.stage/common/mylib/armeabi
- $(INSTALL) -c -m 644 build.tmp/libscummvm.so build.stage/common/mylib/armeabi/
- $(STRIP) build.stage/common/mylib/armeabi/libscummvm.so
- # "-nf lib/armeabi/libscummvm.so" builds bogus paths?
- $(APKBUILDER) $@ -z resources.ap_ -f classes.dex -rf build.stage/common || { $(RM) $@; exit 1; }
-
-scummvm-engine-%.apk: plugins/lib%.so build.tmp/%/resources.ap_ build.tmp/plugins/classes.dex
- $(INSTALL) -d build.stage/$*/apk/mylib/armeabi/
- $(INSTALL) -c -m 644 plugins/lib$*.so build.stage/$*/apk/mylib/armeabi/
- $(STRIP) build.stage/$*/apk/mylib/armeabi/lib$*.so
- $(APKBUILDER) $@ -z build.tmp/$*/resources.ap_ -f build.tmp/plugins/classes.dex -rf build.stage/$*/apk || { $(RM) $@; exit 1; }
+AAPT = $(ANDROID_SDK)/platform-tools/aapt
+ADB = $(ANDROID_SDK)/platform-tools/adb
+DX = $(ANDROID_SDK)/platform-tools/dx
+APKBUILDER = $(ANDROID_SDK)/tools/apkbuilder
+JAVAC ?= javac
+JAVACFLAGS = -source 1.5 -target 1.5
+
+# This is a bit silly. I want to compile against the 1.6 android.jar,
+# to make the compiler check that I don't use something that requires
+# a newer Android. However, in order to use android:installLocation,
+# we need to give aapt a version >=8 android.jar - even though the
+# result will work ok on 1.5+.
+ANDROID_JAR = $(ANDROID_SDK)/platforms/android-4/android.jar
+ANDROID_JAR8 = $(ANDROID_SDK)/platforms/android-8/android.jar
+
+PATH_BUILD = build.tmp
+PATH_BUILD_ASSETS = $(PATH_BUILD)/assets
+PATH_BUILD_CLASSES_MAIN_TOP = $(PATH_BUILD)/classes.main
+PATH_BUILD_CLASSES_PLUGIN_TOP = $(PATH_BUILD)/classes.plugin
+
+PATH_STAGE_PREFIX = build.stage
+PATH_STAGE_MAIN = $(PATH_STAGE_PREFIX).main
+
+PATH_REL = org/inodes/gus/scummvm
+PATH_SRC_TOP = $(srcdir)/backends/platform/android
+PATH_SRC = $(PATH_SRC_TOP)/$(PATH_REL)
+
+PATH_GEN_TOP = $(PATH_BUILD)/java
+PATH_GEN = $(PATH_GEN_TOP)/$(PATH_REL)
+PATH_CLASSES_MAIN = $(PATH_BUILD_CLASSES_MAIN_TOP)/$(PATH_REL)
+PATH_CLASSES_PLUGIN = $(PATH_BUILD_CLASSES_PLUGIN_TOP)/$(PATH_REL)
+
+FILE_MANIFEST = $(srcdir)/dists/android/AndroidManifest.xml
+FILE_DEX = $(PATH_BUILD)/classes.dex
+FILE_DEX_PLUGIN = $(PATH_BUILD)/plugins/classes.dex
+FILE_RESOURCES = resources.ap_
+FILE_RESOURCES_MAIN = $(PATH_BUILD)/$(FILE_RESOURCES)
+
+SRC_GEN = $(addprefix $(PATH_GEN)/, $(JAVA_FILES_GEN))
+
+CLASSES_MAIN = $(addprefix $(PATH_CLASSES_MAIN)/, $(JAVA_FILES:%.java=%.class))
+CLASSES_GEN = $(addprefix $(PATH_CLASSES_MAIN)/, $(JAVA_FILES_GEN:%.java=%.class))
+CLASSES_PLUGIN = $(addprefix $(PATH_CLASSES_PLUGIN)/, $(JAVA_FILES_PLUGIN:%.java=%.class))
+
+APK_MAIN = scummvm.apk
+APK_PLUGINS = $(patsubst plugins/lib%.so, scummvm-engine-%.apk, $(PLUGINS))
+
+$(SRC_GEN): $(FILE_MANIFEST) $(filter %.xml,$(RESOURCES)) $(ANDROID_JAR8)
+ @$(MKDIR) -p $(PATH_GEN_TOP)
+ $(AAPT) package -m -J $(PATH_GEN_TOP) -M $< -S $(PATH_RESOURCES) -I $(ANDROID_JAR8)
+$(PATH_CLASSES_MAIN)/%.class: $(PATH_GEN)/%.java $(SRC_GEN)
+ @$(MKDIR) -p $(@D)
+ $(JAVAC) $(JAVACFLAGS) -cp $(PATH_SRC_TOP) -d $(PATH_BUILD_CLASSES_MAIN_TOP) -bootclasspath $(ANDROID_JAR) $<
+
+$(PATH_CLASSES_MAIN)/%.class: $(PATH_SRC)/%.java $(SRC_GEN)
+ @$(MKDIR) -p $(@D)
+ $(JAVAC) $(JAVACFLAGS) -cp $(PATH_SRC_TOP):$(PATH_GEN_TOP) -d $(PATH_BUILD_CLASSES_MAIN_TOP) -bootclasspath $(ANDROID_JAR) $<
+
+$(PATH_CLASSES_PLUGIN)/%.class: $(PATH_SRC)/%.java
+ @$(MKDIR) -p $(@D)
+ $(JAVAC) $(JAVACFLAGS) -cp $(PATH_SRC_TOP) -d $(PATH_BUILD_CLASSES_PLUGIN_TOP) -bootclasspath $(ANDROID_JAR) $<
+
+$(FILE_DEX): $(CLASSES_MAIN) $(CLASSES_GEN)
+ $(DX) --dex --output=$@ $(PATH_BUILD_CLASSES_MAIN_TOP)
+
+$(FILE_DEX_PLUGIN): $(CLASSES_PLUGIN)
+ @$(MKDIR) -p $(@D)
+ $(DX) --dex --output=$@ $(PATH_BUILD_CLASSES_PLUGIN_TOP)
+
+$(PATH_BUILD)/%/AndroidManifest.xml $(PATH_STAGE_PREFIX).%/res/values/strings.xml: $(PATH_DIST)/mkmanifest.pl $(srcdir)/configure $(PATH_DIST)/AndroidManifest.xml
+ $(PATH_DIST)/mkmanifest.pl --id=$* --configure=$(srcdir)/configure \
+ --version-name=$(VERSION) \
+ --version-code=$(ANDROID_PLUGIN_VERSIONCODE) \
+ --stringres=$(PATH_STAGE_PREFIX).$*/res/values/strings.xml \
+ --manifest=$(PATH_BUILD)/$*/AndroidManifest.xml \
+ --master-manifest=$(PATH_DIST)/AndroidManifest.xml \
+ --unpacklib=mylib/armeabi/lib$*.so
+
+$(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png: $(PATH_RESOURCES)/drawable/scummvm.png
+ @$(MKDIR) -p $(@D)
+ $(CP) $< $@
+
+$(FILE_RESOURCES_MAIN): $(FILE_MANIFEST) $(RESOURCES) $(ANDROID_JAR8) $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA)
+ $(INSTALL) -d $(PATH_BUILD_ASSETS)
+ $(INSTALL) -c -m 644 $(DIST_FILES_THEMES) $(DIST_FILES_ENGINEDATA) $(PATH_BUILD_ASSETS)/
+ $(AAPT) package -f -M $< -S $(PATH_RESOURCES) -A $(PATH_BUILD_ASSETS) -I $(ANDROID_JAR8) -F $@
+
+$(PATH_BUILD)/%/$(FILE_RESOURCES): $(PATH_BUILD)/%/AndroidManifest.xml $(PATH_STAGE_PREFIX).%/res/values/strings.xml $(PATH_STAGE_PREFIX).%/res/drawable/scummvm.png $(ANDROID_JAR8)
+ $(AAPT) package -f -M $< -S $(PATH_STAGE_PREFIX).$*/res -I $(ANDROID_JAR8) -F $@
+
+# Package installer won't delete old libscummvm.so on upgrade so
+# replace it with a zero size file
+$(APK_MAIN): $(EXECUTABLE) $(FILE_RESOURCES_MAIN) $(FILE_DEX)
+ $(INSTALL) -d $(PATH_STAGE_MAIN)/common/lib/armeabi
+ touch $(PATH_STAGE_MAIN)/common/lib/armeabi/libscummvm.so
+ $(INSTALL) -d $(PATH_STAGE_MAIN)/common/mylib/armeabi
+ $(INSTALL) -c -m 644 libscummvm.so $(PATH_STAGE_MAIN)/common/mylib/armeabi/
+ $(STRIP) $(PATH_STAGE_MAIN)/common/mylib/armeabi/libscummvm.so
+ $(APKBUILDER) $@ -z $(FILE_RESOURCES_MAIN) -f $(FILE_DEX) -rf $(PATH_STAGE_MAIN)/common || { $(RM) $@; exit 1; }
+
+scummvm-engine-%.apk: plugins/lib%.so $(PATH_BUILD)/%/$(FILE_RESOURCES) $(FILE_DEX_PLUGIN)
+ $(INSTALL) -d $(PATH_STAGE_PREFIX).$*/apk/mylib/armeabi/
+ $(INSTALL) -c -m 644 plugins/lib$*.so $(PATH_STAGE_PREFIX).$*/apk/mylib/armeabi/
+ $(STRIP) $(PATH_STAGE_PREFIX).$*/apk/mylib/armeabi/lib$*.so
+ $(APKBUILDER) $@ -z $(PATH_BUILD)/$*/$(FILE_RESOURCES) -f $(FILE_DEX_PLUGIN) -rf $(PATH_STAGE_PREFIX).$*/apk || { $(RM) $@; exit 1; }
+
+all: $(APK_MAIN) $(APK_PLUGINS)
+
+clean: androidclean
+
+androidclean:
+ @$(RM) -rf $(PATH_BUILD) $(PATH_STAGE_PREFIX).* *.apk release
+
+# remove debugging signature
release/%.apk: %.apk
@$(MKDIR) -p $(@D)
@$(RM) $@
$(CP) $< $@.tmp
- # remove debugging signature
zip -d $@.tmp META-INF/\*
jarsigner $(JARSIGNER_FLAGS) $@.tmp release
zipalign 4 $@.tmp $@
$(RM) $@.tmp
-androidrelease: release/scummvm.apk $(patsubst plugins/lib%.so,release/scummvm-engine-%.apk,$(PLUGINS))
+androidrelease: $(addprefix release/, $(APK_MAIN) $(APK_PLUGINS))
-androidtest: scummvm.apk scummvm-engine-scumm.apk scummvm-engine-kyra.apk
+androidtest: $(APK_MAIN) $(APK_PLUGINS)
@set -e; for apk in $^; do \
- echo $(ADB) install -r $$apk; \
$(ADB) install -r $$apk; \
done
$(ADB) shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n org.inodes.gus.scummvm/.Unpacker
.PHONY: androidrelease androidtest
+
diff --git a/backends/platform/android/asset-archive.cpp b/backends/platform/android/asset-archive.cpp
index 20c6a653c0..bd32847f6a 100644
--- a/backends/platform/android/asset-archive.cpp
+++ b/backends/platform/android/asset-archive.cpp
@@ -23,7 +23,7 @@
*
*/
-#if defined(ANDROID)
+#if defined(__ANDROID__)
#include <jni.h>
diff --git a/backends/platform/android/asset-archive.h b/backends/platform/android/asset-archive.h
index b3f6993c50..28e48426e9 100644
--- a/backends/platform/android/asset-archive.h
+++ b/backends/platform/android/asset-archive.h
@@ -23,7 +23,7 @@
*
*/
-#if defined(ANDROID)
+#if defined(__ANDROID__)
#include <jni.h>
diff --git a/backends/platform/android/module.mk b/backends/platform/android/module.mk
index b457b388b1..8b120b21ff 100644
--- a/backends/platform/android/module.mk
+++ b/backends/platform/android/module.mk
@@ -1,84 +1,12 @@
MODULE := backends/platform/android
MODULE_OBJS := \
- android.o asset-archive.o video.o
+ android.o \
+ asset-archive.o \
+ video.o
# We don't use rules.mk but rather manually update OBJS and MODULE_DIRS.
MODULE_OBJS := $(addprefix $(MODULE)/, $(MODULE_OBJS))
OBJS := $(MODULE_OBJS) $(OBJS)
MODULE_DIRS += $(sort $(dir $(MODULE_OBJS)))
-JAVA_SRC = \
- $(MODULE)/org/inodes/gus/scummvm/ScummVM.java \
- $(MODULE)/org/inodes/gus/scummvm/ScummVMApplication.java \
- $(MODULE)/org/inodes/gus/scummvm/ScummVMActivity.java \
- $(MODULE)/org/inodes/gus/scummvm/EditableSurfaceView.java \
- $(MODULE)/org/inodes/gus/scummvm/Unpacker.java \
- $(MODULE)/org/inodes/gus/scummvm/Manifest.java \
- $(MODULE)/org/inodes/gus/scummvm/R.java
-
-JAVA_PLUGIN_SRC = \
- $(MODULE)/org/inodes/gus/scummvm/PluginProvider.java
-
-RESOURCES = \
- $(srcdir)/dists/android/res/values/strings.xml \
- $(srcdir)/dists/android/res/layout/main.xml \
- $(srcdir)/dists/android/res/layout/splash.xml \
- $(srcdir)/dists/android/res/drawable/gradient.xml \
- $(srcdir)/dists/android/res/drawable/scummvm.png \
- $(srcdir)/dists/android/res/drawable/scummvm_big.png
-
-ASSETS = $(DIST_FILES_ENGINEDATA) $(DIST_FILES_THEMES)
-
-PLUGIN_RESOURCES = \
- $(srcdir)/dists/android/res/values/strings.xml \
- $(srcdir)/dists/android/res/drawable/scummvm.png
-
-# These must be incremented for each market upload
-#ANDROID_VERSIONCODE = 6 Specified in dists/android/AndroidManifest.xml.in
-ANDROID_PLUGIN_VERSIONCODE = 6
-
-# This is a bit silly. I want to compile against the 1.6 android.jar,
-# to make the compiler check that I don't use something that requires
-# a newer Android. However, in order to use android:installLocation,
-# we need to give aapt a version >=8 android.jar - even though the
-# result will work ok on 1.5+.
-ANDROID_JAR = $(ANDROID_SDK)/platforms/android-1.5/android.jar
-ANDROID_JAR8 = $(ANDROID_SDK)/platforms/android-8/android.jar
-
-# This library contains scummvm proper
-build.tmp/libscummvm.so: $(OBJS)
- @$(MKDIR) -p $(@D)
- $(QUIET_LINK)$(CXX) -shared $(LDFLAGS) -Wl,-Bsymbolic -Wl,-soname,$(@F) -Wl,--no-undefined -o $@ $(PRE_OBJS_FLAGS) $(OBJS) $(POST_OBJS_FLAGS) $(LIBS)
-
-
-backends/platform/android/org/inodes/gus/scummvm/R.java backends/platform/android/org/inodes/gus/scummvm/Manifest.java: $(srcdir)/dists/android/AndroidManifest.xml $(filter %.xml,$(RESOURCES)) $(ANDROID_JAR8)
- $(AAPT) package -m -J backends/platform/android -M $< -S $(srcdir)/dists/android/res -I $(ANDROID_JAR8)
-
-build.tmp/classes/%.class: $(srcdir)/backends/platform/android/%.java $(srcdir)/backends/platform/android/org/inodes/gus/scummvm/R.java
- @$(MKDIR) -p $(@D)
- $(JAVAC) $(JAVACFLAGS) -cp $(srcdir)/backends/platform/android -d build.tmp/classes -bootclasspath $(ANDROID_JAR) $<
-
-build.tmp/classes.plugin/%.class: $(srcdir)/backends/platform/android/%.java
- @$(MKDIR) -p $(@D)
- $(JAVAC) $(JAVACFLAGS) -cp $(srcdir)/backends/platform/android -d build.tmp/classes.plugin -bootclasspath $(ANDROID_JAR) $<
-
-classes.dex: $(JAVA_SRC:backends/platform/android/%.java=build.tmp/classes/%.class)
- $(DX) --dex --output=$@ build.tmp/classes
-
-build.tmp/plugins/classes.dex: $(JAVA_PLUGIN_SRC:backends/platform/android/%.java=build.tmp/classes.plugin/%.class)
- @$(MKDIR) -p $(@D)
- $(DX) --dex --output=$@ build.tmp/classes.plugin
-
-build.tmp/%/AndroidManifest.xml build.stage/%/res/values/strings.xml: dists/android/mkmanifest.pl configure dists/android/AndroidManifest.xml
- dists/android/mkmanifest.pl --id=$* --configure=configure \
- --version-name=$(VERSION) \
- --version-code=$(ANDROID_PLUGIN_VERSIONCODE) \
- --stringres=build.stage/$*/res/values/strings.xml \
- --manifest=build.tmp/$*/AndroidManifest.xml \
- --master-manifest=dists/android/AndroidManifest.xml \
- --unpacklib=mylib/armeabi/lib$*.so
-
-build.stage/%/res/drawable/scummvm.png: dists/android/res/drawable/scummvm.png
- @$(MKDIR) -p $(@D)
- $(CP) $< $@
diff --git a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
index 840f3440d5..c94ab0a3ff 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/PluginProvider.java
@@ -13,6 +13,8 @@ import android.util.Log;
import java.util.ArrayList;
public class PluginProvider extends BroadcastReceiver {
+ private final static String LOG_TAG = "ScummVM";
+
public final static String META_UNPACK_LIB =
"org.inodes.gus.scummvm.meta.UNPACK_LIB";
@@ -28,7 +30,7 @@ public class PluginProvider extends BroadcastReceiver {
.getReceiverInfo(new ComponentName(context, this.getClass()),
PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
- Log.e(this.toString(), "Error finding my own info?", e);
+ Log.e(LOG_TAG, "Error finding my own info?", e);
return;
}
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
index 6986f3988d..0e905f43a5 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVM.java
@@ -33,7 +33,7 @@ import java.util.LinkedHashMap;
// use the Java versions of most EGL functions :(
public class ScummVM implements SurfaceHolder.Callback {
- private final static String LOG_TAG = "ScummVM.java";
+ protected final static String LOG_TAG = "ScummVM";
private final int AUDIO_FRAME_SIZE = 2 * 2; // bytes. 16bit audio * stereo
public static class AudioSetupException extends Exception {}
@@ -98,16 +98,14 @@ public class ScummVM implements SurfaceHolder.Callback {
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
// Disabled while I debug GL problems
- //pushEvent(new Event(Event.EVENT_SCREEN_CHANGED));
+ pushEvent(new Event(Event.EVENT_SCREEN_CHANGED));
}
public void surfaceDestroyed(SurfaceHolder holder) {
- pushEvent(new Event(Event.EVENT_SCREEN_CHANGED));
try {
surfaceLock.acquire();
} catch (InterruptedException e) {
- Log.e(this.toString(),
- "Interrupted while waiting for surface lock", e);
+ Log.e(LOG_TAG, "Interrupted while waiting for surface lock", e);
}
}
@@ -151,8 +149,7 @@ public class ScummVM implements SurfaceHolder.Callback {
if (value[0] == EGL10.EGL_NONE)
Log.d(LOG_TAG, entry.getKey() + ": NONE");
else
- Log.d(LOG_TAG, String.format("%s: %d",
- entry.getKey(), value[0]));
+ Log.d(LOG_TAG, String.format("%s: %d", entry.getKey(), value[0]));
}
}
@@ -174,8 +171,7 @@ public class ScummVM implements SurfaceHolder.Callback {
num_config);
if (false) {
- Log.d(LOG_TAG,
- String.format("Found %d EGL configurations.", numConfigs));
+ Log.d(LOG_TAG, String.format("Found %d EGL configurations.", numConfigs));
for (EGLConfig config : configs)
dumpEglConfig(config);
}
@@ -184,8 +180,7 @@ public class ScummVM implements SurfaceHolder.Callback {
// devices so we have to filter/rank the configs again ourselves.
eglConfig = chooseEglConfig(configs);
if (false) {
- Log.d(LOG_TAG,
- String.format("Chose EGL config from %d possibilities.", numConfigs));
+ Log.d(LOG_TAG, String.format("Chose EGL config from %d possibilities.", numConfigs));
dumpEglConfig(eglConfig);
}
@@ -199,6 +194,7 @@ public class ScummVM implements SurfaceHolder.Callback {
int best = 0;
int bestScore = -1;
int[] value = new int[1];
+
for (int i = 0; i < configs.length; i++) {
EGLConfig config = configs[i];
int score = 10000;
@@ -255,7 +251,7 @@ public class ScummVM implements SurfaceHolder.Callback {
eglSurface = egl.eglCreateWindowSurface(eglDisplay, eglConfig,
nativeSurface, null);
if (eglSurface == EGL10.EGL_NO_SURFACE)
- Log.e(LOG_TAG, "CreateWindowSurface failed!");
+ Log.e(LOG_TAG, "CreateWindowSurface failed!");
egl.eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
GL10 gl = (GL10)eglContext.getGL();
@@ -396,7 +392,7 @@ public class ScummVM implements SurfaceHolder.Callback {
offset += ret;
}
} catch (InterruptedException e) {
- Log.e(this.toString(), "Audio thread interrupted", e);
+ Log.e(LOG_TAG, "Audio thread interrupted", e);
}
}
}
diff --git a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
index b37b2b8a52..fae35b6695 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/ScummVMActivity.java
@@ -73,7 +73,7 @@ public class ScummVMActivity extends Activity {
@Override
protected void displayMessageOnOSD(String msg) {
- Log.i(this.toString(), "OSD: " + msg);
+ Log.i(LOG_TAG, "OSD: " + msg);
Toast.makeText(ScummVMActivity.this, msg, Toast.LENGTH_LONG).show();
}
@@ -137,6 +137,7 @@ public class ScummVMActivity extends Activity {
}
SurfaceView main_surface = (SurfaceView)findViewById(R.id.main_surface);
+
main_surface.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
return onTouchEvent(event);
@@ -156,7 +157,7 @@ public class ScummVMActivity extends Activity {
try {
runScummVM();
} catch (Exception e) {
- Log.e("ScummVM", "Fatal error in ScummVM thread", e);
+ Log.e(ScummVM.LOG_TAG, "Fatal error in ScummVM thread", e);
new AlertDialog.Builder(ScummVMActivity.this)
.setTitle("Error")
.setMessage(e.toString())
@@ -174,8 +175,7 @@ public class ScummVMActivity extends Activity {
try {
scummvm.waitUntilRunning();
} catch (InterruptedException e) {
- Log.e(this.toString(),
- "Interrupted while waiting for ScummVM.initBackend", e);
+ Log.e(ScummVM.LOG_TAG, "Interrupted while waiting for ScummVM.initBackend", e);
finish();
}
@@ -190,7 +190,7 @@ public class ScummVMActivity extends Activity {
"--config=" + getFileStreamPath("scummvmrc").getPath(),
"--path=" + Environment.getExternalStorageDirectory().getPath(),
"--gui-theme=scummmodern",
- "--savepath=" + getDir("saves", 0).getPath(),
+ "--savepath=" + getDir("saves", 0).getPath()
};
int ret = scummvm.scummVMMain(args);
@@ -226,8 +226,7 @@ public class ScummVMActivity extends Activity {
try {
scummvm_thread.join(1000); // 1s timeout
} catch (InterruptedException e) {
- Log.i(this.toString(),
- "Error while joining ScummVM thread", e);
+ Log.i(ScummVM.LOG_TAG, "Error while joining ScummVM thread", e);
}
}
super.onStop();
diff --git a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
index 7280aac7d4..8811b1f3ae 100644
--- a/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
+++ b/backends/platform/android/org/inodes/gus/scummvm/Unpacker.java
@@ -34,7 +34,9 @@ import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
public class Unpacker extends Activity {
- private final static boolean PLUGINS_ENABLED = true;
+ protected final static String LOG_TAG = "ScummVM";
+ // TODO don't hardcode this
+ private final static boolean PLUGINS_ENABLED = false;
private final static String META_NEXT_ACTIVITY =
"org.inodes.gus.unpacker.nextActivity";
private ProgressBar mProgress;
@@ -88,11 +90,11 @@ public class Unpacker extends Activity {
origIntent.getType());
//intent.fillIn(getIntent(), 0);
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
- Log.i(this.toString(),
+ Log.i(LOG_TAG,
"Starting next activity with intent " + intent);
startActivity(intent);
} else {
- Log.w(this.toString(),
+ Log.w(LOG_TAG,
"Unable to extract a component name from " + nextActivity);
}
}
@@ -128,12 +130,12 @@ public class Unpacker extends Activity {
new ZipFile(context.getPackageResourcePath());
job = new UnpackJob(zipfile, new HashSet<String>(1));
} catch (PackageManager.NameNotFoundException e) {
- Log.e(this.toString(), "Package " + pkg +
+ Log.e(LOG_TAG, "Package " + pkg +
" not found", e);
continue;
} catch (IOException e) {
// FIXME: show some sort of GUI error dialog
- Log.e(this.toString(),
+ Log.e(LOG_TAG,
"Error opening ZIP for package " + pkg, e);
continue;
}
@@ -145,7 +147,7 @@ public class Unpacker extends Activity {
// Delete stale filenames from mUnpackDest
for (File file: mUnpackDest.listFiles()) {
if (!all_files.contains(file.getName())) {
- Log.i(this.toString(),
+ Log.i(LOG_TAG,
"Deleting stale cached file " + file);
file.delete();
}
@@ -177,14 +179,14 @@ public class Unpacker extends Activity {
progress += zipentry.getSize();
} else {
if (dest.exists())
- Log.d(this.toString(),
+ Log.d(LOG_TAG,
"Replacing " + dest.getPath() +
" old.mtime=" + dest.lastModified() +
" new.mtime=" + zipentry.getTime() +
" old.size=" + dest.length() +
" new.size=" + zipentry.getSize());
else
- Log.i(this.toString(),
+ Log.i(LOG_TAG,
"Extracting " + zipentry.getName() +
" from " + zipfile.getName() +
" to " + dest.getPath());
@@ -215,12 +217,12 @@ public class Unpacker extends Activity {
zipfile.close();
} catch (IOException e) {
// FIXME: show some sort of GUI error dialog
- Log.e(this.toString(), "Error unpacking plugin", e);
+ Log.e(LOG_TAG, "Error unpacking plugin", e);
}
}
if (progress != total_size)
- Log.d(this.toString(), "Ended with progress " + progress +
+ Log.d(LOG_TAG, "Ended with progress " + progress +
" != total size " + total_size);
setResult(RESULT_OK);
@@ -234,7 +236,7 @@ public class Unpacker extends Activity {
public void onReceive(Context context, Intent intent) {
if (!intent.getAction()
.equals(ScummVMApplication.ACTION_PLUGIN_QUERY)) {
- Log.e(this.toString(),
+ Log.e(LOG_TAG,
"Received unexpected action " + intent.getAction());
return;
}
@@ -323,7 +325,7 @@ public class Unpacker extends Activity {
startActivityForResult(market_intent,
REQUEST_MARKET);
} catch (ActivityNotFoundException e) {
- Log.e(this.toString(),
+ Log.e(LOG_TAG,
"Error starting market", e);
}
}
@@ -351,7 +353,7 @@ public class Unpacker extends Activity {
switch (requestCode) {
case REQUEST_MARKET:
if (resultCode != RESULT_OK)
- Log.w(this.toString(), "Market returned " + resultCode);
+ Log.w(LOG_TAG, "Market returned " + resultCode);
tryUnpack();
break;
}
@@ -363,7 +365,7 @@ public class Unpacker extends Activity {
.getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
return ai.metaData;
} catch (PackageManager.NameNotFoundException e) {
- Log.w(this.toString(), "Unable to find my own meta-data", e);
+ Log.w(LOG_TAG, "Unable to find my own meta-data", e);
return new Bundle();
}
}
diff --git a/backends/platform/android/video.cpp b/backends/platform/android/video.cpp
index 3275335d97..b9c3f9a1f8 100644
--- a/backends/platform/android/video.cpp
+++ b/backends/platform/android/video.cpp
@@ -23,6 +23,8 @@
*
*/
+#if defined(__ANDROID__)
+
#include "base/main.h"
#include "graphics/surface.h"
@@ -42,7 +44,7 @@
#define TEXSUBIMAGE_IS_EXPENSIVE 0
#undef LOG_TAG
-#define LOG_TAG "ScummVM-video"
+#define LOG_TAG "ScummVM"
#if 0
#define ENTER(args...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, args)
@@ -133,7 +135,14 @@ GLESTexture::~GLESTexture() {
}
void GLESTexture::reinitGL() {
+ glDeleteTextures(1, &_texture_name);
glGenTextures(1, &_texture_name);
+
+ // bypass allocBuffer() shortcut to reinit the texture properly
+ _texture_width = 0;
+ _texture_height = 0;
+
+ allocBuffer(_surface.w, _surface.h);
setDirty();
}
@@ -352,3 +361,6 @@ void GLESPaletteTexture::drawTexture(GLshort x, GLshort y, GLshort w, GLshort h)
GLESTexture::drawTexture(x, y, w, h);
}
+
+#endif
+
diff --git a/backends/platform/android/video.h b/backends/platform/android/video.h
index 2ca07e0afd..4b73508907 100644
--- a/backends/platform/android/video.h
+++ b/backends/platform/android/video.h
@@ -23,7 +23,7 @@
*
*/
-#if defined(ANDROID)
+#if defined(__ANDROID__)
#include <GLES/gl.h>