diff --git a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h index 3baaebfad5..e60a86c680 100644 --- a/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h +++ b/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h @@ -132,8 +132,8 @@ public: androidManifestCustomXmlElements (settings, Ids::androidManifestCustomXmlElements, getUndoManager()), androidGradleSettingsContent (settings, Ids::androidGradleSettingsContent, getUndoManager()), androidVersionCode (settings, Ids::androidVersionCode, getUndoManager(), "1"), - androidMinimumSDK (settings, Ids::androidMinimumSDK, getUndoManager(), "16"), - androidTargetSDK (settings, Ids::androidTargetSDK, getUndoManager(), "33"), + androidMinimumSDK (settings, Ids::androidMinimumSDK, getUndoManager(), "21"), + androidTargetSDK (settings, Ids::androidTargetSDK, getUndoManager(), "34"), androidTheme (settings, Ids::androidTheme, getUndoManager()), androidExtraAssetsFolder (settings, Ids::androidExtraAssetsFolder, getUndoManager()), androidOboeRepositoryPath (settings, Ids::androidOboeRepositoryPath, getUndoManager()), @@ -158,10 +158,10 @@ public: androidKeyStorePass (settings, Ids::androidKeyStorePass, getUndoManager(), "android"), androidKeyAlias (settings, Ids::androidKeyAlias, getUndoManager(), "androiddebugkey"), androidKeyAliasPass (settings, Ids::androidKeyAliasPass, getUndoManager(), "android"), - gradleVersion (settings, Ids::gradleVersion, getUndoManager(), "7.5.1"), + gradleVersion (settings, Ids::gradleVersion, getUndoManager(), "8.2"), gradleToolchain (settings, Ids::gradleToolchain, getUndoManager(), "clang"), gradleClangTidy (settings, Ids::gradleClangTidy, getUndoManager(), false), - androidPluginVersion (settings, Ids::androidPluginVersion, getUndoManager(), "7.3.0"), + androidPluginVersion (settings, Ids::androidPluginVersion, getUndoManager(), "7.4.2"), AndroidExecutable (getAppSettings().getStoredPath (Ids::androidStudioExePath, TargetOS::getThisOS()).get().toString()) { name = getDisplayName(); @@ -407,6 +407,9 @@ private: << "project(juce_jni_project)" << newLine << newLine; + if (gradleClangTidy.get()) + mo << "set(CMAKE_CXX_CLANG_TIDY \"${ANDROID_TOOLCHAIN_ROOT}/bin/clang-tidy\")" << newLine << newLine; + if (! isLibrary()) mo << "set(BINARY_NAME \"juce_jni\")" << newLine << newLine; @@ -693,25 +696,8 @@ private: mo << "apply plugin: 'com.android." << (isLibrary() ? "library" : "application") << "'" << newLine << newLine; - // CMake 3.22 will fail to build Android projects that set ANDROID_ARM_MODE unless NDK 24+ is used - mo << "def ndkVersionString = \"25.2.9519653\"" << newLine << newLine; - - if (gradleClangTidy.get() && gradleToolchain.get().toString() == "clang") - mo << "def sdkDir = {" << newLine - << " def androidHome = System.getenv('ANDROID_HOME')" << newLine - << " if (androidHome) {" << newLine - << " return androidHome" << newLine - << " }" << newLine - << " Properties properties = new Properties()" << newLine - << " properties.load(project.rootProject.file(\"local.properties\").newDataInputStream())" << newLine - << " return properties.getProperty('sdk.dir')" << newLine - << "}()" << newLine - << "def llvmDir = \"${sdkDir}/ndk/${ndkVersionString}/toolchains/llvm\"" << newLine - << "def clangTidySearch = fileTree(llvmDir).filter { file -> file.name.matches('^clang-tidy(.exe)?$') }" << newLine - << "if (clangTidySearch.size() != 1) {" << newLine - << " throw new GradleException(\"Could not locate a unique clang-tidy in ${llvmDir}\")" << newLine - << "}" << newLine - << "def clangTidy = clangTidySearch.getSingleFile().getAbsolutePath()" << newLine << newLine; + // NDK 26 is required for ANDROID_WEAK_API_DEFS, which is in turn required for weak-linking AFontMatcher + mo << "def ndkVersionString = \"26.2.11394342\"" << newLine << newLine; mo << "android {" << newLine; mo << " compileSdkVersion " << static_cast (androidTargetSDK.get()) << newLine; @@ -1149,7 +1135,7 @@ private: "An integer value that represents the version of the application code, relative to other versions."); props.add (new TextPropertyComponent (androidMinimumSDK, "Minimum SDK Version", 32, false), - "The number of the minimum version of the Android SDK that the app requires (must be 16 or higher)."); + "The number of the minimum version of the Android SDK that the app requires (must be 21 or higher)."); props.add (new TextPropertyComponent (androidTargetSDK, "Target SDK Version", 32, false), "The number of the version of the Android SDK that the app is targeting."); @@ -1520,8 +1506,8 @@ private: cmakeArgs.add ("\"-DANDROID_ARM_MODE=arm\""); cmakeArgs.add ("\"-DANDROID_ARM_NEON=TRUE\""); - if (isClang && gradleClangTidy.get()) - cmakeArgs.add ("\"-DCMAKE_CXX_CLANG_TIDY=${clangTidy}\""); + // This enables macOS/iOS-style weak-linking for symbols in the NDK, but is only available in NDK 26+ + cmakeArgs.add ("\"-DANDROID_WEAK_API_DEFS=ON\""); auto cppStandard = [this] { diff --git a/modules/juce_video/native/juce_Video_android.h b/modules/juce_video/native/juce_Video_android.h index 65aed5ce3d..8096ad471e 100644 --- a/modules/juce_video/native/juce_Video_android.h +++ b/modules/juce_video/native/juce_Video_android.h @@ -1800,6 +1800,3 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (Pimpl) }; - -//============================================================================== -constexpr VideoComponent::Pimpl::MediaSession::Player::StateInfo VideoComponent::Pimpl::MediaSession::Player::stateInfos[];