summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/.classpath1
-rw-r--r--android/android.make12
-rwxr-xr-xandroid/buildapk.sh19
-rw-r--r--android/project.properties2
-rw-r--r--android/src/org/rockbox/RockboxFramebuffer.java10
-rw-r--r--firmware/target/hosted/android/lcd-android.c64
-rwxr-xr-xtools/configure6
7 files changed, 61 insertions, 53 deletions
diff --git a/android/.classpath b/android/.classpath
index 0ca188f976..dec02b33c6 100644
--- a/android/.classpath
+++ b/android/.classpath
@@ -4,5 +4,6 @@
4 <classpathentry kind="src" path="src"/> 4 <classpathentry kind="src" path="src"/>
5 <classpathentry kind="src" path="gen"/> 5 <classpathentry kind="src" path="gen"/>
6 <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> 6 <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
7 <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
7 <classpathentry kind="output" path="bin/classes"/> 8 <classpathentry kind="output" path="bin/classes"/>
8</classpath> 9</classpath>
diff --git a/android/android.make b/android/android.make
index 6d10121952..4c93aa72cc 100644
--- a/android/android.make
+++ b/android/android.make
@@ -28,16 +28,17 @@ $(CPUFEAT_BUILD)/cpu-features.o: $(CPUFEAT)/cpu-features.c
28.PHONY: apk classes clean dex dirs libs jar 28.PHONY: apk classes clean dex dirs libs jar
29 29
30# API version 30# API version
31ANDROID_PLATFORM_VERSION=16 31ANDROID_PLATFORM_VERSION=19
32ANDROID_PLATFORM=$(ANDROID_SDK_PATH)/platforms/android-$(ANDROID_PLATFORM_VERSION) 32ANDROID_PLATFORM=$(ANDROID_SDK_PATH)/platforms/android-$(ANDROID_PLATFORM_VERSION)
33 33
34# android tools 34# android tools
35AAPT=$(ANDROID_SDK_PATH)/platform-tools/aapt 35BUILD_TOOLS_VERSION=19.0.3
36DX=$(ANDROID_SDK_PATH)/platform-tools/dx 36AAPT=$(ANDROID_SDK_PATH)/build-tools/$(BUILD_TOOLS_VERSION)/aapt
37APKBUILDER=$(ANDROID_SDK_PATH)/tools/apkbuilder 37DX=$(ANDROID_SDK_PATH)/build-tools/$(BUILD_TOOLS_VERSION)/dx
38ZIPALIGN=$(ANDROID_SDK_PATH)/tools/zipalign 38ZIPALIGN=$(ANDROID_SDK_PATH)/tools/zipalign
39KEYSTORE=$(HOME)/.android/debug.keystore 39KEYSTORE=$(HOME)/.android/debug.keystore
40ADB=$(ANDROID_SDK_PATH)/platform-tools/adb 40ADB=$(ANDROID_SDK_PATH)/platform-tools/adb
41BUILDAPK=$(ANDROID_DIR)/buildapk.sh
41 42
42CLASSPATH := $(BUILDDIR)/bin/classes 43CLASSPATH := $(BUILDDIR)/bin/classes
43 44
@@ -130,8 +131,7 @@ $(BINLIB_DIR)/lib%.so: $(RBCODEC_BLD)/codecs/%.codec
130libs: $(DIRS) $(LIBS) 131libs: $(DIRS) $(LIBS)
131 132
132$(TEMP_APK): $(AP_) $(LIBS) $(DEX) | $(DIRS) 133$(TEMP_APK): $(AP_) $(LIBS) $(DEX) | $(DIRS)
133 $(call PRINTS,APK $(subst $(BUILDDIR)/,,$@))$(APKBUILDER) $@ \ 134 $(call PRINTS,APK $(subst $(BUILDDIR)/,,$@))$(BUILDAPK) $(BUILDDIR) $(notdir $@) $(BUILD_TOOLS_VERSION)
134 -u -z $(AP_) -f $(DEX) -nf $(BUILDDIR)/libs
135 135
136$(KEYSTORE): 136$(KEYSTORE):
137 $(SILENT)mkdir -p $(HOME)/.android 137 $(SILENT)mkdir -p $(HOME)/.android
diff --git a/android/buildapk.sh b/android/buildapk.sh
new file mode 100755
index 0000000000..340438721a
--- /dev/null
+++ b/android/buildapk.sh
@@ -0,0 +1,19 @@
1#!/bin/sh
2
3BUILDDIR=$1
4APK=$2
5SDKV=$3
6
7[ -z $ANDROID_SDK_PATH ] && exit 1
8[ -z $BUILDDIR ] && exit 1
9[ -d $BUILDDIR ] || exit 1
10
11# need to cd into the bin dir and create a symlink to the libraries
12# so that aapt puts the libraries with the correct prefix into the apk
13cd $BUILDDIR/bin
14ln -nfs $BUILDDIR/libs lib
15cp resources.ap_ $APK
16$ANDROID_SDK_PATH/build-tools/$SDKV/aapt add $APK classes.dex > /dev/null
17$ANDROID_SDK_PATH/build-tools/$SDKV/aapt add $APK lib/*/* > /dev/null
18
19exit 0
diff --git a/android/project.properties b/android/project.properties
index 895c9ce2eb..a5578ba094 100644
--- a/android/project.properties
+++ b/android/project.properties
@@ -8,4 +8,4 @@
8# project structure. 8# project structure.
9 9
10# Project target. 10# Project target.
11target=android-16 11target=android-19
diff --git a/android/src/org/rockbox/RockboxFramebuffer.java b/android/src/org/rockbox/RockboxFramebuffer.java
index e1fb99f2a1..405a771274 100644
--- a/android/src/org/rockbox/RockboxFramebuffer.java
+++ b/android/src/org/rockbox/RockboxFramebuffer.java
@@ -57,14 +57,6 @@ public class RockboxFramebuffer extends SurfaceView
57 setEnabled(false); 57 setEnabled(false);
58 } 58 }
59 59
60 /* second stage init; called from Rockbox with information about the
61 * display framebuffer */
62 private void initialize(int lcd_width, int lcd_height)
63 {
64 btm = Bitmap.createBitmap(lcd_width, lcd_height, Bitmap.Config.RGB_565);
65 setEnabled(true);
66 }
67
68 private void update(ByteBuffer framebuffer) 60 private void update(ByteBuffer framebuffer)
69 { 61 {
70 SurfaceHolder holder = getHolder(); 62 SurfaceHolder holder = getHolder();
@@ -138,5 +130,7 @@ public class RockboxFramebuffer extends SurfaceView
138 public native void surfaceDestroyed(SurfaceHolder holder); 130 public native void surfaceDestroyed(SurfaceHolder holder);
139 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 131 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
140 { 132 {
133 btm = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
134 setEnabled(true);
141 } 135 }
142} 136}
diff --git a/firmware/target/hosted/android/lcd-android.c b/firmware/target/hosted/android/lcd-android.c
index 2b383741d1..a161406cc0 100644
--- a/firmware/target/hosted/android/lcd-android.c
+++ b/firmware/target/hosted/android/lcd-android.c
@@ -34,7 +34,6 @@ extern jobject RockboxService_instance;
34static jobject RockboxFramebuffer_instance; 34static jobject RockboxFramebuffer_instance;
35static jmethodID java_lcd_update; 35static jmethodID java_lcd_update;
36static jmethodID java_lcd_update_rect; 36static jmethodID java_lcd_update_rect;
37static jmethodID java_lcd_init;
38 37
39static jclass AndroidRect_class; 38static jclass AndroidRect_class;
40static jmethodID AndroidRect_constructor; 39static jmethodID AndroidRect_constructor;
@@ -42,6 +41,7 @@ static jmethodID AndroidRect_constructor;
42static int dpi; 41static int dpi;
43static int scroll_threshold; 42static int scroll_threshold;
44static bool display_on; 43static bool display_on;
44static bool connected;
45 45
46/* this might actually be called before lcd_init_device() or even main(), so 46/* this might actually be called before lcd_init_device() or even main(), so
47 * be sure to only access static storage initalized at library loading, 47 * be sure to only access static storage initalized at library loading,
@@ -49,38 +49,26 @@ static bool display_on;
49static void connect_with_java(JNIEnv* env, jobject fb_instance) 49static void connect_with_java(JNIEnv* env, jobject fb_instance)
50{ 50{
51 JNIEnv e = *env; 51 JNIEnv e = *env;
52 static bool have_class;
53 52
54 if (!have_class) 53 jclass fb_class = e->GetObjectClass(env, fb_instance);
55 { 54 /* cache update functions */
56 jclass fb_class = e->GetObjectClass(env, fb_instance); 55 java_lcd_update = e->GetMethodID(env, fb_class,
57 /* cache update functions */ 56 "update",
58 java_lcd_update = e->GetMethodID(env, fb_class, 57 "(Ljava/nio/ByteBuffer;)V");
59 "update", 58 java_lcd_update_rect = e->GetMethodID(env, fb_class,
60 "(Ljava/nio/ByteBuffer;)V"); 59 "update",
61 java_lcd_update_rect = e->GetMethodID(env, fb_class, 60 "(Ljava/nio/ByteBuffer;"
62 "update", 61 "Landroid/graphics/Rect;)V");
63 "(Ljava/nio/ByteBuffer;" 62 jmethodID get_dpi = e->GetMethodID(env, fb_class,
64 "Landroid/graphics/Rect;)V"); 63 "getDpi", "()I");
65 jmethodID get_dpi = e->GetMethodID(env, fb_class, 64 jmethodID thresh = e->GetMethodID(env, fb_class,
66 "getDpi", "()I"); 65 "getScrollThreshold", "()I");
67 jmethodID thresh = e->GetMethodID(env, fb_class, 66 /* these don't change with new instances so call them now */
68 "getScrollThreshold", "()I"); 67 dpi = e->CallIntMethod(env, fb_instance, get_dpi);
69 /* these don't change with new instances so call them now */ 68 scroll_threshold = e->CallIntMethod(env, fb_instance, thresh);
70 dpi = e->CallIntMethod(env, fb_instance, get_dpi); 69
71 scroll_threshold = e->CallIntMethod(env, fb_instance, thresh); 70 AndroidRect_constructor = e->GetMethodID(env, AndroidRect_class,
72 71 "<init>", "(IIII)V");
73 java_lcd_init = e->GetMethodID(env, fb_class,
74 "initialize", "(II)V");
75 AndroidRect_class = e->FindClass(env, "android/graphics/Rect");
76 AndroidRect_constructor = e->GetMethodID(env, AndroidRect_class,
77 "<init>", "(IIII)V");
78 have_class = true;
79 }
80
81 /* we need to setup parts for the java object every time */
82 (*env)->CallVoidMethod(env, fb_instance, java_lcd_init,
83 (jint)LCD_WIDTH, (jint)LCD_HEIGHT);
84} 72}
85 73
86/* 74/*
@@ -132,12 +120,18 @@ Java_org_rockbox_RockboxFramebuffer_surfaceCreated(JNIEnv *env, jobject this,
132 jobject surfaceholder) 120 jobject surfaceholder)
133{ 121{
134 (void)surfaceholder; 122 (void)surfaceholder;
123 jclass rect;
135 124
136 /* Update RockboxFramebuffer_instance */ 125 /* Update RockboxFramebuffer_instance */
137 RockboxFramebuffer_instance = (*env)->NewGlobalRef(env, this); 126 RockboxFramebuffer_instance = (*env)->NewGlobalRef(env, this);
138 127 rect = (*env)->FindClass(env, "android/graphics/Rect");
128 AndroidRect_class = (*env)->NewGlobalRef(env, rect);
139 /* possibly a new instance - reconnect */ 129 /* possibly a new instance - reconnect */
140 connect_with_java(env, this); 130 if (!connected)
131 {
132 connect_with_java(env, this);
133 connected = true;
134 }
141 display_on = true; 135 display_on = true;
142 136
143 /* need to wait for button_queue to be valid to post to */ 137 /* need to wait for button_queue to be valid to post to */
@@ -163,6 +157,8 @@ Java_org_rockbox_RockboxFramebuffer_surfaceDestroyed(JNIEnv *e, jobject this,
163 157
164 (*e)->DeleteGlobalRef(e, RockboxFramebuffer_instance); 158 (*e)->DeleteGlobalRef(e, RockboxFramebuffer_instance);
165 RockboxFramebuffer_instance = NULL; 159 RockboxFramebuffer_instance = NULL;
160 (*e)->DeleteGlobalRef(e, AndroidRect_class);
161 AndroidRect_class = NULL;
166} 162}
167 163
168bool lcd_active(void) 164bool lcd_active(void)
diff --git a/tools/configure b/tools/configure
index 73a8cae42d..5b3419d771 100755
--- a/tools/configure
+++ b/tools/configure
@@ -673,11 +673,11 @@ androidcc () {
673 LDOPTS="$LDOPTS -Wl,-soname,librockbox.so -shared -ldl -llog" 673 LDOPTS="$LDOPTS -Wl,-soname,librockbox.so -shared -ldl -llog"
674 GLOBAL_LDOPTS="-Wl,-z,defs -Wl,-z,noexecstack -shared" 674 GLOBAL_LDOPTS="-Wl,-z,defs -Wl,-z,noexecstack -shared"
675 ANDROID_ARCH=$1 # for android.make too 675 ANDROID_ARCH=$1 # for android.make too
676 gccchoice="4.6"
676 # arch dependant stuff 677 # arch dependant stuff
677 case $ANDROID_ARCH in 678 case $ANDROID_ARCH in
678 armeabi) 679 armeabi)
679 endian="little" 680 endian="little"
680 gccchoice="4.4.3"
681 gcctarget="arm-linux-androideabi-" 681 gcctarget="arm-linux-androideabi-"
682 # sigaltstack is not available in pre-android-9, however asm 682 # sigaltstack is not available in pre-android-9, however asm
683 # threads work fine so far 683 # threads work fine so far
@@ -688,7 +688,6 @@ androidcc () {
688 ;; 688 ;;
689 mips) 689 mips)
690 endian="little" 690 endian="little"
691 gccchoice="4.4.3"
692 gcctarget="mipsel-linux-android-" 691 gcctarget="mipsel-linux-android-"
693 thread_support="HAVE_SIGALTSTACK_THREADS" 692 thread_support="HAVE_SIGALTSTACK_THREADS"
694 GCCOPTS="$GCCOPTS -march=mips32 -mtune=r4600 -mno-mips16 -mno-long-calls -fomit-frame-pointer \ 693 GCCOPTS="$GCCOPTS -march=mips32 -mtune=r4600 -mno-mips16 -mno-long-calls -fomit-frame-pointer \
@@ -696,8 +695,7 @@ androidcc () {
696 LDOPTS="$LDOPTS --sysroot=$ANDROID_NDK_PATH/platforms/android-14/arch-mips" 695 LDOPTS="$LDOPTS --sysroot=$ANDROID_NDK_PATH/platforms/android-14/arch-mips"
697 ;; 696 ;;
698 x86) 697 x86)
699 endian=little 698 endian="little"
700 gccchoice="4.4.3"
701 gcctarget="i686-linux-android-" 699 gcctarget="i686-linux-android-"
702 gccdir=x86-$gccchoice 700 gccdir=x86-$gccchoice
703 thread_support="HAVE_SIGALTSTACK_THREADS" 701 thread_support="HAVE_SIGALTSTACK_THREADS"