From bd4a651fbf8e95fd3f5428251a2ff975db83a165 Mon Sep 17 00:00:00 2001 From: Benoit Pierre Date: Thu, 8 Aug 2024 22:07:52 +0200 Subject: [PATCH] make: improve android update - out-of-tree luajit-launcher build: no leftovers after `make clean` - use the luajit library compiled by base: no point wasting time building a second (different, possibly incompatible) version --- Makefile | 3 -- base | 2 +- kodev | 2 +- make/android.mk | 71 +++++++++++++++++++++----------- platform/android/luajit-launcher | 2 +- 5 files changed, 49 insertions(+), 31 deletions(-) diff --git a/Makefile b/Makefile index 2506c757c..a25acb9c5 100644 --- a/Makefile +++ b/Makefile @@ -167,9 +167,6 @@ endif clean: base-clean rm -rf $(INSTALL_DIR) -ifeq ($(TARGET), android) - $(MAKE) -C $(CURDIR)/platform/android/luajit-launcher clean -endif distclean: clean base-distclean $(MAKE) -C doc clean diff --git a/base b/base index 720df9dfc..3c3f18f27 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 720df9dfc497bc1599c293a3149ce82359253c0c +Subproject commit 3c3f18f27adcb503e3446aca27f1bd220551aee5 diff --git a/kodev b/kodev index ce665a627..9d3fb2233 100755 --- a/kodev +++ b/kodev @@ -21,7 +21,7 @@ fi ANDROID_ARCH="${ANDROID_ARCH:-arm}" # Default android flavor -ANDROID_FLAVOR="${ANDROID_FLAVOR:-rocks}" +ANDROID_FLAVOR="${ANDROID_FLAVOR:-Rocks}" export ANDROID_FLAVOR function assert_ret_zero() { diff --git a/make/android.mk b/make/android.mk index a0844e82c..2e0e487fc 100644 --- a/make/android.mk +++ b/make/android.mk @@ -1,11 +1,18 @@ # Use the git commit count as the (integer) Android version code ANDROID_VERSION ?= $(shell git rev-list --count HEAD) ANDROID_NAME ?= $(VERSION) +ANDROID_APK = koreader-android-$(ANDROID_ARCH)$(KODEDUG_SUFFIX)-$(VERSION).apk ANDROID_DIR = $(PLATFORM_DIR)/android ANDROID_LAUNCHER_DIR = $(ANDROID_DIR)/luajit-launcher -ANDROID_ASSETS = $(ANDROID_LAUNCHER_DIR)/assets/module -ANDROID_LIBS_ROOT = $(ANDROID_LAUNCHER_DIR)/libs -ANDROID_LIBS_ABI = $(ANDROID_LIBS_ROOT)/$(ANDROID_ABI) +ANDROID_LAUNCHER_BUILD = $(INSTALL_DIR)/luajit-launcher +ANDROID_ASSETS = $(ANDROID_LAUNCHER_BUILD)/assets +ANDROID_LIBS = $(ANDROID_LAUNCHER_BUILD)/libs/$(ANDROID_ABI) +ANDROID_FLAVOR ?= Rocks + +ifneq (,$(CI)) + GRADLE_FLAGS ?= --console=plain --no-daemon -x lintVitalArmRocksRelease +endif +GRADLE_FLAGS += $(PARALLEL_JOBS:%=--max-workers=%) ifeq ($(ANDROID_ARCH), arm64) ANDROID_ABI ?= arm64-v8a @@ -24,22 +31,24 @@ androiddev: update update: all # Note: do not remove the module directory so there's no need # for `mk7z.sh` to always recreate `assets.7z` from scratch. - rm -rfv $(ANDROID_LIBS_ROOT) - mkdir -p $(ANDROID_ASSETS) $(ANDROID_LIBS_ABI) + rm -rfv $(ANDROID_LIBS) # APK version - echo $(VERSION) > $(ANDROID_ASSETS)/version.txt - # shared libraries are stored as raw assets - cp -pLR $(INSTALL_DIR)/koreader/libs $(ANDROID_LAUNCHER_DIR)/assets - # in runtime luajit-launcher's libluajit.so will be loaded - rm -vf $(ANDROID_LAUNCHER_DIR)/assets/libs/libluajit.so + mkdir -p $(ANDROID_ASSETS)/module $(ANDROID_LIBS) + # We need strip the version, or versioned + # libraries won't be included in the APK. + for src in $(INSTALL_DIR)/koreader/libs/*; do \ + dst="$${src##*/}"; \ + dst="$${dst%%.[0-9]*}"; \ + llvm-strip --strip-unneeded "$$src" -o $(ANDROID_LIBS)/"$$dst"; \ + done # binaries are stored as shared libraries to prevent W^X exception on Android 10+ # https://developer.android.com/about/versions/10/behavior-changes-10#execute-permission - cp -pLR $(INSTALL_DIR)/koreader/sdcv $(ANDROID_LIBS_ABI)/libsdcv.so - echo "sdcv libsdcv.so" > $(ANDROID_ASSETS)/map.txt + llvm-strip --strip-unneeded $(INSTALL_DIR)/koreader/sdcv -o $(ANDROID_LIBS)/libsdcv.so + printf '%s\n' 'libs .' 'sdcv libsdcv.so' >$(ANDROID_ASSETS)/module/map.txt # assets are compressed manually and stored inside the APK. cd $(INSTALL_DIR)/koreader && \ ./tools/mk7z.sh \ - ../../$(ANDROID_ASSETS)/koreader.7z \ + $(abspath $(ANDROID_ASSETS)/module/koreader.7z) \ "$$(git show -s --format='%ci')" \ -m0=lzma2 -mx=9 \ -- . \ @@ -65,17 +74,29 @@ update: all '-xr!NOTICE' \ '-xr!README.md' \ ; - # make the android APK - # Note: filter out the `--debug=…` make flag - # so the old crummy version provided by the - # NDK does not blow a gasket. - MAKEFLAGS='$(filter-out --debug=%,$(MAKEFLAGS))' \ - $(MAKE) -C $(ANDROID_LAUNCHER_DIR) $(if $(KODEBUG), debug, release) \ - ANDROID_APPNAME=KOReader \ - ANDROID_VERSION=$(ANDROID_VERSION) \ - ANDROID_NAME=$(ANDROID_NAME) \ - ANDROID_FLAVOR=$(ANDROID_FLAVOR) - cp $(ANDROID_LAUNCHER_DIR)/bin/NativeActivity.apk \ - koreader-android-$(ANDROID_ARCH)$(KODEDUG_SUFFIX)-$(VERSION).apk + # Note: we filter out the `--debug=…` make flag so the old + # crummy version provided by the NDK does not blow a gasket. + env \ + ANDROID_ARCH='$(ANDROID_ARCH)' \ + ANDROID_ABI='$(ANDROID_ABI)' \ + ANDROID_FULL_ARCH='$(ANDROID_ABI)' \ + LUAJIT_INC='$(abspath $(STAGING_DIR)/include/luajit-2.1)' \ + LUAJIT_LIB='$(abspath $(ANDROID_LIBS)/libluajit.so)' \ + MAKEFLAGS='$(filter-out --debug=%,$(MAKEFLAGS))' \ + NDK=$(ANDROID_NDK_ROOT) \ + SDK=$(ANDROID_SDK_ROOT) \ + $(ANDROID_LAUNCHER_DIR)/gradlew \ + --project-dir='$(abspath $(ANDROID_LAUNCHER_DIR))' \ + --project-cache-dir='$(abspath $(ANDROID_LAUNCHER_BUILD)/gradle)' \ + -PassetsPath='$(abspath $(ANDROID_ASSETS))' \ + -PbuildDir='$(abspath $(ANDROID_LAUNCHER_BUILD))' \ + -PlibsPath='$(abspath $(dir $(ANDROID_LIBS)))' \ + -PndkCustomPath='$(ANDROID_NDK_ROOT)' \ + -PprojectName='KOReader' \ + -PversCode='$(ANDROID_VERSION)' \ + -PversName='$(ANDROID_NAME)' \ + $(GRADLE_FLAGS) \ + 'app:assemble$(ANDROID_ARCH)$(ANDROID_FLAVOR)$(if $(KODEBUG),Debug,Release)' + cp $(ANDROID_LAUNCHER_BUILD)/outputs/apk/$(ANDROID_ARCH)$(ANDROID_FLAVOR)/$(if $(KODEBUG),debug,release)/NativeActivity.apk $(ANDROID_APK) PHONY += androiddev update diff --git a/platform/android/luajit-launcher b/platform/android/luajit-launcher index 5393d61c5..981e9c871 160000 --- a/platform/android/luajit-launcher +++ b/platform/android/luajit-launcher @@ -1 +1 @@ -Subproject commit 5393d61c542e5e04c123997881e1dcb5cdc23309 +Subproject commit 981e9c871ad2b94c58b1f4b01f431bed3d80382d