Extend android.make so that it can generate a debug signed apk.

'make && make apk && adb install -r bin/Rockbox.apk' should work now.

You should now be able to develop without eclipse.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27980 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2010-09-02 03:40:02 +00:00
parent bd7af68ccd
commit 4e982d30a1
2 changed files with 98 additions and 25 deletions

View file

@ -3,39 +3,41 @@ application for android.
* Prerequisites
Download and install the Android SDK[1] and NDK[2]. After you extracted the SDK, you need to run <sdk-dir>/tools/android in order to install the actual platform sdk from the available packages tab (SDK Platform Android 1.5 or above should work). In the virtual devices tab you can also setup a emulator.
Download and install the Android SDK[1] and NDK[2].
After you extracted the SDK, you need to run <sdk-dir>/tools/android in order to
install the actual platform sdk from the available packages tab (SDK Platform
Android 1.5 or above should work).
In the virtual devices tab you can also setup a emulator.
Then, make sure you have the ANDROID_NDK_PATH (pointing to the NDK's root directory) environment variable set up,
otherwise configure will fail to find the compiler.
Then, make sure you have the ANDROID_SDK_PATH and ANDROID_NDK_PATH (pointing to
the each's root directory) environment variables set up, otherwise configure will fail to find the compiler and
compiling the java files will fail.
* Build instructions
Until there's a script which does all the work the procedure is documented here.
Use this as your build folder, using '../tools/configure' etc.
$ ../tools/configure
$ ../tools/configure # type 200, then chose A for android and your screen resolution
$ make
After the build finished, you need to copy librockbox.so to libs/armeabi/ (create that dir if it doesn't exit)
$ mkdir -p libs/armeabi
$ cp librockbox.so libs/armeabi
After the build finished, you can create a Rockbox.apk in bin/
$ make apk
For the other files (codecs, themes), you execute 'make zip'. Then you copy the
zip to libs/armeabi, using the name libmisc.so. This is needed, since there's no
way to bundle stuff into apk's and have access to them from native code other
than pretending it was a library.
$ make zip
$ cp rockbox.zip libs/armeabi/libmisc.so
rockbox.zip..err, libmisc.so will be unpacked at runtime.
To finish, you can follow this guide [3], or use eclipse. Simply install eclipse
and the android plugins, then import this folder as a new Android project and run it.
See [4] for a guide on how to set up eclipse for android development.
You can install that on the device
$ $ANDROID_SDK_PATH/tools/adb install -r bin/Rockbox.apk
NOTE: make apk needs creates a debug signed .apk, not suitable for distribution.
It expects that this key already exists.
You should be able to generate it with "keytool" using the following options:
* Keystore name: "debug.keystore"
* Keystore password: "android"
* Key alias: "androiddebugkey"
* Key password: "android"
* CN: "CN=Android Debug,O=Android,C=US"
* validity: 365 days
Google docs mention the SDK tools can generate it as well, but I haven't found how yet.
[1]: http://developer.android.com/sdk/index.html
[2]: http://developer.android.com/sdk/ndk/index.html

View file

@ -7,10 +7,81 @@
# $Id$
#
# pretty empty here: android port has no additional .c files to compile,
# but a different rule for the final librockbox.so
.SECONDEXPANSION: # $$(JAVA_OBJ) is not populated until after this
.SECONDEXPANSION: # $$(OBJ) is not populated until after this
$(BUILDDIR)/$(BINARY): $$(OBJ) $(VOICESPEEXLIB) $(FIRMLIB) $(SKINLIB)
$(call PRINTS,LD $(BINARY))$(CC) -o $@ $^ $(LDOPTS) $(GLOBAL_LDOPTS)
PACKAGE=org.rockbox
PACKAGE_PATH=org/rockbox
ANDROID_DIR=$(ROOTDIR)/android
java2class = $(addsuffix .class,$(basename $(subst $(ANDROID_DIR),$(BUILDDIR),$(1))))
ANDROID_PLATFORM_VERSION=8
ANDROID_PLATFORM=$(ANDROID_SDK_PATH)/platforms/android-$(ANDROID_PLATFORM_VERSION)
AAPT=$(ANDROID_PLATFORM)/tools/aapt
DX=$(ANDROID_PLATFORM)/tools/dx
APKBUILDER=$(ANDROID_SDK_PATH)/tools/apkbuilder
ZIPALIGN=$(ANDROID_SDK_PATH)/tools/zipalign
MANIFEST := $(ANDROID_DIR)/AndroidManifest.xml
R_JAVA := $(BUILDDIR)/gen/$(PACKAGE_PATH)/R.java
R_OBJ := $(BUILDDIR)/bin/$(PACKAGE_PATH)/R.class
JAVA_SRC := $(wildcard $(ANDROID_DIR)/src/$(PACKAGE_PATH)/*.java)
JAVA_OBJ := $(call java2class,$(subst /src/,/bin/,$(JAVA_SRC)))
LIBS := $(BUILDDIR)/libs/armeabi/$(BINARY) $(BUILDDIR)/libs/armeabi/libmisc.so
TEMP_APK := $(BUILDDIR)/bin/_Rockbox.apk
APK := $(BUILDDIR)/bin/Rockbox.apk
$(R_JAVA): $(MANIFEST)
$(call PRINTS,AAPT $(subst $(BUILDDIR)/,,$<))$(AAPT) package -f -m -J $(BUILDDIR)/gen -M $(MANIFEST) -S $(ANDROID_DIR)/res -I $(ANDROID_PLATFORM)/android.jar -F $(BUILDDIR)/bin/resources.ap_
$(BUILDDIR)/bin/$(PACKAGE_PATH)/R.class: $(R_JAVA)
$(call PRINTS,JAVAC $(subst $(BUILDDIR)/,,$<))javac -d $(BUILDDIR)/bin \
-classpath $(ANDROID_PLATFORM)/android.jar:$(BUILDDIR)/bin -sourcepath \
$(ANDROID_DIR)/gen:$(ANDROID_DIR)/src $<
$(BUILDDIR)/bin/$(PACKAGE_PATH)/%.class: $(ANDROID_DIR)/src/$(PACKAGE_PATH)/%.java
$(call PRINTS,JAVAC $(subst $(BUILDDIR)/,,$<))javac -d $(BUILDDIR)/bin \
-classpath $(ANDROID_PLATFORM)/android.jar:$(BUILDDIR)/bin -sourcepath \
$(ANDROID_DIR)/gen:$(ANDROID_DIR)/src $<
classes: $(R_OBJ) $(JAVA_OBJ)
$(BUILDDIR)/bin/classes.dex: classes
$(call PRINTS,DX $(subst $(BUILDDIR)/,,$@))$(DX) --dex --output=$@ $(BUILDDIR)/bin
dex: $(BUILDDIR)/bin/classes.dex
$(BUILDDIR)/libs/armeabi/$(BINARY): $(BUILDDIR)/$(BINARY)
$(call PRINTS,CP $(BINARY))cp $^ $@
$(BUILDDIR)/_rockbox.zip: zip
$(SILENT)mv $(BUILDDIR)/rockbox.zip $@
$(BUILDDIR)/libs/armeabi/libmisc.so: $(BUILDDIR)/_rockbox.zip
$(call PRINTS,CP rockbox.zip)cp $^ $@
libs: $(LIBS)
$(TEMP_APK): libs dex
$(call PRINTS,APK $(subst $(BUILDDIR)/,,$@))$(APKBUILDER) $@ \
-u -z $(BUILDDIR)/bin/resources.ap_ -f $(BUILDDIR)/bin/classes.dex -nf $(BUILDDIR)/libs
$(APK): $(TEMP_APK)
$(SILENT)rm -f $@
$(call PRINTS,SIGN $(subst $(BUILDDIR)/,,$@))jarsigner \
-keystore "$(HOME)/.android/debug.keystore" -storepass "android" \
-keypass "android" -signedjar bin/__Rockbox.apk $^ "androiddebugkey"
$(SILENT)$(ZIPALIGN) -v 4 bin/__Rockbox.apk $@ > /dev/null
apk: $(APK)