From 24d98aa9998c79af6e16e56aa31d3959fd47a9b5 Mon Sep 17 00:00:00 2001 From: Dimitre Date: Fri, 24 May 2024 17:16:08 -0300 Subject: [PATCH] Android 2024 template (#7991) --- scripts/templates/android2024/build.gradle | 22 ++ .../templates/android2024/gradle.properties | 10 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../templates/android2024/local.properties | 8 + .../templates/android2024/ofApp/build.gradle | 182 ++++++++++++++++ .../android2024/ofApp/gradle.properties | 11 + .../android2024/ofApp/proguard-rules.pro | 127 +++++++++++ .../ofApp/src/main/AndroidManifest.xml | 89 ++++++++ .../ofApp/src/main/cpp/CMakeLists.txt | 142 +++++++++++++ .../android2024/ofApp/src/main/cpp/main.cpp | 49 +++++ .../android2024/ofApp/src/main/cpp/ofApp.cpp | 101 +++++++++ .../android2024/ofApp/src/main/cpp/ofApp.h | 39 ++++ .../ofApp/src/main/ic_launcher-playstore.png | Bin 0 -> 25952 bytes .../cc/openframeworks/android/OFActivity.java | 201 ++++++++++++++++++ .../ofApp/src/main/res/drawable-hdpi/icon.png | Bin 0 -> 2587 bytes .../ofApp/src/main/res/drawable-mdpi/icon.png | Bin 0 -> 2587 bytes .../src/main/res/drawable-xhdpi/icon.png | Bin 0 -> 2587 bytes .../ofApp/src/main/res/drawable/icon.png | Bin 0 -> 2587 bytes .../ofApp/src/main/res/layout/main_layout.xml | 24 +++ .../ofApp/src/main/res/menu/main_layout.xml | 8 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1650 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 2212 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 3557 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1168 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1328 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2228 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2316 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 3207 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 5158 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3760 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 6138 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 8411 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5436 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 10038 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 12659 bytes .../ofApp/src/main/res/values-v11/strings.xml | 5 + .../ofApp/src/main/res/values-v11/styles.xml | 11 + .../ofApp/src/main/res/values-v14/strings.xml | 5 + .../ofApp/src/main/res/values-v14/styles.xml | 12 ++ .../res/values/ic_launcher_background.xml | 4 + .../ofApp/src/main/res/values/strings.xml | 5 + .../ofApp/src/main/res/values/styles.xml | 20 ++ scripts/templates/android2024/proguard.cfg | 59 +++++ scripts/templates/android2024/settings.gradle | 11 + 47 files changed, 1161 insertions(+) create mode 100644 scripts/templates/android2024/build.gradle create mode 100644 scripts/templates/android2024/gradle.properties create mode 100644 scripts/templates/android2024/gradle/wrapper/gradle-wrapper.jar create mode 100644 scripts/templates/android2024/gradle/wrapper/gradle-wrapper.properties create mode 100644 scripts/templates/android2024/local.properties create mode 100644 scripts/templates/android2024/ofApp/build.gradle create mode 100644 scripts/templates/android2024/ofApp/gradle.properties create mode 100644 scripts/templates/android2024/ofApp/proguard-rules.pro create mode 100644 scripts/templates/android2024/ofApp/src/main/AndroidManifest.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/cpp/CMakeLists.txt create mode 100644 scripts/templates/android2024/ofApp/src/main/cpp/main.cpp create mode 100644 scripts/templates/android2024/ofApp/src/main/cpp/ofApp.cpp create mode 100644 scripts/templates/android2024/ofApp/src/main/cpp/ofApp.h create mode 100644 scripts/templates/android2024/ofApp/src/main/ic_launcher-playstore.png create mode 100644 scripts/templates/android2024/ofApp/src/main/java/cc/openframeworks/android/OFActivity.java create mode 100644 scripts/templates/android2024/ofApp/src/main/res/drawable-hdpi/icon.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/drawable-mdpi/icon.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/drawable-xhdpi/icon.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/drawable/icon.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/layout/main_layout.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/menu/main_layout.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values-v11/strings.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values-v11/styles.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values-v14/strings.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values-v14/styles.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values/ic_launcher_background.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values/strings.xml create mode 100644 scripts/templates/android2024/ofApp/src/main/res/values/styles.xml create mode 100644 scripts/templates/android2024/proguard.cfg create mode 100644 scripts/templates/android2024/settings.gradle diff --git a/scripts/templates/android2024/build.gradle b/scripts/templates/android2024/build.gradle new file mode 100644 index 00000000000..7cbc7eb6714 --- /dev/null +++ b/scripts/templates/android2024/build.gradle @@ -0,0 +1,22 @@ +ext { + //var = 'signExample.keystore' +}// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:7.4.2' + } +} + +allprojects { + repositories { + google() + mavenCentral() + } + ext { + + } +} diff --git a/scripts/templates/android2024/gradle.properties b/scripts/templates/android2024/gradle.properties new file mode 100644 index 00000000000..43f9ef9e1c3 --- /dev/null +++ b/scripts/templates/android2024/gradle.properties @@ -0,0 +1,10 @@ +android.useAndroidX=true +android.enableJetifier=false +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +kotlin.code.style=official +android.prefabVersion=1.0.+ +android.buildFeatures.prefab=true +#ndkBuild=false +# https://issuetracker.google.com/149575364 +android.enableParallelJsonGen=false +#googleplay=true \ No newline at end of file diff --git a/scripts/templates/android2024/gradle/wrapper/gradle-wrapper.jar b/scripts/templates/android2024/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/gradle/wrapper/gradle-wrapper.properties b/scripts/templates/android2024/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000000..2dd5ee8c795 --- /dev/null +++ b/scripts/templates/android2024/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Jun 12 01:17:57 AEST 2023 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/scripts/templates/android2024/local.properties b/scripts/templates/android2024/local.properties new file mode 100644 index 00000000000..5ba01764b38 --- /dev/null +++ b/scripts/templates/android2024/local.properties @@ -0,0 +1,8 @@ +## This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Wed May 08 13:54:16 CEST 2024 +sdk.dir=/Users/thierry/Library/Android/sdk diff --git a/scripts/templates/android2024/ofApp/build.gradle b/scripts/templates/android2024/ofApp/build.gradle new file mode 100644 index 00000000000..635a3e27577 --- /dev/null +++ b/scripts/templates/android2024/ofApp/build.gradle @@ -0,0 +1,182 @@ +plugins { + id 'com.android.application' +} + +def CMAKELIST_PATH = './src/main/cpp' +def CPP_SOURCE = './src/main/cpp' +def JAVA_SOURCE = './src/main/java' + +// pointing to cmake's source code for the same project +def PRJ_SRC_ROOT = './src/main' +def ofRoot(){ return '../../../../' } +final ofSource = ofRoot() + 'libs/openFrameworks' +final ofLibs = ofRoot() + 'libs' +final addons = ofRoot() + 'addons' +final ofLibOutput = ofRoot() + 'libs/openFrameworksCompiled/lib/android' +def OFX_ANDROID = ofRoot() + 'addons/ofxAndroid' +//def OF_ADDONS_ARGUMENTS = "${OF_ADDONS}" +def enableProguardInReleaseBuilds = true +def enableProguardInDebugBuilds = false + +task wrapper(type: Wrapper) { + gradleVersion = '7.3.3' +} +tasks.register("prepareKotlinBuildScriptModel"){ +} + +evaluationDependsOn(':openFrameworksProject') + +tasks.whenTaskAdded { task -> + if (task.name == 'assemble') { + task.dependsOn(':openFrameworksProject:assemble') + } +} + + +android { + compileSdkVersion 34 + buildToolsVersion '32.0.0' + //ndkPath "/Users/x/android-ndk-r21e" // Point to your own NDK if needed + ndkVersion '24.0.8215888' // use android studio side loaded ndk + buildFeatures { + prefab true + } + signingConfigs { + debug { + } + release { + storeFile new File("${System.properties['user.home']}/.android/debug.keystore") + storePassword 'android' + storeType "jks" + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + defaultConfig { + applicationId "cc.openframeworks.emptyExample" // IMPORTANT : THIS DEFINES THE ID OF THE APK + minSdkVersion 21 + targetSdkVersion 34 + versionCode 12 + versionName '12.0' + ndk.abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86' //, 'x86_64' + + externalNativeBuild { + if (!project.hasProperty("ndkBuild")) { + cmake { + arguments "-DANDROID_STL=c++_shared", + "-DANDROID_ARM_NEON=TRUE", + "-DANDROID_TOOLCHAIN=clang", + //"${OF_ADDONS_ARGUMENTS}", + "-DTARGET_OPENGLES=TRUE" + + version '3.22.1' + } + } + } + multiDexEnabled false + } + buildTypes { + release { + signingConfig signingConfigs.release + jniDebuggable false + debuggable false + minifyEnabled false + shrinkResources false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + signingConfig signingConfigs.release + } + debug { + jniDebuggable true + debuggable true + minifyEnabled false + shrinkResources false + signingConfig signingConfigs.debug + } + } + flavorDimensions "version" + productFlavors { + playstore { + applicationIdSuffix "" + signingConfig signingConfigs.release + } +// humble { +// applicationIdSuffix ".humble" +// } +// amazon { +// applicationIdSuffix ".amazon" +// } +// samsung { +// applicationIdSuffix ".samsung" +// } +// oppo { +// applicationIdSuffix ".oppo" +// } + } + sourceSets { + main { + manifest.srcFile "${PRJ_SRC_ROOT}/AndroidManifest.xml" + java.srcDirs = ["${PRJ_SRC_ROOT}/java", + "${OFX_ANDROID}/Java"] + res.srcDirs = ["${PRJ_SRC_ROOT}/res"] +// jniLibs.srcDirs = ["${OF_ANDROID_OUTPUT}", "lib"] // Pre Android Studio 2022.2.1 + assets { + srcDirs 'src/main/assets', 'src/main/bin/data' + } + } + } + externalNativeBuild { + if (!project.hasProperty("ndkBuild")) { + cmake { + path "${CMAKELIST_PATH}/CMakeLists.txt" + } + } else { + ndkBuild { + path "${CMAKELIST_PATH}/Android.mk" + } + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + androidResources { + noCompress '' + } + dependenciesInfo { + includeInApk false + includeInBundle false + } +// testOptions { +// devices { +// pixel2api29 (com.android.build.api.dsl.ManagedVirtualDevice) { +// // Use device profiles you typically see in +// // Android Studio +// device = "Pixel 2" +// apiLevel = 29 +// // You can also specify "aosp" if you don’t require +// // Google Play Services. +// systemImageSource = "google" +// abi = "x86" +// } +// } +// } +} + + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation "com.getkeepsafe.relinker:relinker:1.4.5" + implementation 'com.google.android.material:material:1.9.0' + if (project.hasProperty("googleplay")) { + implementation "com.google.android.gms:play-services-games:22.0.1" + implementation "com.google.android.gms:play-services-auth:20.0.1" + implementation "com.google.android.gms:play-services-base:18.0.1" + implementation "com.google.android.gms:play-services-basement:18.0.0" + implementation "com.google.android.gms:play-services-instantapps:18.0.1" + implementation "com.google.android.gms:play-services-appset:16.0.2" + } +} + diff --git a/scripts/templates/android2024/ofApp/gradle.properties b/scripts/templates/android2024/ofApp/gradle.properties new file mode 100644 index 00000000000..f96a9f246a0 --- /dev/null +++ b/scripts/templates/android2024/ofApp/gradle.properties @@ -0,0 +1,11 @@ +android.useAndroidX=true +android.enableJetifier=true +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +kotlin.code.style=official +android.prefabVersion=1.0.+ +# Workaround bug in AGP where the prefab dependency is being resolved from a +# non-Gradle thread when enableParallelJsonGen is enabled. +# https://issuetracker.google.com/149575364 +android.enableParallelJsonGen=false +android.buildFeatures.prefab = true +vectorDrawables.useSupportLibrary = true \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/proguard-rules.pro b/scripts/templates/android2024/ofApp/proguard-rules.pro new file mode 100644 index 00000000000..de8c62143ce --- /dev/null +++ b/scripts/templates/android2024/ofApp/proguard-rules.pro @@ -0,0 +1,127 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +-dontoptimize +-dontshrink +#-dontusemixedcaseclassnames +#-dontskipnonpubliclibraryclasses +#-dontpreverify +#-verbose +# +-optimizationpasses 7 # use for final build +-dontusemixedcaseclassnames +#-dontskipnonpubliclibraryclasses +#-dontpreverify +-verbose + +# custom app activity proguard +-keep public class cc.openframeworks.android.OFActivity { public ; } +-keep public class cc.openframeworks.android.R { public ; } + + +#-dontobfuscate android classes +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference + +#-dontobfuscate openFrameworks android classes +-keep public class cc.openframeworks.OFAndroid { public ; } +-keep public class cc.openframeworks.OFAndroidLifeCycleHelper { public ; } +-keep public class cc.openframeworks.OFAndroidWindow { public ; } +-keep public class cc.openframeworks.OFAndroidSoundPlayer { public ; } +-keep public class cc.openframeworks.OFGLSurfaceView { public ; } +-keep public class cc.openframeworks.OFAndroidLifeCycle { public ; } +-keep public class cc.openframeworks.OFActivity { public ; } +-keep public class cc.openframeworks.ContextFactory { public ; } +-keep public class cc.openframeworks.OFEGLConfigChooser { public ; } +-keep public class cc.openframeworks.OFGestureListener { public ; } +-keep public class cc.openframeworks.OFAndroidController { public ; } + +#-dontobfuscate GooglePlay Games android classes if used +-keep class com.google.android.gms.games.leaderboard.** { *; } +-keep class com.google.android.gms.games.snapshot.** { *; } +-keep class com.google.android.gms.games.achievement.** { *; } +-keep class com.google.android.gms.games.event.** { *; } +-keep class com.google.android.gms.games.stats.** { *; } +-keep class com.google.android.gms.games.video.** { *; } +-keep class com.google.android.gms.games.* { *; } +-keep class com.google.android.gms.signin.** { *; } +-keep class com.google.android.gms.dynamic.** { *; } +-keep class com.google.android.gms.dynamite.** { *; } +-keep class com.google.android.gms.tasks.** { *; } +-keep class com.google.android.gms.security.** { *; } +-keep class com.google.android.gms.base.** { *; } +-keep class com.google.android.gms.actions.** { *; } +-keep class com.google.games.bridge.** { *; } +-keep class com.google.android.gms.common.api.** { *; } +-keep class com.google.android.gms.games.quest.** { *; } +-keep class com.google.android.gms.nearby.** { *; } + +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +# note that means any method +-keepclasseswithmembernames,includedescriptorclasses class * { + native ; +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} + + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/AndroidManifest.xml b/scripts/templates/android2024/ofApp/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..aae67ceba1b --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/AndroidManifest.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/cpp/CMakeLists.txt b/scripts/templates/android2024/ofApp/src/main/cpp/CMakeLists.txt new file mode 100644 index 00000000000..5b160ffa42d --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/cpp/CMakeLists.txt @@ -0,0 +1,142 @@ +# Sets the minimum version of CMake required to build the native +# library. +cmake_minimum_required(VERSION 3.22.1) + +project(ofapp LANGUAGES CXX) +set(TARGET_ANDROID TRUE) + +set(LOCAL_PATH ${CMAKE_SOURCE_DIR}) +set(PRJ_OF_ROOT ${LOCAL_PATH}/../../../../../../../) + +set(PURE_OF_ROOT ${LOCAL_PATH}/../../../../../../../) +set(CORE_OF_ROOT ${PURE_OF_ROOT}/libs/openFrameworks) +set(LIBS_ROOT ${PURE_OF_ROOT}/libs) + +set(PRJ_ADDONS_PATH ${PURE_OF_ROOT}/addons) +set(PRJ_SOURCE_PATH ${LIBS_ROOT}/openFrameworks) +set(PRJ_LIBS_ROOT ${PURE_OF_ROOT}/libs) + +set(OF_ANDROID ${PURE_OF_ROOT}/libs/openFrameworksCompiled/project/android) +set(OF_ANDROID_OUTPUT ${PURE_OF_ROOT}/libs/openFrameworksCompiled/lib/android) + +set(PRJ_OFX_ANDROID_PATH ${PRJ_ADDONS_PATH}/ofxAndroid) +set(PRJ_OFX_ANDROID_CPP_PATH ${PRJ_OFX_ANDROID_PATH}/src) + +macro(print_all_variables) + message(STATUS "print_all_variables------------------------------------------{") + get_cmake_property(_variableNames VARIABLES) + foreach (_variableName ${_variableNames}) + message(STATUS "${_variableName}=${${_variableName}}") + endforeach() + message(STATUS "print_all_variables------------------------------------------}") +endmacro() + +# Custom function to check if the library is built +function(check_library) + if (NOT TARGET openFrameworksAndroid) + message(STATUS "openFrameworksAndroid Library not found. Building library...") + + # Invoke the build process for the library + execute_process( + COMMAND ${CMAKE_COMMAND} --build ${OF_ANDROID}/ + RESULT_VARIABLE result + ) + if (result) + message(FATAL_ERROR "Failed to build the library.") + endif () + endif () +endfunction() + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS ON) +set(TARGET_ANDROID ON) +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c17 -Oz -DNDEBUG -frtti --warn-uninitialized -fno-short-enums -Wextra -fPIE -fPIC -fuse-ld=gold -fexceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wfloat-equal -Wundef -Werror -fverbose-asm -Wint-to-pointer-cast -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wcast-qual -Wmissing-prototypes -Wstrict-overflow=5 -Wwrite-strings -Wconversion --pedantic-errors") +set(CMAKE_CPP_FLAGS "${CMAKE_C_FLAGS} -std=c++17 -Oz -DNDEBUG -stdlib=libc++ --warn-uninitialized -frtti -Wextra -fno-short-enums -fPIE -fPIC -fuse-ld=gold -fexceptions -ffunction-sections -fdata-sections -Wall -Wextra -Wfloat-equal -Wundef -Werror -fverbose-asm -Wint-to-pointer-cast -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wcast-qual -Wmissing-prototypes -Wstrict-overflow=5 -Wwrite-strings -Wconversion --pedantic-errors") +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-export-dynamic") + +print_all_variables() + +# Creates the project's shared lib: libnative-lib.so. +# The lib is loaded by this project's Java code in MainActivity.java: +# System.loadLibrary("native-lib"); +# The lib name in both places must match. +add_library( ofapp #name + SHARED # type of library + # src files for project (just c/cpp) + ${CMAKE_SOURCE_DIR}/main.cpp + ${CMAKE_SOURCE_DIR}/ofApp.cpp + ) + + +# Specifies a path to native header files +include_directories( + # openFrameworks headers + ${PRJ_SOURCE_PATH}/3d + ${PRJ_SOURCE_PATH}/app + ${PRJ_SOURCE_PATH}/communication + ${PRJ_SOURCE_PATH}/events + ${PRJ_SOURCE_PATH}/gl + ${PRJ_SOURCE_PATH}/graphics + ${PRJ_SOURCE_PATH}/math + ${PRJ_SOURCE_PATH}/sound + ${PRJ_SOURCE_PATH}/types + ${PRJ_SOURCE_PATH}/utils + ${PRJ_SOURCE_PATH}/video + ${PRJ_SOURCE_PATH} + # openFrameworks addons includes + ${PURE_OF_ROOT}/addons/ofxAndroid/src + ${PURE_OF_ROOT}/addons/ofxAccelerometer/src + ${PURE_OF_ROOT}/addons/ofxXmlSettings/src + ${PURE_OF_ROOT}/addons/ofxXmlSettings/libs + # openFrameworks Libs includes + ${PRJ_LIBS_ROOT}/FreeImage/include + ${PRJ_LIBS_ROOT}/freetype/include + ${PRJ_LIBS_ROOT}/freetype/include/freetype2 + ${PRJ_LIBS_ROOT}/freetype/include/freetype2/freetype/config + ${PRJ_LIBS_ROOT}/freetype/include/freetype2/freetype/internal + ${PRJ_LIBS_ROOT}/freetype/include/freetype2/freetype/internal/services + ${PRJ_LIBS_ROOT}/glm/include + ${PRJ_LIBS_ROOT}/pugixml/include + ${PRJ_LIBS_ROOT}/json/include + ${PRJ_LIBS_ROOT}/tess2/include + ${PRJ_LIBS_ROOT}/utf8/include + ${PRJ_LIBS_ROOT}/uriparser/include + ${CMAKE_SOURCE_DIR}/ + ${CMAKE_SOURCE_DIR}/ + ${OF_ANDROID} +) + +find_library(android-lib android) +find_library(log-lib log) +find_library(GLES2-lib GLESv2) + +#find_library(GLES1-lib GLESv1_CM) +#find_library(GLES3-lib GLESv3) + + +target_link_libraries(ofapp + EGL + GLESv2 + log + c + m + z + dl +# GLESv3 + ) + +target_link_libraries( ofapp + ${android-lib} ) +target_link_libraries( ofapp + ${GLES2-lib} ) +target_link_libraries( ofapp + ${log-lib} ) +#target_link_libraries( ofApp +# ${GLES3-lib} ) +#target_link_libraries( ofApp +# ${GLES1-lib} ) + +# Finally link in openFrameworks Library for each ABI +target_link_libraries( ofapp + ${OF_ANDROID_OUTPUT}/${ANDROID_ABI}/libopenFrameworksAndroid.so) diff --git a/scripts/templates/android2024/ofApp/src/main/cpp/main.cpp b/scripts/templates/android2024/ofApp/src/main/cpp/main.cpp new file mode 100644 index 00000000000..f98043c5a8c --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/cpp/main.cpp @@ -0,0 +1,49 @@ +#include "ofMain.h" +#include "ofApp.h" + +#ifdef TARGET_ANDROID + +#include "ofWindowSettings.h" +#include "ofGLProgrammableRenderer.h" + +shared_ptr *ofapp; +std::shared_ptr baseWindow; + +//-------------------------------------------------------------- +int main(int argc, char **argv) { + baseWindow = std::make_shared(); + ofxAndroidWindowSettings settings; + settings.glesVersion = 2; + settings.setSize(1920, 1080); + settings.windowMode = OF_WINDOW; + settings.preserveContextOnPause = true; + baseWindow = ofCreateWindow(settings); + ofapp = new shared_ptr(new ofApp()); + ofRunApp(baseWindow, *ofapp); + return 0; +} + +void ofAndroidApplicationInit() +{ + //application scope init +} +void ofAndroidActivityInit() +{ + //activity scope init - call main + main(0, nullptr); +} + +// Callbacks from Android Layer +extern "C" JNIEXPORT void JNICALL +Java_cc_openframeworks_OFAndroid_init( JNIEnv* env, jclass clazz) +{ + ofAndroidApplicationInit(); +} + +extern "C" JNIEXPORT void JNICALL +Java_cc_openframeworks_OFAndroid_onCreate( JNIEnv* env, jclass clazz) +{ + ofAndroidActivityInit(); +} + +#endif diff --git a/scripts/templates/android2024/ofApp/src/main/cpp/ofApp.cpp b/scripts/templates/android2024/ofApp/src/main/cpp/ofApp.cpp new file mode 100644 index 00000000000..bf44d44f0a9 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/cpp/ofApp.cpp @@ -0,0 +1,101 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ +} + +//-------------------------------------------------------------- +void ofApp::update(){ +} + +//-------------------------------------------------------------- +void ofApp::draw(){ +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ +} + +//-------------------------------------------------------------- +void ofApp::touchDown(int x, int y, int id){ +} + +//-------------------------------------------------------------- +void ofApp::touchMoved(int x, int y, int id){ +} + +//-------------------------------------------------------------- +void ofApp::touchUp(int x, int y, int id){ +} + +//-------------------------------------------------------------- +void ofApp::touchDoubleTap(int x, int y, int id){ +} + +//-------------------------------------------------------------- +void ofApp::touchCancelled(int x, int y, int id){ +} + +//-------------------------------------------------------------- +void ofApp::swipe(ofxAndroidSwipeDir swipeDir, int id){ +} + +//-------------------------------------------------------------- +void ofApp::pause(){ +} + +//-------------------------------------------------------------- +void ofApp::stop(){ +} + +//-------------------------------------------------------------- +void ofApp::resume(){ +} + +//-------------------------------------------------------------- +void ofApp::reloadTextures(){ +} + +//-------------------------------------------------------------- +bool ofApp::backPressed(){ + return false; +} + +//-------------------------------------------------------------- +void ofApp::okPressed(){ +} + +//-------------------------------------------------------------- +void ofApp::cancelPressed(){ +} + +//-------------------------------------------------------------- +void ofApp::deviceRefreshRateChanged(int refreshRate) { +} + +//-------------------------------------------------------------- +void ofApp::deviceHighestRefreshRateChanged(int refreshRate) { +} + +//-------------------------------------------------------------- +void ofApp::deviceRefreshRateChangedEvent(int &refreshRate) { +} + +//-------------------------------------------------------------- +void ofApp::deviceHighestRefreshRateChangedEvent(int &refreshRate) { +} + +//-------------------------------------------------------------- +void ofApp::exit(){ + +} + diff --git a/scripts/templates/android2024/ofApp/src/main/cpp/ofApp.h b/scripts/templates/android2024/ofApp/src/main/cpp/ofApp.h new file mode 100644 index 00000000000..fab21d73585 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/cpp/ofApp.h @@ -0,0 +1,39 @@ +#pragma once + +#include "ofMain.h" +#include "ofxAndroid.h" + +class ofApp : public ofxAndroidApp{ + + public: + + void setup(); + void exit(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void windowResized(int w, int h); + + void touchDown(int x, int y, int id); + void touchMoved(int x, int y, int id); + void touchUp(int x, int y, int id); + void touchDoubleTap(int x, int y, int id); + void touchCancelled(int x, int y, int id); + void swipe(ofxAndroidSwipeDir swipeDir, int id); + + void pause(); + void stop(); + void resume(); + void reloadTextures(); + + bool backPressed(); + void okPressed(); + void cancelPressed(); + + void deviceRefreshRateChanged(int refreshRate); + void deviceHighestRefreshRateChanged(int refreshRate); + void deviceRefreshRateChangedEvent(int &refreshRate); + void deviceHighestRefreshRateChangedEvent(int & refreshRate); +}; diff --git a/scripts/templates/android2024/ofApp/src/main/ic_launcher-playstore.png b/scripts/templates/android2024/ofApp/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..2a0df19f5e04f49c2fec369611552d7ded649054 GIT binary patch literal 25952 zcmeFZ{@JA?sjS2p9`s&X$ z0NAmqD?QPFWwDq2F34>9tggNN+g)8OZI9Q(h;+(1&v8*Lstw`!0{nXGo&*--Y8Igy z<@|VICVTsC%9z^rn)CFkj#!xtuEu<0kDR-iD!a~iHPZ-(F4Q9hY=&@V8kENY9TE7W z?O#QR{QdvXlK|mF3TjY=|NrCve;WTEI0F&d^Nsetk_UAqC7+NF7>)-2{3&>yqj;W9 zCOZ+%3?%^sh%)fhtX|4PKR-!Nqrr^=6jsT_kyegMx!YEbMyzaX;f(N4$@m!Zc<8K{ zc2>0pm_1as!ZU?$;h!$;G_p~>uS)UK90J8hSs#6V7UN5-V89DLlwWp?t(EETxR?nK z(;NR7DAB`qc>r%<)F}TnZmL%|4}lH0rtuxRlUL})c?+e-bVbiQ@I|-s{zwcw9C=Df zEXCPH1#wKWj+`Y@;$Z^9%WT;;_K*kHdL+4ajr4+xd`VbmY)H75eTJa7FZU_(DkX4UIO<}~K z!Us+uCpqB~lacHL>{Sti=d*`u*v1H5;1~LFKGWHFSvo5hM0(=$M7Kl6r({A5fFYbH z0j>+&$N2;7|Mxz2Fbax@6skm0SB@~|sw+gkgIbMM;_ib6Mdp0^%Y4jz{F*sjDGx9b zZd`tNArB^;bX*MZOCjhT7^&Q1@sT9Cs{i@cvz3>c^XTA*Ug7^2vy+#WZOd-b9iQ~B z%rTu8+t>+xWEnU!a=AE^n}QM- zbP0Bt7w8w57uXj(;u0?p=WOK<|0Z2Y5ig1<^sXvGh$1?!B8s9R2`M84i?rXz0~dMKZa8n<^bf}zE1zR_Q`vg9jNP`Gg04@Beo3JM#b$^C z9X*TKi*f3W@4)D*($iRdjT^Y3BvzCy==m6(uPO~$qvc1l|0XRMn`9QS8$n$o<-CWw zq>v@>CXcX<#naxcSIws}`sp_t@v%=Th@pOh5BEM*J(zEJc60bD7kmLWhWxx0Ee?&O z|3}5Op>ZKS_pH#*!e@_Dc81-$1q-V#@@mfOx)RN4e;WGe2 zF3c$Zjyetvd^I|_H+Z(x@W-AZ0%C@>`cCPR{Y93)`y6^Rr-fN%A&T06T399g4%I{N z*jAk`Q(sY`craotHM~wP^bl1qGOlAanu#%)-e}82uts$z;c#PrpL%2Fv?byAJ>-3p zDoW&H71t(rx3$mXQcZiZ&E^2X<^An|=cw*B?`7V1hYDZ(8~rj2g*z&dWiNoiRv-_E zd_<%`@DwkN)~*zBm8xNW@z{^*sym&g{5oQfx5?7~`cSl8mOe<6PT-u)2A0yw64$rV zzscNi@QA}rGa=)9_D6`7);L<(dWI6$gR&7ID(XA_&9tG+VMIMpN7hvGzq~veWED|e)9Wm z#a~q!GI_>~@`uX@-qzTuR#cxw$@bz?+8*isxs~fHxsfL@l<}as3)yI!x5m5pHBW6b z_t9PWVo&m}Mll&C#JKEsBpk{+X`UV!J|SkpV)H133Zrro(qb6?>0KDKJ3ftWt7)J9K}~yW&x=gFGr3h^Q4hUXQ6fT;0$R30oz)$`FYBn zdaOaaBl<7(2TxB2)|qK=15$Az;Tc0?6cf(T{joe$uMuwk7meqpErz?Tl^4vxu%8z$ zQ5PDBgLc*PBpK)M4j;YI(|7v*_G-_Uh$$&brz77E&83Z2C}A_;LNMS_W7#lAC86tx z?#yUKaaQD1E=$7-lOHm@O)AEx-9j(sM5o`BE7P0rQ^CAk#!?rOKJ(as($ppt_SyBk zOo%R^#7j6pLu=Zf^07za@~=Er((w{;tYJEBD!X*Gb1qk;N&S_3O43_RW(ipKVwl$J z(zBf9#Vwis-*?75>Q^o-LqW;5Bn!m~%W7wu8ST%es*EKgKDx@nuUfXKJNf~IUWF%+ z<(HMqOi?Y<;z{*yXgEBUxDjWlB*ho7L|T>$%1v0g7eDo%&W(pMK+PlTmcYiG%ht(3UYc8qPo#V@gLcD$^Eppi&UJ#_ZtXldnG*=h? z!|_=FPq9;`@?sUGy+k+9)hf1eC`SGH(@yLBd@i+ZKuOG>b&*g`zlG)kpHXUAf~~); zjN#lAB*1q&4d`b`4H|dS?00Ssw>xz(j0ze4y8RZ*q+Lr+aP>b^znU=~_C-!$I-t!( zS`riUGtv(=KPknyEtks}X?`B4+V8vB&n~}5e;b!AcR<=N(5hwG`{tO9<#&xmz^&(P zAmLBZ3t6W>-H|oxw{_KsTWV}68tOeR*i$ad{y91*=4i8=;E=t1O-C>mqbOGHFwQ#c1eIO2w0n5uz=1(d-E&-= zf=|{ETpEw@r|dcKi{K|Jzms6UQ`a#IB~TNjs*Fh^89qIDWA!_&RZi$|Zrd@27_U#| zPazeGTjV3OZG}sao7vF?ApHJHw0$#;cC7BUBqq7q{_N^!3!vxvt{C!jf%o=LW*&3 zM_E4ocO_v97AVI$`~7_3J*6S)glDf>i2-s%c(vM$T#tBM){^OSHXGUxq}ZYwR;VRb z48~pQiGW0!@4*I~QhJlGF<3DXVWBzl{41BX+>to=?UyF)V#6q}wZ{0g*XdrzrDqvy zv#JM*zxw8aghH0e;58Rqee?N4SL6f!OSG$QNR6GqbF~}!9K5&&$G@2WYbeU={7&9& zy3$0^HQ<<9F4gUKL%;pV?;n~)1FcGMg&G}*Z-x+=%CG?qfp|x=DBK)y1+mUzG zHS4?_?#LsAVG_G#SOg5ZzvD zKQeouth0OlK(wnL(@;mkfdW7PEd|4a~u*WvmB`=4a- zUI{7?oj_(9-Vjym>H>`ve}W@^#=zf0%Xe%EUfjNDz9}R(v-bZO3ALJzJh2H!F{uIu zz->m@+8a5OC~;buFr?gC0g~S7U8;+zNhCZWCAT1;;Ab$;REBC#(nle@BM#?l6>Wod z-e!%1=^wC6Pl+|zErFO;!bUb?h}Fp5zD$%pn(MGBmubw&(%*JNZT(hGo)9(>RkXES z1pX(Y>QCUR9!p^mkwW~;o7a`jN~^!FKSAuYPKih1mIK%h89GvrcddL4)7`X`-y&r= zp`m=#F)Ts6Q=+w41G!V2VX>VGb3r*gZ$}i@b9^<;FWlE|m-w5{RP9WOAEKr{4xKkl z8&@&dX>-WMz=!_SLPRhUEWBxz zrTXe?9MD#=KfGekR=RAjmeC?eMk)J~EwOB47&^Ik`!-n$LpwsFV}P;*o*Yd(%RZ(A z^OKazOxUNzm5-hcDhk-fM(n_9c<*Z;7g&8PAgg!QVt>N6SyAOM?C=QiW?jRau{zG*K$&`f{1gH})NcJ5EJ<7| zu81k|{i%DFI(*TXZ*6Y4J^2ChR<=;7bR&V&{HfA_!$sjm? zDvPZI8~!|f@vkYw%B>!_lpBJKs=*&WGNY%&m{!+bxY1jT=R9l0DumUhxH)X{i-?du zK3@})I+a=VxKk%Elx8crO6@D!dl9()MLjLUMt}{0l zwjYbxm^HWkzQP&QR#BK1e?AaTHaKwsX`+a~2@84`l(O3N^gLCDgROKa>1Q`zVWFI< z3$pyg0YUdarzAuVRYA)h{}ZJ2F|$1}Yxcrcr!O}KX!MN*F0;L)J(ViA*C1R#C|mn_ z2P4!f*;P~?0qDN1i~4 z9Ow!7-}m{1DeFztDF*Y%Q8=7tc`;HCM+4yj*$z=a$1^8%dh#Zyn!G8G6Gp1@3xE~z zd9$O#C>veTl{h+EE>@8Uc}T^X@};O^=m2HSl=gkcx+@*LW#7FCFcKFA}=0~6` zg$Kh>v!2-7&aIELsv6Ke8F%c5`H&E)|oG2LKRtaBa98tstkMb!Lm_cbnnF8 zwsgs<7(GV^=JXa0m-56!7*^J;Q9wzFW(+SZgofEe7HW40Ry() zmTZw`__|%bg7*7L*{n76Hku%< z#HKyREbF26`y&pSo8x-zn^?E2C`arcNNYi+ST(`H@3ek5JM&%Bx>DE5-*>ZI9ybvh zI8Gy>mx%d=m@!d>pJxph4o@>l$2M$igmQM}8?UCaN~6^i zuPwrtFm5x2WOd$Vyxt&Ui89MnTFeuF1EuFp*Heuk2hO%gX-m8-Z#fVa!KJQGl;t01 zpdtRXWlK8@jO<+^Dt&O~RQ#-_^Z|;m?|t^eNOeAbU12KOQ%h_k7S5-fuAt_LFHjb@ zZzam&Y&0dv6O&iRgb>z-Ew~#X2tZqgOSFo=`qSi&l20 z?oB@L3_iKA;OSBnQ5tc4cN+5|bL2&7$U}YsLWzeIh0zw6oqfcl)SNgk`yJ8*afd5I zLtwjc3FbE`dmOLj$E8zEApDzDD&Jk!O;lNLwU)5Bp!_`yT|vovrwcr)rN|WCN-=^i>g=#rp zjC^Nke@$3D)blv?eXof2>8@)i64U37=<^?u&N9+hn|-%n?lrB%&D4#Uoewa>$!tqn zo2=;dU&>C%YIlF%Ri)_Y%6FaKJn;`v`xtWjtZOE|w_{@-x7_D=iQ%iWr6C(0*5h&@ z?YmJW?a6ZV3jcEP%2xdP`$I}TFSiTrlC610yZy{MWNY!2DTm{=!Z9_9rRj`LL;LO~ z@K?M;XztR#DiYyP_t2?|I)^7tb1FkGI*Qk44;H#9X$5c<>OZ1kN4+^>r6lm5F|Sj> z{lZsLBNuijL2vdgnn+Urs@9ftiP=;-l@hB>((J+`PG?UftL=OIKjf)Mt_0pzoaC67 zPM@NQ*R%O!IVSslUxzhhD5{K+9p;HM>&!*QgK

k z>U8^*ylbtlqHin%)@xnEwP<-%u*Vgo59aFcA3hiXE3WjuAb=@{cDnq67BQ#P-Z8$& zrc}Y+8#i}~xH4H#akWYkY>SY0q^GeUq@#PfI@9r(a;pjwnqu68Avzd?-K|!+!2N5f zk6@`hVfDd?WttZc)AV5jM#pK$XkYZk($`nK@nNJRYF-loDrT;UZ^i=M1oqrF35#mw zAit(QWK7#S^vP5Y1tb!r%$j*tF_V|&XLpHGYjPOzZND=FA;Q9Sbl00Rywu$wQpkvH z1Ol;|J>!rAGjq75zBLVwZORoR#v4f$F>5ci3)t@RZakKdFgYWPAxpRd8K-G_X&GmK z!n5(0{(r=CyK6gY-wwn)`muZ(`@9QPgAQcr7jS!Cmj!Obl4`k#ZdRnU780r{2YuAW zp?T~vp=-w;ejCOhQ`0?tKwCa;E|w+r1w$*O=TD#5>C1?A&48_B`&7&E^O{SOHgb;> z!-VO7@gQp90x?M{(Ey((r|I%r0yggt7|&>5N5y%@$xKolZxRA+;& z`aqVpAu9Jb&byULc5LT$s2}Pw?e@Kno#~jL3dK<0XI%kOiQPDC_`mRWV<`R0QeiKm z7?^ejE#9?6?b)U?_QbHIrxX#ONOdmfd|+BctnB&JQ=^`V<(ScNvs!DT_3fhp?ly$< zK%AO;SH!rCnWQT4RBg_x&33x2lrHgavpJg<>#@kxuDvKr2}Wv$OF-#sq=g_goKNKK zd&dXqav)Vm5DR(BAigFlqw{N6d?BdZOOKqYCoEfz=GiaG6_g>u+@(=LKHyt?K_`t= zJJK+i=I5W+rQij(53*WMotypDT`cSUv40^7hFSQvYm0&+Bxi5CNBmS@)$U;UtqXg-ZZ(RF^zIhaOX$@Nt^o-``=EGHDQsbjl79(7js-kdqGybC7%=C{0PNp1cAH9M+~(t8U#l*c^GO` zW04XY6@Pt1=hSXTzI774N!mO^!(E`4CZO`!EAu0%*!B)~R-1&I zu*y}w9|yh!q)v0LnTk&~a6#fS%nr>5s^XWLv-GdYmTcj3%$o%7>6!74tfkz=4=UG_ zI=DbmLAE)tOaYKWwgNX@kWaoz)jR#f&m#MI^}^h=u=uZOP1uz@fq`tPlbNHCRuPr>&aw!^@Qs1iQ&wCysFw)uwq9|k+k*2}2BEjx9HSMfz z5mCNlT0*OgLy^(kOFSwh(yS4jxruL!V5Qjd__D(fRl{fnU!s#H5DL(j6mPdn3Q8>0 zbh0AfRXiG0(fmRToIhr!-ptK_HM#P&nQF|6I@hqsn0(-P;w4cD1;%J`;70q<5IKI? zz<@r*1alNp0=?sA0@{)I3MwDRT1A#t$MAdaHh!&k+Lf0++7s{HP-OWRD^huGU7!p& z6%OTON3%DynEe43+ih03 zVwjfw%Z-Xf-0Uo%Pb7-}A>P1j;!n!`px;Z!`Rji|=zG46x?j1g51Ep;X-`a&&c5Ps zZM3h!kY~R5sRD>nKdCSO$6AwzGLAK9wf(-v8?#8iCMD~SvN8c^K48Ota=qAk1}M1@ zLp<||0YWOszmXaofZ2o*;_rdTwQEKZ;D@YH%ATB*TM3Qm3;sl^G&)?nC)!N%MfJ3N zC8c!&+3g}~x=gW0e1~z(U}J(o9>SCqP1cD_q4Qmt*>7JGr?o9br2v)MoE#2y!)TRI z`n?W%g5}y{UVVmm<5#6#Z!f?b%3(iJ+Dw=SsbLw}ckipF?O=%K)%ll?*J?e+R5WMq)-s+3 z7zt1F1zcZ0!F!4e1eG&E>HBV*Yj2~5&Vo$h^fgRiV~#iqsH3`9&j9g;f5aWH(dB#S zi$X(-RSl(X19m{#^AX^vUH`i!pCZsdZ0K0d%2S^7w z{P)%I=CEGz%s(wrf1HN!R6)?DHB#U+6%JZKZ26-5%@bjx6?i^6^^dke@qx@C_w~mM zGHWdsir3g(ndE-{jJ^9jhc z6N@<3(8y|6(ULK#vJ*pq&+qVHLFQmZB&vixK6EDO6prD~hY!L+j{=RZ)FY6X@rg13 zNF1xVIlVxleagI23z~IvWssvBi%dA-8^6r~6JT%O53#}$RIytc>A@kf$3Dpk=MoCO&|bCUu-TQFsI%7vISLg~HTtj^c$&E`D+u=L&1&SE-{Eif;3 z!!$Kf>OuRSzf5|6pJOQ4jvSeR9?8(={g`1xKC;@uKpv%5WOx`l~X8HflYM>BR==rru z?1O)sy%IBeuihE&(S15TAL1MzHDo~kM8TmQP0DJGtkJ+5s=7=h!WilxC_suJvube>`N zn&1W}ru-i{3$u#WdO__yYm6$8<@pT;fC^Rknu9%GxvgJ=3=rLmL+|rT*lsrVPhR9x z{bo5@FkfYL=rR11zDf~N3GLK;TO?XMCTDz+!a8F0Sw$g+_2TcWiX4by;A-qr+~~`A zD}&>>70<$Ilzbto5OLMq8-<=I2FbUMn4x6CTThbE6tEb23np+626w%9AyySGwq$5u zSUr)&!t#^o57S&Xyjv8&g?)Jhu-7SX-RS9uUp7XRpFosojn&%2BziO*6M;YVN;! z-c@uNfA1S~5z_>gZ{-4#UB@~#bfPNuRhfGIH4Yu?jOW*QjyzcJz0m}sYm45|UbnD+ zFdm`rS)mVst5HsU;@L2sH9m$DEGkS7f49z!c1#^yj&}IOO+o^2ee6x@@RG6VhNr(@ zRMZ-P$?FjrF*AYR5xV>XmJwDtgD> zQAfOryr>{tuLA)Enk{b^I8R#hOOIbwc$wX=(L9D?Pmlm*P4~=P(-aVzAw>%0rkjX<(1m0k=y+=nNk0zM8kYK10 zKiz&yoJR3SFdgjfNy1e#BPn{~9x^f?6b4mPGtwU_sE=R!it|tt!-sN=#PZqTIPgje zINIQq91oAut00#Zzd(yv44%idaINuX{gJzsvI%L&&(Wgo))90_#6GW_-nGN;1fI{~ zT9%6YnV)>#6s(s&7kIN9)`X75g<|}=vncSzH4ZOUWT2SXxfdg{{ddfLu3!U*ki4$f z8eogAcmXiX0OadoAIYszrL_|bUud^NBMsIhLwp5`rP=k_e4xnrz6XdVh+U-$`d!Br{4(ZlPzsU|s z1MOqUB||x(qokvv5DlKjUlw#WCHB*?yVU|xw>85LffeZwlrPn(A=&l4A|hWHQ4de9 zzK?BT_v4IlQYt2B%q0}K6f0f#P}RmY@p{kV(p!*8-~gMVgpkqO7@CUEKJ2Sx7Qpx7 z@W~9yxleGIZh;`af@FI?j+65J9XTBiyb*I)j-Cl@SO`eL#9`6s!ydQ#vC}Qz690V~ zwWpn*%&3gu@GWsfQ2QIS(?ZhRT}rk260jq%Z+E+Lf_ZE)jW$-YGzRY#*#}6r?^c)uoCqgEha?R@FdoFp?)*F65y*jte9$*81 zke2M*%7&S{Azz6h4ZA<_8Hy&bhlU+$h^>em5p^D#ZX>)-wBm)65J#_%I0ON>kpJ#= zQt~p=Kgmc8J51Ue+NA_8$1 zfhn@S^e5oyw;%OR4V8C)b#^3#b{yTXLjwh-Fl8-jr&=uVq4XGC9@0}B%Ki-wIB^s@e&a_SZcCJ_bNp37K z*s6VLB#i%4L`x(}>X^~9oS{Xpl|8=pZEuP+;=M-kV6WTd=-zQ#a(7$TkL8QFDN5^U zax#c}`2Um^!R2!OC9?t1jWC0ObCqP#Rtmu+kS$|CGRC#|1qfzCRsscp&$3ig@iNCYp}`mF2m$ zlB?5ovl17F4b0&=+OOI+x;~7O^k$46{duXUPnOs6V4A!yz7gx(2T?p&)FQGG>Nd*s zsP?sT7di72Yp_phRKDmCpaNkBvP^xUK%r;o8gtF=qR`=$WlUa+C@%&)CfJ<0^cz( zkWfNgOWF4Ps&jFP(S6mFL?Hb<4Bf*pytm=(G^%C{JuVjUUs5~@T9}lBI`VVTVqeo= z&$FQ4Z=n{NH@}x4_H9(oHoT1#7;D`;s8X9jc_Tm;ArZ+xj};c;xo#(Q+q8Y9&CL#& zMK7Fn9mT2B3tRcW7a5<0>3x%I=q>rt0PglN!X)^vWh1;4_&0lfhnIxTXbCjyi9Z2v zj;fW52?8Ay@3DloRIlgO4Y!^55j|kfCZVE13l@Zoasy6JY!lHO9zSxtT*8LyCn-}| zV@xOwoGd<4f-d9n#^3#o>-#V}UHdlwn@=e#ma~j6cHbL!oESY2^{``fs3`%#dHe7+ zEg(zw;Mo0BHp>M_^`$a5tk{(7Bg*qDzn+-)df(4gEZ?H3u-H@*{bA-;P69cBa z4yJ#HiSgV;#Q)XQN#$?=j6(^+d{#v>SJ@U!W~IIH9riwSMAu*!EQ~4^`lXeR3WL2- zUsELh*Xza|iJ{$&Evxx}09q_vaQ!E^fKq6nDra5Uv`yB=*tbovA;iEN3yAJisL6H< zOtWOXimvJ|zx#S>WFtOG7Fx9C$GFk|2HKJQG<*1z?t!mbF5*G`*`~&m37BnApLs^7 z`=kAhC0{HkV7y(dGacV%Kb;}12;9>6yBh#A$n$#c16QckEJycOAoBDa41`-G;U*Dq zz6oB#p7@?Lc~Bsmct~XO;oxg*z~x*Vz-5&bQ$V+RXa@H3qbVWc#8miV_$CJ!iT6Ry z0lepm*;?Yp=zjgUG;jvja5^iGy#$&AI(gMWO#- z8!WNnEoufWe#oyF^5QyH*L%|AbREddCd=swepeC}5otbQQsZb*N=n3Ge&DewYtfrWe_nj%US) z$sMTLNv%y!YR+^`zlp1C$8tbY500F}v%ZCB2Jm}ouXCKV5#D5f-mbdZY0>epmBBcPTn09J zy(&n2ea$IELiea_eG*m{#ja75BIc@bk26RC5fxy@YjJCjk`TNTo;!C2A`Y6By>}Lc zsMDA-n#0*s{BA*PcCf?)W)!?|t8am!1 zNrSuUKNouw!9-HZo=s%W{-=VFf5^TONFoa3U~^vJ0fhH*Jz%`Pok~vC4cl@iRpHsN z-o4vY!^VUfFnAvR`)OlM_+F*Jr&!JM7UZyYKjGC5Jw5(4kw=^1Q`1WASpYyHOJW^y z=fJ+m@0B!TeYR9Pea`>E?|(A1^71Tzv}!)Q%a6T12&wJdh5EAmdpbI&DzH`C)-VptQpGv#R<4m8i8YV z-~=59?NPLkbtJ%(Z*r`heD9SE05do6qgt47U4LQDMAd`ZZRjp|z-j7g4XK#7E*xBJ z&NDVgw_jdW#PF@@wy$*E6+A=$8*b&O8)0o_&F73%xu+V)s?~~DzRQi_cSZ3|?!cLn zVbh!WA^ev4z~_>}99sGR0fcBaetI_kV{KE1fA#OARDk(aL5LOG&F6Aaji_fiX7k6b zSH}Hk6hahKf+MW4rIDr}-uExkX9>U~)v#0jK_UiYi{KnP+ojsi9%7cEA~UHa>1J&1 zf_*)I%kH8RU;jorn^|0RjG7Fh2~M!xlOe)t<|FPLPB&x0gU#O`0*%w>kvoEZw_x2) z4BI6f9}iH_Om$0b2L|rU2rxRTh3v@wxtHwBa`p`VY^yjW9=cQ|YuqmxQBKBG)LVXM z^0O&_{jm%VyBK3$)kUQw&YYef$31p=h7GKVKf^Set})b@gT>FkzhIdNDAh!VFI?G# zz0EHHTPoX1df|6t>#DoAb{zS7_l!~se(e=LRiU)A#VKZX^gE@B!PU$z^Y!`EJw;RZ z8ao5WRo|BD7aYz=g9wGscH9Z7sT*bgu^9)@ojK^Y$Yw`N%~G*~#ss+gL;(C3lwse; zaVkFTvjk|kul0-zdTP9f4$c0UH7Mae_fZ2UuHbgiVVGl!@hqlyVG)<6L#PAUlH`IC zD_>|}=tRn}Cv*7goizH${4Xu9x=K#k$OYPg!cXuXXF6;9k&bW1(R(0?*T5L z_98Onx_o+*u=T;{*McIK2!AeG!ZVkqrBzv&Edyvc%zs~)o=(Yb5nJvCcz;9k$f$Nj zzj8axAI^>9*mt$h2h?!p^k1IpdQeuiH64wESThR0=k?74eIZ1kmhHvUkfL;uA#f2AyZ5qTCRc zM~%j69@Teu+m}w8B48jVdSOOV{hfm4iA)nEz4{K8>c2UN3qaGIkOJxnU!lwAb`OD9 zi@G}jA8bj?*_sFKF?w`fEq?k6ADd*iv7eEp{5WkxyLu8{w46c# z>W9p?PL$4lAsZ4wrXNj^r9v9?x|JslT_I#bJ4$4@IB*tpPRa+SlM8c&1^b2)7AG0J zP=8OnEID%B*;_mU2qUm!Eve)))E=Yf_lxXRI3RKFvf>NjP%HJc@l;zz;V;%guw9*1r)x6; z1L^z+=4EGJf4j#A?&04zGS|54)i#NKRMw?o1V)0ls;CZRG>7pjCYQGy=)JQMpF_Q* z)u_u~=j|(jE$!XLZKuoqM7kbQqjUjo!B-_?_%1KK_1Rud`XBxo%efh#n=Z3Rn(*Az z@v%25=1bT|O4ZtxwV$b$>@Mc3zftiY4q>Lfzi;Mw08cuvmhd{K2$ZaZ@yUA<;SlSZ zJJoMPlJ;?FY5R2leLnF=Ub)!5k&4&bF+=WU9plaXoXHB?|9d`u%)%{x|8C_^I z%Ji9o*@1@{BzuN_L+Qn&dFR85$4R|wukD7;JtkdI&JXD4a%qtUcqBj+UV_ah_OO(4 zx3H#!xqtD-#TDa~Jo@L9eDpD7VGPE&P4~?s=jP?LNj@j2vDFt#RslY%&i)$E;&amI z@`n!}0O7YjZuN4kx?eb*z<%SZ+cl@z%a5+8oXR}g8Can_q_TJ>5XL-cRUFa2uUaE@ zQ(Es+H=K*h>h_sC3s)DeSMFj9yGqm>i|4(w@e`!l6T}spt>F#FzRx-W*zotiwV?Cp zn-%*Zd{a5hY%YrlKZ`2r@Wv!jvOY_ye&`~`65#1`K9?jebtzWE$w2b-I9mue*EH8f zh-S;Vt?)=^)LFHrxRN&9($m^sOvxFPj;yS|O>(}c$sIA|qlN?Fz(3(&PGh7LnGUd( zj#3U3e%-P`TCz982og{k{~~Pl1~WQNYW}Gg+Dd?7&-@R{q)BF7GlhKa{pDN)@%+3J zk!@ZfRo4WbT0MPA)Od%8q&TLvjc}&I(gW!T+zImk(yJNQ^njkoR~s*Mz#r*}Bp)!S z5w#8jd(sWU7ulmA0C0s#qLMK&I=+DD*-Pt|nxZ`Q$H4;Vnh&y%BmCR<&Q(pHc1iH6 zV9|Z6?1PhLo1RM4F3e`#JJALc5UZxFI?MO~9(iK^+I@<3`)9?nW!t+XGFj)djs(XYaqUDIh@^hV6cTD^cin7Aa8FV0 z4+nVNvxb3?Q9Q`#1IWL0V?{DOAUrNg+C^k9Zoc69;BH)CYf=bS%a!YXtZ2XqIu&4% zwIbhKiytVAzUy|ar-+ii_{tNboPlP}Iu|T9FqT1H*n|one&D&tmD77cg8=PG+j!gHs3xse+~SrPy@cIdVT*WB43`N}I!zdesL z6AG`_Cws78L~6lu!MlOQ@ThT*y~$LungpmVtX1=#9!|I^ zZ2Sw;TdL`a1Tu*zZVqDa7ycaZ@@Il_#n^0UXDcWV13I!}tCpzF+^wm3rqzgwT>M-+gJK2cYX>QhWe{ALj$`6HBH( zj9#oK^{5)KzBB#t{-d2^nL3xEYZ#p*N+}#_1?h;28byKn5R)4njTa8@v%UrOaQ`se zQ5zDn)Sz@m4>nQ`+)=bV>5u~JPkm|TnzK8ku?*T=r1P=H)YH^! zBuJ}aw`c_<*2y#%xbdq#GT0UtET+^GZo5Y5r1~q}a23Ueac>%e3X%n4D zw(+>Yay*iF@SXe&OragK=I#+S=)N5|a9Jl&=R2b_T>JP|<$4l}&)M}GZE3=@-jx2~ zbJ6@VFD||()w_+Wdvv`qps^YXDH!=r0jUQ#Qd)tSnYa$9L?CxXu$)q_ZeQc)?pV?J zvQEagCC1+pCTxM_imh`$EAW!-o$`_V@5JigK}`i|Elx{5k%U zbsg|~={yP)%)O6jRl)`Rz?238-}RWgu_#jvsdiZci&C8p3)=DXHt~~&*K{WzF7I`1 za2wqly3ynI*#mPBgKs-QT>#M~+?OY#1$O1X4=3^-a|v4CJrK&^twwN7NkSrE_U*asL1AUsW} z@QYl7^L+=&5;J%ur3`l})JPQoMke6O>E+ONHR_0g#SNiEKrCnR%(5UXIA}fn7=yA>zlbT!CGv zc!E-Z-21z}Ch)42cl3S=vQvY&87#^}OZ`U~h9c;y5P6>pgi;mBNFWGHlf3xZScnu9 z)8v!Nt^S*(*cpKz3_zQ72znk%=*IN=ZIo@)1?Qd5DeaTYO>o|u@`3+W6>}GIJs9*L z;H=gS?X{%-n%d-&2zo>|X%|X3fZ9Kn-07#Y-6q*K4exl(>hgMV){^yodAx-oFBA(z z1OG&gA#i3nX74Y*Jem)+eF$?>6Y6vQHseMFsJ3t-ZlCRt$K)}60G$XeuX?Ox*LL63 zULZtGFv?@{+7t)Kn8TM+t9^e~hh&cli70TH;d}Gp4g2ti`yG%#J8s2D9EG6E1^NL` zfZ)Qy5VcjMC@&hUJ)WSa$5hC|wP4k->{)~d4t{7jeyEx+xG;Jms!^)B{7Jr2$p}tW z1p*9UXde^u$Ku zRUD>d*XA9O2MNF&2#QRhe3Y}Ob2V^k17VYNwei+(Wf5hD?sOnFNBR#3VSXJ+^ZmN{ z(j@c~vPu%4A(#685`71xy#=;XVm~W5?MZRIu+Kgcg%yT%^V1TsgsyeAc^1hXP}0iX zPdNzyb+mZ+8MMz6^?eJRPw2w+6Kl`-$e(~4fC4rz8*UEyq31f1Zr=k6I6u~R+*cM< z5PlAu&d_av*tU>LdTCOAb0)|ZL8Q5yBJvjp_(XV(UQ1;;ngpmui>WuLD}S(v`|8ImpZHW>bQU5n5W=i;33foRZ^%12;LYB7A}v0M8;`56}lnxyqLxN*LUI@g*SNHG>P$ zjy=7HM75x3_xC$cDIEBIprG-u6whZ#y}OnIatj_j)WqtDfx2E!Hhlm%ptnuIJzC;5 z&IC2OF*#4uz9dyf2c! z>CYW4GPuk4n}yrI^xoqpc<`T41qTNm9KFrr>_#^N7=^i?Fb%K%{&%+;)HC9VL_V~Y z0A&FXye;{Q_7Jd ze5ocC8>@BNZ&Ya-gzSm%OFwMr2|f%7EJG*mV29t_KUDbdj3F{jRJZSR!JbSG56HMl zm~cF@F1C6iHgFuP?f91I`_A0H@?7G@O+8J;>&Y1|-UdTI_b2`fQX4nOU($wh z-(Gck0bbCP?zd3xUv*s}C(bjZW9F0E90gw%W3Cr!S$-8<3A7S^) zxaewT=xVp_^`nQeUgZnU*LUxlpDLh(x;wLesqs^_u-CxkH1v-MnJPI@A=T9)ZaOgw)IJ)4_ZADu9{m!HZxs8*KOxC?W*s ze=(h#1JnaoM1I`#DAj4bb{T#Jajbn+rPZVYP^gAhpKF1VmE73I$22ZqK)rZAKz{%S zzr>G4KO_zte69ly$g<~W+(1Vik6sc1b00ktK>1Zv!xe7H&LBTD?+vItkA}h<(ZC4l zAmEq`N`3@l;K~Hh)55oktW1X~7xy@v$0*dkpq}zwp%jpB0!FRyPU@#)j>Q0P%5! zCQ9eVc&t$=J#|Q>qY6ZR9sG)V;{0)R+sUPtKB+plf%wcF* zI$ns*wfTX6onScTziTfRh5`!{+NN18Ny4)Tx8#l5JOm!5*=s7f>2v@DUv?zGFIq5& z0Y*UW_BpQDM%sUl#Fk@G6T}AE61vEw`s{r{f(MTvBloSjX8=)vJeb{*vni{`S|W)v zZ~lQ1WM7hVmS7y5364fT_1={eg?50s@&Bw^9+)wQ{TdFww~ydy&5S{C%^pvPzW1&y zSl{UXuVsX>U?c{TCqLrM(53k!@q-HGHvha$Bs4SOyt zlPqctV9Wf{{#!_MZ?e2whyh*U1IO~W=R5G-+E(J%9tv< zuhIYSdH(S`Oo{%v8*Of*)M1x_#ead3H@5m)w-2;HDL6mP1JcQb^+8|pVniPFK=@Mr z*JOS&LEwN*43+3_B2pZ{L^=}(SlS2W)on?2cbxb#H+HXD?*HDx|9XA#A%ZO(IcJ-B zXphi)m7Ib$9CB|!kYm|LHvgWuO!secJ&}(pg z5K*#1i0m?w5h)`h^GKoy5l#{zBQu+y081XFTWp7+eaPY@EK^7PWKAI-;(}}Vym}SfNpsaQ|%lF3g7}~UgU!c zBLhh2&nxM~3QSwhNDvqkum*0RPbI?GMUviJ0Imtvh3~$rc)2ASow31B8K~BwFMn~b zhnWigTh`t~>1m@KEjC&0t@{k%Ydjed6tGs&qA;Vb_Fk+%rgyytB;!t6O>9jV1|WbvxFH^&Ov6RbF3^(wx!p*fu#}^V*^ckZZGie0!5Y~``f2Vu z)QJUw+YDBOMEz8NIws!$qG)0J9~Y)mI-XwaU2S|hEk<(fgc@lf_X6bSK1VmsXe;%{%@Zh%d;26a$c3tBoZioXTI1RN)1n6FwM+G%Mn`WMX z!0v8TP6O`zg9gYcK@!~neg1&BG|zK{m#ULZV zQmr`;3?W7-HnW_wRG4iqA$wH+U=SlHQknAzt>&Cw85rpjDDjvvTY8uXv<1QLm+}eY zP0xX48|lyoA;7N%SR6%P3s74p?f%UQ=|D&HnzcLkiK)DB;eM4(fBKpCw#N%o!W1#`2G zX>DMNqREXZqeb9?kXR^tY5dgGv3l7NS@cmQ0!;zd8+fo17VRE@P}c^nM{?EuF0dk( zphihlG-5qZ>i}5j{yNLr+?}@=VvJ``0f;gYsB|Icb=>~}#{eS#yIbxoCc)AvT z3SRZH>Z)oP0D&<;0P

    KcOyolf}O&56Tg#a~iPnK)J!M@cKEw3w>$m)9SDC2~cL z)RRpy8cZQC41VgoX_+cgakIN3oZ=d%ObQ zS+b?)lus+OFSy}M!L)EINF=t1WcVFRgzolIG#fjiO=BanJVqqIuYRGCWsinEw5B}R zoRxlOX^$&WWnXc?K3s?i{B~DNLuHEU75#6U&%n+QcaR|dlmi(%DYf_(5lqXP8MbM0 zwb2$7Y)xS7bGAM+)=pr+foZC&mVV_D;Y;;ULf#B;JpZFTjtHrbh=N-~ z9TX^ddSda4{+IoPhGiK2`?G1aP-U~!^5Nj!0mV%{U=74mG;92E`l^jpt1piJpPt;3 z5f%FK0J3hpzrd9jm)}L>go?Uddeg%eIooB%0IPg1aXCS3gTC`Em=ao(&LgwEKb5E( zypwR9hW*7wq2wRjS(v{GgQ=&j#esE{xf?>H;}UtgaL#ZC{v7DhrV0wJa za*-0NPI#W5=}+jCyBZ3jIWNFoRc@z5zDGxZ?o-yO`)&kr4eV<& zJE?65V;n&IHoC)UZquTv(tNm#8PSLOOyqw`9_o#?DJg}3x|@y?ur^9eNtvxz@o+S% z>AuYkt2|&)!8^KbFXBRSr)|bYe>h^5-vvIAUADjDSo#-MXc3#=6H0EQ!$qqSNsGk`}I^O>JQ`d|InY0|p$ zHa6AtvyRU2_kj_e#3AJ<#3icqX3P0~k5}%8qt_osBo}&Xr4=-8sI721x0Z-h8vHFw zLOk=qVT~++lLu{N%-1T53wO@dubWhG7uqLTn)KOe;Yu;cYwr7N=ezbVR$%Zq-v#<4 zI+w49D-!>y|CXA{#@}ng4>)MuG^{5W32sd41?GLJE3dz`WI`hcG(D$oL~;io&-B$D zXaLq(Z3G`F-fJ0T4*UOxR2)m6)zob!ED>7G5m4|$c~5(G7U)m7D$SK-PCHLV<7WT%&_?|HxhjcoFUSm>Ss^jsKs*s8 zKu&Sbm#|@5iZ?cHISD?$6xEes<#aJj(=W6R1Nyt)-LkDpCS=#B z=DkEh$#RpjfO(|(T~Z_v#4)eH2em}Wb1-wJFsZSuh}%Plznr4pd{r?o5E_39sc*AqC3 z59{vjjpZ4PGZ0r@B)V;Lta&*B-)y&sB=qB=1Y*0_qT40U4m+BK%ntl}C*mpw%A7yG z4tZ;Q9+7GTQv;hIya?E9YB};$%abFL!LA9%;7eHRRgLY|(7}4Mu`aTTM88t1bH}LK zw`CIsF29~hyz~gS0Oa}&qgIdwI3oZ8q=y|ilmQxz>X?F)ij6La0)ThX7!wG*hoTc# zg%(bpjRgRy`!K%s;BQ|9KUX$JeEp=+XuSd8En=DsyB%4;x-CMDcp2gmsX5nLx}+YD zq(0qWr|hk~EaGGIzSH9Bqd_SEzD1r*X;13-wNw5%S*Tb`p4U;qZH!=>Ja+f#C14mJ zK$wnP=OqQh8k;0CR{KU6>T{`fYX9P4wP#5b31AR>n~;@lx=Tt`pp-jC_|Zg}9P0SZ z{qyy#atcUVY=wqSgBDkkaTzp?iOlIf#9&tiKAeIFl)TAY8i0I~+Zs{3%A6kX;|8OJ`0Wo%l^3raWuB;!`M z1oGKorMo}H&(aD-R)_m1k^dmROiXNo8M}BR%jp@mNKq3IAR`xCg7EhnVMd(XAFs&h z+>7n<)&T4p7(hfCJaX1}u!PTgBcZ)?NYR>TBQ)gbjt`X|a|X@(Z=C*vR8G!PWwarj zR4xn1QNYY{tpVPqN~+)KcU($E`jyc6tqnRTTwiF!OWPjSiUUct*83Q!JLLsr36}nb=`gfYqy`Q z@SPHRkX9bz91E!BwvCa&th}|iYMx>|4?oEGc_i=sll_&x-QgvA8m!Dp=f=XL$J?oP zB*r7_Kj|z;a9*j&%e8tQ3GCfQ;CF3VmSb*u#@Za*?+=bRpiR5#v*zo--qCB!@D}|# znd-IN`{UL=*3bV$GegkO6g+a*pDT?e>S-Cj1J^c)F?WD2%Z+24BV+s@ExJgFQ++>b znysDeGLEbRx=#RlL#i^ALSF`vZ<~+UC|1i6wgP@J47W*m82W6=8hT7XoMzklQ=ChU zGsAg@Rn%Tj`fM3^Nu?V(`|zo`Y(??d3ZqQ9(F9+S{!(uKAQ^rI*^trKczJy^*QgI$IGUJihFw#wj5vj-P0Ka$yiPp z*+_&>RH&Vk0NcBF+2;VS>Uh9ED~EbqMK}EkW%TT(M~&a$KkY1v3aV?(J3A@{dt#+z zdIW5RYg}n%0%tdlqtNr_6{V2jVE#Gl409*PF9~OAP<9m4fIr&UE_2mA+PK9T3+%5~b$7VL(mp{5*jT1_3>7FqHepJ=V*HZ){ zue%lLBx-HkF6;_9h05cp^9##LbWAjN3v=HZHS|JOZOh->%0FK9B$KYf=SyarZ`FHI z^S=eTP^Rz*stg5$2wrNRv#m>&+B@!c&{Y=7gMDKpEC5w+=iyb6b$6IMoNQJ^zY-=? zKBX%>lunyKAZsGb0jsrmNdBT!r(#Ln2d|NC;GZ$WHdO~4y?!5#n|vk$+!=Z40WTSp z-VDEepzw)to=uR+dCJeN<#1K}GD&fCmP_0B?N<=<-?@;T|IZC#y?w8e+1dyfviS$V5@?|AH%~JcUYpoqpyC;DHhh_uJS|8Km zqvU~n@T+oNdS(O^LEg8yQJ}s4Y)f4jnYwXHLAaKdOY^aJ$OCj8Lc)5mR99Vwmx8yU z8|_E^=Sh@4SbC(xxC0&&zZO=sOYTF#Qrzg6fZd-j2&JlJsk&hyJf}%@>JMYlHoH5z zT}VCEF%z{HnZ#!Ex5llUllU8ZbnUmMJV{l(qr$kqj$^M3E?!VMdBuFHRUb_9fEaVz z#Ofi}yMrs}{gMu{l)n#!N)P_xS!xm3Vww$h#+n9)dfvFL!*-}2rvGpN1f+oWebr-0 zfID0I!Xsqv5^~OdR%zc}Op%_Ho!qsk#=exI+{L?-@vco_5+lugsO&(Vsm9rE)b1Z|gh()RVJFHZ- zfc*P>zFajR7_0yD>nyzd^}AU)VxL^tN2|*sH(bIvg5nfypj`;Dw9NB_3F;2t2+hX@ zVMUZ{=s`zKzEhmQ|8&3{3-t3^SAygx*2D&hd@!y2UKjf4djc|#->&{Rbns6*6nSw- zffyhpk!^y%>_}SC%5yNy{s=hfnQd6B>cs_VH@DfM<&Es#a zUraL?wbseZ1ooyGAOmLwS(J~C5A&Lo8K)eQPn8ybDX$lr;GD%YsCRGg#md|HrsfiO zTDAE@1A9SkgkT}_kz4tlci!#a!1{#{fH%Oy3DGum|TY_ z*F2AyJifrU9yRVRC4aHP(R1UYG^T#Do6D!B85KX8uosVRtcjyXyMJ7P%1dz29D%}`%31c&G~x^*=u48(*OB=Rag2gYchNp;a*Fd>RM7$+JGRed zP19s>MU%}^{39h6vIj6ccFcK=ZMX8-LF(?D<6eEegyM3EVTm#O=6f&n1`bMnXINr2 zz2lC;V}{dcgG3JBP+VQ{cG=y$?AM z*6)_@p3VyEgk(&J)>nL;!XQh5BhYG-jH;e}J7Pmye!MEDQ`AiEE0>2H^3W^7U$!^Z z?Au^&Shr~3kVLZSkbH8T_;Bucx5)cG1)c3Wy2Uqj(QDXZ&MZGUjs(oi`s}hq(`2nZ z=BR24V(=tp=h8ESHGCfa0R7&T`hpMsAx37{qS_qUaFa93E`AqLhQxB_pc@X?5E3}8 z!JMG%q+HDS;R(@4EorVN@K`pIbg5T~cc1PIS_4)zag|-260R$W4%Ama$&#wLyDoOH z>k%kza>k6eHJ0FTwGd7Lm7JJ=hs|jw{WK9i?7D#E%Sl70uufEoBFY z!KxMn&Z8joU;sF#r1p18_)*|>i;2H`MdXv%r?T+tToOODMW4gcg-meap0GbE%YIP3 z5!AHvc3zZ5GbYs?U#y)Kn=bl%$KiD;N$qCrmny z^sQXe)!X|fI(BI9mp|Uw-;RZw)63>}JK|X>M&A(U6Bor9&?P^9IOK+ryU zx%%Gq_FD)W!*(l*Zu$PT;=JrL?Yj4*iBRDqLoD%(Ef4C_5=wk44Iiwimwss-7{+?y zv7cwjyc~C^@CQ+c5r%GKhwBe5s&Rw;(t)8#TJjgpiPgaltIrSm>M+NfvyYo845{YZ zRSLqc2#sn(>#P#@btMBETU))-@+S_FIa(e!u-nyfK8vf78+43Qz2WHEelvbY?1VJ9 z2?%;h3PGetA&5Z(f|R)b?;rl}ef%#D2ekC$E6obK)yfj^ms23kD>|2pRV@AgAKdL; AlmGw# literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/ofApp/src/main/java/cc/openframeworks/android/OFActivity.java b/scripts/templates/android2024/ofApp/src/main/java/cc/openframeworks/android/OFActivity.java new file mode 100644 index 00000000000..598ee50bbf1 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/java/cc/openframeworks/android/OFActivity.java @@ -0,0 +1,201 @@ +package cc.openframeworks.android; + +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.WindowManager; + +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.core.view.WindowInsetsControllerCompat; + +import cc.openframeworks.OFAndroid; +import cc.openframeworks.OFAndroidLifeCycle; + +import com.getkeepsafe.relinker.ReLinker; + + + +public class OFActivity extends cc.openframeworks.OFActivity { + + private static final String appName = "ofapp"; // modify this to target appName (ofApp etc) + private static final String LOG_TAG = appName + "::OFActivity"; + + private ReLinker.Logger logcatLogger = new ReLinker.Logger() { + @Override + public void log(String message) { + Log.d("ReLinker", message); + } + }; + private OFActivity thisActivity; + + + // Extremely important + public OFActivity() { + OFAndroidLifeCycle.coreLibraryLoaded = true; + + OFAndroid.maxSamples = 4; + OFAndroid.maximumFrameRate = 144; + + thisActivity = this; + ReLinker.log(logcatLogger) + .force() + .recursively() + .loadLibrary(this, appName, new ReLinker.LoadListener() { + @Override + public void success() { + Log.i(LOG_TAG, "loadLibrary success"); + OFAndroidLifeCycle.appLibraryLoaded = true; + Setup(); // very important - this will in turn call main + } + + @Override + public void failure(Throwable t) { + /* Boo */ + Log.i(LOG_TAG, "loadLibrary failure" + t.getMessage()); + } + }); + } + + @Override + public void onCreate(Bundle savedInstanceState) + { + Log.i(LOG_TAG, "onCreate"); + super.onCreate(savedInstanceState); + + setFullscreen(); + hideSystemBars(); + } + + @Override + public void onStart() { + super.onStart(); + + } + + @Override + public void onDetachedFromWindow() { + + } + + // Menus + // http://developer.android.com/guide/topics/ui/menus.html + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Create settings menu options from here, one by one or infalting an xml + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // This passes the menu option string to OF + // you can add additional behavior from java modifying this method + // but keep the call to OFAndroid so OF is notified of menu events + if(OFAndroid.menuItemSelected(item.getItemId())){ + + return true; + } + return super.onOptionsItemSelected(item); + } + + + @Override + public boolean onPrepareOptionsMenu (Menu menu){ + // This method is called every time the menu is opened + // you can add or remove menu options from here + return super.onPrepareOptionsMenu(menu); + } + + public void onRestore() { + + if (!OFAndroidLifeCycle.appLibraryLoaded) return; + } + + private void hideSystemBars() { + WindowInsetsControllerCompat windowInsetsController = + ViewCompat.getWindowInsetsController(getWindow().getDecorView()); + if (windowInsetsController == null) { + return; + } + // Configure the behavior of the hidden system bars + windowInsetsController.setSystemBarsBehavior( + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + ); + // Hide both the status bar and the navigation bar + windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + + if (hasFocus) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + + setFullscreen(); + } else { + setFullscreen(); + } + } else { + + } + } + + private void handleException(Exception e, String details) { + Log.e(LOG_TAG, "Exception:", e); + + } + + public void setFullscreen() { + try { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + // No sticky immersive mode for devices pre-kitkat + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + View decorView = getWindow().getDecorView(); +// int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; + int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + decorView.setSystemUiVisibility(uiOptions); + } + + WindowCompat.setDecorFitsSystemWindows(getWindow(), false); + + } catch (Exception ex) { + handleException(ex, "setFullscreen exception"); + } + + try { + View decorView = getWindow().getDecorView(); + int[] locations = new int[2]; + decorView.getLocationInWindow(locations); + int[] locations2 = new int[2]; + decorView.getLocationOnScreen(locations2); + + } catch (Exception ex) { + handleException(ex, "setFullscreen exception"); + } + + WindowInsetsControllerCompat windowInsetsController = + ViewCompat.getWindowInsetsController(getWindow().getDecorView()); + if (windowInsetsController == null) { + return; + } + // Hide both the status bar and the navigation bar + windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()); + windowInsetsController.hide(WindowInsetsCompat.Type.navigationBars()); + windowInsetsController.hide(WindowInsetsCompat.Type.statusBars()); + } + + +} + diff --git a/scripts/templates/android2024/ofApp/src/main/res/drawable-hdpi/icon.png b/scripts/templates/android2024/ofApp/src/main/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..70b562fba01c837895d163cc9cc6bcac78af8046 GIT binary patch literal 2587 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 e{}Z06?i!pccVM1}WM + + + + + diff --git a/scripts/templates/android2024/ofApp/src/main/res/menu/main_layout.xml b/scripts/templates/android2024/ofApp/src/main/res/menu/main_layout.xml new file mode 100644 index 00000000000..7ddcfbee35e --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/menu/main_layout.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000000..036d09bc5fd --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000000..036d09bc5fd --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher.png b/scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..42b40d2fbec01ff91572c21982607aef7fa0972d GIT binary patch literal 1650 zcmV-&295cNP)#|r<3VWgKg|vBNC0%reU?eHQ=}A-fDlkuayK!iIJV_Zg-Bb2feh`1c{C7WonR0XeEO z=$z@?DZ`=7GAgS48*#fAv9GSK0_yGoh3G#ZqCn>91LBCRC1{YLM zSyc%Nhr`FIF(V7|cs!>lt0_o~DM$is1Z7vUkjbV*`_+=kCUKh;?cV~l5u{^GK@ymP zB-kE7cqp5fg!>DTT~T)YT||39nQR(Hrq4m&_%TSNW<;+GnNI}38LWfxxlSfZ`1%&3 zy`Xd^0hfI5fTj0o@K2m!y-9dX9xjuF8-eejp{ESGM!#ipg~x0$+6y9vr>xNE*bf)_ zUx(<@ZMFnRaf`5=o7ZSHso8Bj6hU8U7sjkR8)? zi+az-b=3S)0M6m@jn0aKTpj!v1|}P!+4a2WHR62#YcLgai_VY7_6VY(;|LywvpCF% zMn?rS^zPe0lk-^|hGo!%uZ@N;iYDp##28rJheYq=L(&H(o8YXYT=bgN{UYn35(`f4 z1tqyCTpz1t0?y(vYv?Iu^N}zB+lQ}FxKLMWpQ>?2>YE0{7t z&p}&X6$EB3v-b+m?G9)oh$dL-J;DHLXmpmt+~Nq#$rMCVE_&WnBZtsN5UoXQL!XKQ zsKr0gfPzM42?{Ut!}LO*l3~S18$q<7qsdViKrJ-U&n8A>38FcRhS^y7k9BV2Jd}~w zo3s(Mn4DI1T-?Xn~rC zdNX}#!t>k&Z3GdqrEy%W9TtU9Mj0*_K4bS}au;gXaADBCelt2^&)TR zq^P?q!HVDfWX#FhlPf5hj)~4i0on;7s9W1dzCcOJuV{4l&z?Xkyjj(iAcCIakt8KI zt<5;8dO|1I(|~+Ch80B6BUNAM6uW^GhT=nOr*_}lFg|A&J+L>lpd49TKu+OJY%|z~ zKZo=E)lAsAn=iu!&l~J^A~*DXS_$kx0a_J%}=qAfL~tz6VWDPuCg!2X#F?J;y1lDnZ@d z-EZX^LrKC9&@GgOev%oF$H8K;d_-AYF4u0Mhk^yUAGqFwJQ55B`=~2YgV?wspe&Th z?RI-G<71R{EwlV;X=x!rd#b9c%DrB%CmM}HI-Le;SkKU~ip65!bUMA2m6Zo5V@*ws z{Ncr~ii(PRaq}qhR9#)&*X`}?md?)3Hk-|6wcG8jd^$QhHvBF8x7=g4qRq9fmCl_q zP!`HW*-A@G@7tJKSrwI(l-!TohmpsTCy*y~4rQP$4;2>|KY&|hLu<1_NxQK(?ZNF{ wZ1h1rLmAex$e)xI6xlWcW|?J{S-Ply0rA^N!KLjsSpWb407*qoM6N<$g4p^Ey8r+H literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..648779fe415f217d487b796ea1feb0b07711d7a1 GIT binary patch literal 2212 zcma)7c{CIX7gwTW%S^Obvt*eN9-`#Y$d-NVYtNQ-lEK(ND$g!rEQ5Izl4g>9Y@@`) zSVxF4Cd3dkmds3y`1Jkx{q^oS_ug~Q{hiOmSO^|%`_567w19^qJ;O7Ig9aLw>R-IB# zxf4DmZ9WZu9thd|Z3D>4y2=d%CL0VKN)g(r^fd{Wl7)+Pmg%7|8ksTOpw`i_DkWej zYiWa@!ceK<(>2jdG6O$I!}^V~3*v|*GJ{THC+u{w=i@iEpc2R9{A+9WWpB+AhNGR& z_C`}_x9V5OD{-YuvutR5jgD$imDgU?%B^EEh~vc+YCzGCI%PiOh&J^E2ZtA3p@81@ z&*#>kJH$h)PE)8llHhONI(ZA;OEPnx>LAXkj2Kufbp8;>C196aX&5M!r2CM)e|@8K z%x&{tgrK%NarUV1Z}-vp1*TI@C^KAA=8{@1GYKi8Q$8u9wg_h|Aig%L(!~xjzL==1 zO^)5(NA1lRRIGdJ8l0(yA8pR(MtB5Zc)q?dhnJ=@?q^It+%2wP zfQBRd4L1epUsw!On@6bZe7SJTDSl(r?T4EdEA2gsk>bHFW3%kN`8NAZm;QHnwqppd zfZlaADFa|jZR55fZ7g^rI4+|<#cRPRCd(O%rr*)WwVb~ef7{H^)3rAy;Ql5oS;pdm zBgX%Ge#nuE6Z~CdsGsQa&QRn{Vr@*FvkD~FV)Y{eVmwSLwukGf}1>F>S_sE=8UK8NmOzYdiwF}2&BJyM@ z*3as4BfhaR-npK3Odk|piH0sefW=5ag{zFkTXt16L7Pnq4D^|0R#l-G8Iubh3IH5U zFhuFa1I>pt0eR|+>*Qpm)Pdn;C@L}OVOUUG!w zb%Hg*L0UHF?+6O{rHGqz)S# zDit$ZNn z4@rjWu}5|J&^tGzy!(0%vw;+S4N$|ZTIYC2SmktypLF12)@X($zE6)K`TEAGPbC77 zXM;1v)@jZk)#AI|R9s!s+Qx%AKa5Y*-&Pw()DzlMCbq@ww${TN;R3NDy)j_pA7Ec| zMIkc1oi!M6B#43PJLE|;Me|)hy&6%hp>0VBJH_-Q)KHJ_rwO-Bd+M>iVi-l1TcPCW z7`pV<0F9J{hs7;HD%Oker|qQ+7;%PNewSWg3UNk+?nTYpzFI z#y}-m!Wgw%Fkr^y|gx3kB?fP zoE=cVOW>6HjsIvRHuSr6iDSnoi>5ikDV*xG1Vk6$vfA@Oq!O9QEdLq2zq4o&rVTrYwxZ}xeu0B2_Hqe}<9A1e_D zB_+jTr7P6ygxM}9*)j#oW*{L@YnqOw{@W|U(}mW>ld0a>{^TG52RWgjd`QVMqBE+RCJcrY9&>Q6E7u_*wb)JD_ zYrYM8|Cq)iFj(5c#NRQYJ3;kso=+D9X0vE&tiMPnB>@w|>h4%}xiWtFIQu_MINF-# z@!T)rnT}mbQz#UnXtZX8XI`yNX@LztX2zPm-!X4~;XPket{hLa-J+4)Rawh3PXy{G k-}aS|xc>E@{(qn?D{sgWfZW9XIqUzk@!?*IS* literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher_round.png b/scripts/templates/android2024/ofApp/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..a39d8826804442c3fbdfa223179d4524c646a591 GIT binary patch literal 3557 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 icaN3S-LSi1llT_}@z$GZ9Hs660000 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 TwU}1-r_N9hsat*9`Ne+#)H)~i literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/scripts/templates/android2024/ofApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..486c62f1f2a7bcf1c80878d77b4e374789d850ae GIT binary patch literal 5158 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 U9=j2{WdHyG07*qoM6N<$f_jzOq5uE@ literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-xxhdpi/ic_launcher.png b/scripts/templates/android2024/ofApp/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6c612f8b1c94965f4ca6965f0d17fee7e457ce GIT binary patch literal 3760 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 KtFo6iq5lihiMUt* literal 0 HcmV?d00001 diff --git a/scripts/templates/android2024/ofApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/scripts/templates/android2024/ofApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..1b64c2ce02da68ebe5935387b0423c71179eb410 GIT binary patch literal 12659 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 kIc`>&s-_a+#(5tSxliSSWw;fL`ZEQfrlh4 + + ofEmptyEx + Menu + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/values-v11/styles.xml b/scripts/templates/android2024/ofApp/src/main/res/values-v11/styles.xml new file mode 100644 index 00000000000..febc4d0286b --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/values-v11/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/scripts/templates/android2024/ofApp/src/main/res/values-v14/strings.xml b/scripts/templates/android2024/ofApp/src/main/res/values-v14/strings.xml new file mode 100644 index 00000000000..5822f1306d1 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/values-v14/strings.xml @@ -0,0 +1,5 @@ + + + ofEmptyEx + Menu + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/values-v14/styles.xml b/scripts/templates/android2024/ofApp/src/main/res/values-v14/styles.xml new file mode 100644 index 00000000000..928e0fd3d72 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/values-v14/styles.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/scripts/templates/android2024/ofApp/src/main/res/values/ic_launcher_background.xml b/scripts/templates/android2024/ofApp/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 00000000000..c5d5899fdf0 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FFFFFF + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/values/strings.xml b/scripts/templates/android2024/ofApp/src/main/res/values/strings.xml new file mode 100644 index 00000000000..5822f1306d1 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + + ofEmptyEx + Menu + \ No newline at end of file diff --git a/scripts/templates/android2024/ofApp/src/main/res/values/styles.xml b/scripts/templates/android2024/ofApp/src/main/res/values/styles.xml new file mode 100644 index 00000000000..766a2c3f143 --- /dev/null +++ b/scripts/templates/android2024/ofApp/src/main/res/values/styles.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/scripts/templates/android2024/proguard.cfg b/scripts/templates/android2024/proguard.cfg new file mode 100644 index 00000000000..faee26e7f2b --- /dev/null +++ b/scripts/templates/android2024/proguard.cfg @@ -0,0 +1,59 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keep class com.google.android.gms.games.leaderboard.** { *; } +-keep class com.google.android.gms.games.snapshot.** { *; } +-keep class com.google.android.gms.games.achievement.** { *; } +-keep class com.google.android.gms.games.event.** { *; } +-keep class com.google.android.gms.games.stats.** { *; } +-keep class com.google.android.gms.games.video.** { *; } +-keep class com.google.android.gms.games.* { *; } + +-keep class com.google.android.gms.signin.** { *; } +-keep class com.google.android.gms.dynamic.** { *; } +-keep class com.google.android.gms.dynamite.** { *; } +-keep class com.google.android.gms.tasks.** { *; } +-keep class com.google.android.gms.security.** { *; } +-keep class com.google.android.gms.base.** { *; } +-keep class com.google.android.gms.actions.** { *; } +-keep class com.google.games.bridge.** { *; } +-keep class com.google.android.gms.common.api.** { *; } +-keep class com.google.android.gms.games.quest.** { *; } +-keep class com.google.android.gms.nearby.** { *; } +-keepclasseswithmembernames class * { + native ; +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public (android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/scripts/templates/android2024/settings.gradle b/scripts/templates/android2024/settings.gradle new file mode 100644 index 00000000000..cb352f426c0 --- /dev/null +++ b/scripts/templates/android2024/settings.gradle @@ -0,0 +1,11 @@ +include ':ofApp' + +// Define the relative path to the openFrameworks project +def openFrameworksProjectPath = '../../../libs/openFrameworksCompiled/project' + +// Convert the relative path to an absolute path +def openFrameworksProjectAbsolutePath = new File(rootDir, openFrameworksProjectPath).absolutePath + +// Include the openFrameworks project +include ':openFrameworksProject' +project(':openFrameworksProject').projectDir = new File(openFrameworksProjectAbsolutePath)