Since Android Gradle plugin was updated, it now requires JDK 11.
Fixes:
> Could not resolve all files for configuration ':classpath'.
> Could not resolve com.android.tools.build:gradle:7.4.0.
Required by:
project :
> No matching variant of com.android.tools.build:gradle:7.4.0 was found. The consumer was configured to find a runtime of a library compatible with Java 8, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '7.6' but:
- Variant 'apiElements' capability com.android.tools.build:gradle:7.4.0 declares a library, packaged as a jar, and its dependencies declared externally:
- Incompatible because this component declares an API of a component compatible with Java 11 and the consumer needed a runtime of a component compatible with Java 8
- Other compatible attribute:
- Doesn't say anything about org.gradle.plugin.api-version (required '7.6')
Some targets still target v8.0 (api26):
src/KeePassLib2Android/KeePassLib2Android.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
src/ZlibAndroid/ZlibAndroid.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
src/PluginSdkBinding/PluginSdkBinding.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
src/PCloudBindings/PCloudBindings.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
src/AndroidFileChooserBinding/AndroidFileChooserBinding.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
src/TwofishCipher/TwofishCipher.csproj: <TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
So we need it in ANDROID_SDK_ROOT.
Otherwise build fails with this error (on macos & windows):
C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.Tooling.targets(100,5): error XA5207: Could not find android.jar for API level 26. This means the Android SDK platform for API level 26 is not installed. Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the Xamarin.Android project to target an API version that is installed. (C:\Android\android-sdk\platforms\android-26\android.jar missing.) [D:\a\keepass2android\keepass2android\src\TwofishCipher\TwofishCipher.csproj]
In some cases, nuget restore isn't sufficient to restore everything, especially if project.assets.json files
are missing or were removed. So we add a call to MSBuild -t:restore to build it.
Both nuget & msbuild are required because msbuild can only restore packages in 'packages.config' from version
16.5