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 * 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, Then, make sure you have the ANDROID_SDK_PATH and ANDROID_NDK_PATH (pointing to
otherwise configure will fail to find the compiler. 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 * 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. 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 $ make
After the build finished, you need to copy librockbox.so to libs/armeabi/ (create that dir if it doesn't exit) After the build finished, you can create a Rockbox.apk in bin/
$ mkdir -p libs/armeabi $ make apk
$ cp librockbox.so libs/armeabi
For the other files (codecs, themes), you execute 'make zip'. Then you copy the You can install that on the device
zip to libs/armeabi, using the name libmisc.so. This is needed, since there's no $ $ANDROID_SDK_PATH/tools/adb install -r bin/Rockbox.apk
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.
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 [1]: http://developer.android.com/sdk/index.html
[2]: http://developer.android.com/sdk/ndk/index.html [2]: http://developer.android.com/sdk/ndk/index.html

View file

@ -7,10 +7,81 @@
# $Id$ # $Id$
# #
# pretty empty here: android port has no additional .c files to compile, .SECONDEXPANSION: # $$(JAVA_OBJ) is not populated until after this
# but a different rule for the final librockbox.so
.SECONDEXPANSION: # $$(OBJ) is not populated until after this .SECONDEXPANSION: # $$(OBJ) is not populated until after this
$(BUILDDIR)/$(BINARY): $$(OBJ) $(VOICESPEEXLIB) $(FIRMLIB) $(SKINLIB) $(BUILDDIR)/$(BINARY): $$(OBJ) $(VOICESPEEXLIB) $(FIRMLIB) $(SKINLIB)
$(call PRINTS,LD $(BINARY))$(CC) -o $@ $^ $(LDOPTS) $(GLOBAL_LDOPTS) $(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)