From 85b6e36020c2b6ce55c0a664c9726c47c03dc2ef Mon Sep 17 00:00:00 2001 From: kokokoshka Date: Mon, 30 Jan 2023 18:03:41 +0300 Subject: [PATCH 1/2] Android package rename via CMake --- CMakeLists.txt | 18 +++++++++++------- etc/Activity.java | 2 +- src/core/os_android.c | 6 +++++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b943269c..2d59748c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -739,6 +739,16 @@ elseif(EMSCRIPTEN) target_sources(lovr PRIVATE src/core/os_wasm.c) configure_file(etc/lovr.ico favicon.ico COPYONLY) elseif(ANDROID) + set(ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/etc/AndroidManifest.xml" CACHE STRING "The AndroidManifest.xml file to use") + file(READ ${ANDROID_MANIFEST} ANDROID_MANIFEST_CONTENT) + string(REGEX MATCH "package=\"([^\"]*)" ANDROID_PACKAGE ${ANDROID_MANIFEST_CONTENT}) + string(SUBSTRING ${ANDROID_PACKAGE} 9 -1 ANDROID_PACKAGE) #I dunno how to do a lookbehind + + string(REPLACE "." "_" ANDROID_PACKAGE_C ${ANDROID_PACKAGE}) + string(REPLACE "." "/" ANDROID_PACKAGE_JAVA ${ANDROID_PACKAGE}) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/Activity.java ${CMAKE_CURRENT_BINARY_DIR}/Activity.java) + target_compile_definitions(lovr PRIVATE "LOVR_PKG=${ANDROID_PACKAGE_C}") + target_sources(lovr PRIVATE src/core/os_android.c) target_link_libraries(lovr log android dl) target_include_directories(lovr PRIVATE "${ANDROID_NDK}/sources/android/native_app_glue") @@ -754,17 +764,12 @@ elseif(ANDROID) if(LOVR_BUILD_EXE) set(ANDROID_JAR "${ANDROID_SDK}/platforms/${ANDROID_PLATFORM}/android.jar") set(ANDROID_TOOLS "${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}") - set(ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/etc/AndroidManifest.xml" CACHE STRING "The AndroidManifest.xml file to use") # If assets are included in the apk then add '-A assets' to aapt, otherwise don't add any flags if(ANDROID_ASSETS) set(ANDROID_ASSETS -A ${ANDROID_ASSETS}) endif() - if(ANDROID_PACKAGE) - set(PACKAGE_RENAME "--rename-manifest-package" "${ANDROID_PACKAGE}") - endif() - if(LOVR_USE_OPENXR) get_target_property(OPENXR_LIB ${LOVR_OPENXR} IMPORTED_LOCATION) file(COPY ${OPENXR_LIB} DESTINATION raw/lib/${ANDROID_ABI}) @@ -785,9 +790,8 @@ elseif(ANDROID) buildAPK ALL WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy "${ANDROID_MANIFEST}" AndroidManifest.xml - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/etc/Activity.java Activity.java COMMAND ${Java_JAVAC_EXECUTABLE} -classpath "${ANDROID_JAR}" -d . Activity.java - COMMAND ${ANDROID_TOOLS}/d8 --min-api ${ANDROID_NATIVE_API_LEVEL} --output raw org/lovr/app/Activity.class + COMMAND ${ANDROID_TOOLS}/d8 --min-api ${ANDROID_NATIVE_API_LEVEL} --output raw ${ANDROID_PACKAGE_JAVA}/Activity.class COMMAND ${ANDROID_TOOLS}/aapt package -f diff --git a/etc/Activity.java b/etc/Activity.java index bee76325..53eaae9b 100644 --- a/etc/Activity.java +++ b/etc/Activity.java @@ -1,4 +1,4 @@ -package org.lovr.app; +package @ANDROID_PACKAGE@; import android.Manifest; import android.app.NativeActivity; diff --git a/src/core/os_android.c b/src/core/os_android.c index 3c9d4eed..88ac9147 100644 --- a/src/core/os_android.c +++ b/src/core/os_android.c @@ -241,7 +241,11 @@ void os_sleep(double seconds) { while (nanosleep(&t, &t)); } -JNIEXPORT void JNICALL Java_org_lovr_app_Activity_lovrPermissionEvent(JNIEnv* jni, jobject activity, jint permission, jboolean granted) { +//This two-level macro do it's job +#define _JNI(PKG, X) Java_ ## PKG ##_##X +#define JNI(PKG, X) _JNI(PKG,X) + +JNIEXPORT void JNICALL JNI(LOVR_PKG, Activity_lovrPermissionEvent)(JNIEnv* jni, jobject activity, jint permission, jboolean granted) { if (state.onPermissionEvent) { state.onPermissionEvent(permission, granted); } From 49489dc0e8c151b956b3a56f2f99509a1db479fc Mon Sep 17 00:00:00 2001 From: Bjorn Date: Sun, 5 Feb 2023 21:47:52 -0800 Subject: [PATCH 2/2] Apply suggestions from code review --- CMakeLists.txt | 6 +++--- src/core/os_android.c | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d59748c..acd80c17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -741,13 +741,13 @@ elseif(EMSCRIPTEN) elseif(ANDROID) set(ANDROID_MANIFEST "${CMAKE_CURRENT_SOURCE_DIR}/etc/AndroidManifest.xml" CACHE STRING "The AndroidManifest.xml file to use") file(READ ${ANDROID_MANIFEST} ANDROID_MANIFEST_CONTENT) - string(REGEX MATCH "package=\"([^\"]*)" ANDROID_PACKAGE ${ANDROID_MANIFEST_CONTENT}) - string(SUBSTRING ${ANDROID_PACKAGE} 9 -1 ANDROID_PACKAGE) #I dunno how to do a lookbehind + string(REGEX MATCH "package=\"([^\"]*)" _ ${ANDROID_MANIFEST_CONTENT}) + set(ANDROID_PACKAGE ${CMAKE_MATCH_1}) string(REPLACE "." "_" ANDROID_PACKAGE_C ${ANDROID_PACKAGE}) string(REPLACE "." "/" ANDROID_PACKAGE_JAVA ${ANDROID_PACKAGE}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/Activity.java ${CMAKE_CURRENT_BINARY_DIR}/Activity.java) - target_compile_definitions(lovr PRIVATE "LOVR_PKG=${ANDROID_PACKAGE_C}") + target_compile_definitions(lovr PRIVATE "LOVR_JAVA_PACKAGE=${ANDROID_PACKAGE_C}") target_sources(lovr PRIVATE src/core/os_android.c) target_link_libraries(lovr log android dl) diff --git a/src/core/os_android.c b/src/core/os_android.c index 88ac9147..ce6925c4 100644 --- a/src/core/os_android.c +++ b/src/core/os_android.c @@ -241,11 +241,10 @@ void os_sleep(double seconds) { while (nanosleep(&t, &t)); } -//This two-level macro do it's job -#define _JNI(PKG, X) Java_ ## PKG ##_##X -#define JNI(PKG, X) _JNI(PKG,X) +#define _JNI(PKG, X) Java_ ## PKG ## _ ## X +#define JNI(PKG, X) _JNI(PKG, X) -JNIEXPORT void JNICALL JNI(LOVR_PKG, Activity_lovrPermissionEvent)(JNIEnv* jni, jobject activity, jint permission, jboolean granted) { +JNIEXPORT void JNICALL JNI(LOVR_JAVA_PACKAGE, Activity_lovrPermissionEvent)(JNIEnv* jni, jobject activity, jint permission, jboolean granted) { if (state.onPermissionEvent) { state.onPermissionEvent(permission, granted); }