diff options
-rw-r--r-- | android/.classpath | 1 | ||||
-rw-r--r-- | android/android.make | 12 | ||||
-rwxr-xr-x | android/buildapk.sh | 19 | ||||
-rw-r--r-- | android/project.properties | 2 | ||||
-rw-r--r-- | android/src/org/rockbox/RockboxFramebuffer.java | 10 | ||||
-rw-r--r-- | firmware/target/hosted/android/lcd-android.c | 64 | ||||
-rwxr-xr-x | tools/configure | 6 |
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 |
31 | ANDROID_PLATFORM_VERSION=16 | 31 | ANDROID_PLATFORM_VERSION=19 |
32 | ANDROID_PLATFORM=$(ANDROID_SDK_PATH)/platforms/android-$(ANDROID_PLATFORM_VERSION) | 32 | ANDROID_PLATFORM=$(ANDROID_SDK_PATH)/platforms/android-$(ANDROID_PLATFORM_VERSION) |
33 | 33 | ||
34 | # android tools | 34 | # android tools |
35 | AAPT=$(ANDROID_SDK_PATH)/platform-tools/aapt | 35 | BUILD_TOOLS_VERSION=19.0.3 |
36 | DX=$(ANDROID_SDK_PATH)/platform-tools/dx | 36 | AAPT=$(ANDROID_SDK_PATH)/build-tools/$(BUILD_TOOLS_VERSION)/aapt |
37 | APKBUILDER=$(ANDROID_SDK_PATH)/tools/apkbuilder | 37 | DX=$(ANDROID_SDK_PATH)/build-tools/$(BUILD_TOOLS_VERSION)/dx |
38 | ZIPALIGN=$(ANDROID_SDK_PATH)/tools/zipalign | 38 | ZIPALIGN=$(ANDROID_SDK_PATH)/tools/zipalign |
39 | KEYSTORE=$(HOME)/.android/debug.keystore | 39 | KEYSTORE=$(HOME)/.android/debug.keystore |
40 | ADB=$(ANDROID_SDK_PATH)/platform-tools/adb | 40 | ADB=$(ANDROID_SDK_PATH)/platform-tools/adb |
41 | BUILDAPK=$(ANDROID_DIR)/buildapk.sh | ||
41 | 42 | ||
42 | CLASSPATH := $(BUILDDIR)/bin/classes | 43 | CLASSPATH := $(BUILDDIR)/bin/classes |
43 | 44 | ||
@@ -130,8 +131,7 @@ $(BINLIB_DIR)/lib%.so: $(RBCODEC_BLD)/codecs/%.codec | |||
130 | libs: $(DIRS) $(LIBS) | 131 | libs: $(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 | |||
3 | BUILDDIR=$1 | ||
4 | APK=$2 | ||
5 | SDKV=$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 | ||
13 | cd $BUILDDIR/bin | ||
14 | ln -nfs $BUILDDIR/libs lib | ||
15 | cp 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 | |||
19 | exit 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. |
11 | target=android-16 | 11 | target=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; | |||
34 | static jobject RockboxFramebuffer_instance; | 34 | static jobject RockboxFramebuffer_instance; |
35 | static jmethodID java_lcd_update; | 35 | static jmethodID java_lcd_update; |
36 | static jmethodID java_lcd_update_rect; | 36 | static jmethodID java_lcd_update_rect; |
37 | static jmethodID java_lcd_init; | ||
38 | 37 | ||
39 | static jclass AndroidRect_class; | 38 | static jclass AndroidRect_class; |
40 | static jmethodID AndroidRect_constructor; | 39 | static jmethodID AndroidRect_constructor; |
@@ -42,6 +41,7 @@ static jmethodID AndroidRect_constructor; | |||
42 | static int dpi; | 41 | static int dpi; |
43 | static int scroll_threshold; | 42 | static int scroll_threshold; |
44 | static bool display_on; | 43 | static bool display_on; |
44 | static 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; | |||
49 | static void connect_with_java(JNIEnv* env, jobject fb_instance) | 49 | static 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 | ||
168 | bool lcd_active(void) | 164 | bool 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" |