Commit fbdb8b40 authored by Felix Hädicke's avatar Felix Hädicke Committed by Max Kellermann

Makefile.am: build Android APK package without Ant

In current Android SDK releases, Ant support was removed. Move the necessary build steps from the former Ant build system to our Makefile, and call the required build tools from the Android SDK (aapt and dx), Java SDK (javac) and Info-ZIP (zip) directly. [mk: copied from Felix's commit e52b906dba971a1173f9e8f83d32b52ee9f89af3 in the XCSoar project)
parent 85d0bbd9
...@@ -285,7 +285,7 @@ libmain_a_CPPFLAGS = $(AM_CPPFLAGS) -Iandroid/build/include ...@@ -285,7 +285,7 @@ libmain_a_CPPFLAGS = $(AM_CPPFLAGS) -Iandroid/build/include
src_mpd_LDADD += libandroid.a libjava.a src_mpd_LDADD += libandroid.a libjava.a
all-local: android/build/bin/$(APK_NAME)-debug.apk all-local: android/build/$(APK_NAME)-debug.apk
clean-local: clean-local:
rm -rf android/build rm -rf android/build
...@@ -298,25 +298,49 @@ ANDROID_SDK_PLATFORM = android-17 ...@@ -298,25 +298,49 @@ ANDROID_SDK_PLATFORM = android-17
ANDROID_BUILD_TOOLS_DIR = $(ANDROID_SDK)/build-tools/$(ANDROID_SDK_BUILD_TOOLS_VERSION) ANDROID_BUILD_TOOLS_DIR = $(ANDROID_SDK)/build-tools/$(ANDROID_SDK_BUILD_TOOLS_VERSION)
ANDROID_SDK_PLATFORM_DIR = $(ANDROID_SDK)/platforms/$(ANDROID_SDK_PLATFORM) ANDROID_SDK_PLATFORM_DIR = $(ANDROID_SDK)/platforms/$(ANDROID_SDK_PLATFORM)
JAVAC = javac
AAPT = $(ANDROID_BUILD_TOOLS_DIR)/aapt
DX = $(ANDROID_BUILD_TOOLS_DIR)/dx
ZIPALIGN = $(ANDROID_BUILD_TOOLS_DIR)/zipalign ZIPALIGN = $(ANDROID_BUILD_TOOLS_DIR)/zipalign
android/build/build.xml: android/AndroidManifest.xml ANDROID_XML_RES := $(wildcard $(srcdir)/android/res/*/*.xml)
rm -rf android/build ANDROID_XML_RES_COPIES := $(patsubst $(srcdir)/android/%,android/build/%,$(ANDROID_XML_RES))
mkdir -p android/build/include android/build/res android/build/src/org
ln -s $(abs_srcdir)/android/AndroidManifest.xml $(abs_srcdir)/android/custom_rules.xml android/build JAVA_SOURCE_NAMES = Bridge.java Loader.java Main.java
ln -s $(abs_srcdir)/android/src android/build/src/org/musicpd JAVA_SOURCES = $(addprefix $(srcdir)/android/src/,$(JAVA_SOURCE_NAMES))
ln -s $(abs_srcdir)/android/res/values $(abs_srcdir)/android/res/layout android/build/res
$(ANDROID_SDK)/tools/android update project --path android/build --target $(ANDROID_SDK_PLATFORM) --name $(APK_NAME) JAVA_CLASSFILES_DIR = android/build/classes
$(ANDROID_XML_RES_COPIES): $(ANDROID_XML_RES)
@$(MKDIR_P) $(dir $@)
cp $(patsubst android/build/%,$(srcdir)/android/%,$@) $@
android/build/bin/classes/org/musicpd/Bridge.class: android/src/Bridge.java android/build/build.xml android/build/res/drawable/icon.png android/build/resources.apk: $(ANDROID_XML_RES_COPIES) android/build/res/drawable/icon.png
cd android/build && ant compile-jni-classes @$(MKDIR_P) android/build/gen
$(AAPT) package -f -m --auto-add-overlay \
--custom-package org.musicpd \
-M $(srcdir)/android/AndroidManifest.xml \
-S android/build/res \
-J android/build/gen \
-I $(ANDROID_SDK_PLATFORM_DIR)/android.jar \
-F android/build/resources.apk
android/build/include/org_musicpd_Bridge.h: android/build/bin/classes/org/musicpd/Bridge.class # R.java is generated by aapt, when resources.apk is generated
javah -classpath $(ANDROID_SDK_PLATFORM_DIR)/android.jar:android/build/bin/classes -d $(@D) org.musicpd.Bridge android/build/gen/org/musicpd/R.java: android/build/resources.apk
android/build/classes.dex: $(JAVA_SOURCES) android/build/gen/org/musicpd/R.java
@$(MKDIR_P) $(JAVA_CLASSFILES_DIR)
$(JAVAC) -source 1.5 -target 1.5 -Xlint:-options \
-cp $(ANDROID_SDK_PLATFORM_DIR)/android.jar:$(JAVA_CLASSFILES_DIR) \
-d $(JAVA_CLASSFILES_DIR) $^
$(DX) --dex --output $@ $(JAVA_CLASSFILES_DIR)
android/build/include/org_musicpd_Bridge.h: android/build/classes.dex
javah -classpath $(ANDROID_SDK_PLATFORM_DIR)/android.jar:$(JAVA_CLASSFILES_DIR) -d $(@D) org.musicpd.Bridge
BUILT_SOURCES = android/build/include/org_musicpd_Bridge.h BUILT_SOURCES = android/build/include/org_musicpd_Bridge.h
android/build/libs/armeabi-v7a/libmpd.so: libmpd.so android/build/build.xml android/build/lib/armeabi-v7a/libmpd.so: libmpd.so
mkdir -p $(@D) mkdir -p $(@D)
rm -f $@ rm -f $@
$(STRIP) -o $@ $< $(STRIP) -o $@ $<
...@@ -325,21 +349,18 @@ android/build/res/drawable/icon.png: mpd.svg ...@@ -325,21 +349,18 @@ android/build/res/drawable/icon.png: mpd.svg
mkdir -p $(@D) mkdir -p $(@D)
rsvg-convert --width=48 --height=48 $< -o $@ rsvg-convert --width=48 --height=48 $< -o $@
APK_DEPS = android/build/res/drawable/icon.png \ .DELETE_ON_ERROR: android/build/unsigned.apk
android/build/libs/armeabi-v7a/libmpd.so \ android/build/unsigned.apk: android/build/classes.dex android/build/resources.apk android/build/lib/armeabi-v7a/libmpd.so
$(wildcard $(srcdir)/android/src/*.java) \ cp android/build/resources.apk $@
android/build/build.xml cd $(dir $@) && zip -q -r $(notdir $@) classes.dex lib
android/build/bin/$(APK_NAME)-debug.apk: $(APK_DEPS)
cd android/build && ant nodeps debug
android/build/bin/$(APK_NAME)-release-unsigned.apk: $(APK_DEPS) android/build/$(APK_NAME)-debug.apk: android/build/unsigned.apk
cd android/build && ant nodeps release jarsigner -keystore $(HOME)/.android/debug.keystore -storepass android -signedjar $@ $< androiddebugkey
android/build/bin/$(APK_NAME)-release-unaligned.apk: android/build/bin/$(APK_NAME)-release-unsigned.apk android/build/$(APK_NAME)-release-unaligned.apk: android/build/unsigned.apk
jarsigner -digestalg SHA1 -sigalg MD5withRSA -storepass:env ANDROID_KEYSTORE_PASS -keystore $(ANDROID_KEYSTORE) -signedjar $@ $< $(ANDROID_KEY_ALIAS) jarsigner -digestalg SHA1 -sigalg MD5withRSA -storepass:env ANDROID_KEYSTORE_PASS -keystore $(ANDROID_KEYSTORE) -signedjar $@ $< $(ANDROID_KEY_ALIAS)
android/build/bin/$(APK_NAME).apk: android/build/bin/$(APK_NAME)-release-unaligned.apk android/build/$(APK_NAME).apk: android/build/$(APK_NAME)-release-unaligned.apk
$(ZIPALIGN) -f 4 $< $@ $(ZIPALIGN) -f 4 $< $@
endif endif
......
...@@ -4,6 +4,8 @@ ver 0.20.15 (not yet released) ...@@ -4,6 +4,8 @@ ver 0.20.15 (not yet released)
* state file * state file
- make mount point restore errors non-fatal - make mount point restore errors non-fatal
- fix crash when restoring mounts with incompatible database plugin - fix crash when restoring mounts with incompatible database plugin
* Android
- build without Ant
ver 0.20.14 (2018/01/01) ver 0.20.14 (2018/01/01)
* database * database
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment