From fbdb8b406e79d282ed0c5b7fde723fcfbde43d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20H=C3=A4dicke?= Date: Thu, 20 Jul 2017 01:05:59 +0200 Subject: [PATCH] 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) --- Makefile.am | 69 ++++++++++++++++++++++++++++++++++------------------- NEWS | 2 ++ 2 files changed, 47 insertions(+), 24 deletions(-) diff --git a/Makefile.am b/Makefile.am index 592e75a77..c0ccec411 100644 --- a/Makefile.am +++ b/Makefile.am @@ -285,7 +285,7 @@ libmain_a_CPPFLAGS = $(AM_CPPFLAGS) -Iandroid/build/include 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: rm -rf android/build @@ -298,25 +298,49 @@ ANDROID_SDK_PLATFORM = android-17 ANDROID_BUILD_TOOLS_DIR = $(ANDROID_SDK)/build-tools/$(ANDROID_SDK_BUILD_TOOLS_VERSION) 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 -android/build/build.xml: android/AndroidManifest.xml - rm -rf android/build - 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 - ln -s $(abs_srcdir)/android/src android/build/src/org/musicpd - 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) +ANDROID_XML_RES := $(wildcard $(srcdir)/android/res/*/*.xml) +ANDROID_XML_RES_COPIES := $(patsubst $(srcdir)/android/%,android/build/%,$(ANDROID_XML_RES)) -android/build/bin/classes/org/musicpd/Bridge.class: android/src/Bridge.java android/build/build.xml android/build/res/drawable/icon.png - cd android/build && ant compile-jni-classes +JAVA_SOURCE_NAMES = Bridge.java Loader.java Main.java +JAVA_SOURCES = $(addprefix $(srcdir)/android/src/,$(JAVA_SOURCE_NAMES)) -android/build/include/org_musicpd_Bridge.h: android/build/bin/classes/org/musicpd/Bridge.class - javah -classpath $(ANDROID_SDK_PLATFORM_DIR)/android.jar:android/build/bin/classes -d $(@D) org.musicpd.Bridge +JAVA_CLASSFILES_DIR = android/build/classes + +$(ANDROID_XML_RES_COPIES): $(ANDROID_XML_RES) + @$(MKDIR_P) $(dir $@) + cp $(patsubst android/build/%,$(srcdir)/android/%,$@) $@ + +android/build/resources.apk: $(ANDROID_XML_RES_COPIES) android/build/res/drawable/icon.png + @$(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 + +# R.java is generated by aapt, when resources.apk is generated +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 -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) rm -f $@ $(STRIP) -o $@ $< @@ -325,21 +349,18 @@ android/build/res/drawable/icon.png: mpd.svg mkdir -p $(@D) rsvg-convert --width=48 --height=48 $< -o $@ -APK_DEPS = android/build/res/drawable/icon.png \ - android/build/libs/armeabi-v7a/libmpd.so \ - $(wildcard $(srcdir)/android/src/*.java) \ - android/build/build.xml +.DELETE_ON_ERROR: android/build/unsigned.apk +android/build/unsigned.apk: android/build/classes.dex android/build/resources.apk android/build/lib/armeabi-v7a/libmpd.so + cp android/build/resources.apk $@ + 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/$(APK_NAME)-debug.apk: android/build/unsigned.apk + jarsigner -keystore $(HOME)/.android/debug.keystore -storepass android -signedjar $@ $< androiddebugkey -android/build/bin/$(APK_NAME)-release-unsigned.apk: $(APK_DEPS) - cd android/build && ant nodeps release - -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) -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 $< $@ endif diff --git a/NEWS b/NEWS index 3788d63a5..a6532fe62 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ ver 0.20.15 (not yet released) * state file - make mount point restore errors non-fatal - fix crash when restoring mounts with incompatible database plugin +* Android + - build without Ant ver 0.20.14 (2018/01/01) * database