Open Redth opened 1 month ago
We are likely going to provide guidance to a user to use the same path always, why not pick that by default?
On the one hand, are we? We've been quite reluctant to actually do so until now, for a variety of reasons.
On the other hand, a default would help immensely. I'm inclined to take a page out of $(MavenCacheDirectory)
from 36597667f0ac70c8c3b7b204dd6883fb6ff0539d:
and for $(AndroidSdkDirectory)
, use a fallback default of:
$(LocalAppData)\dotnet-android\sdk\
$(HOME)/Library/Caches/dotnet-android/sdk/
$(HOME)/.cache/dotnet-android/sdk/
and similarly for $(JavaSdkDirectory)
, use a fallback value of:
$(LocalAppData)\dotnet-android\jdk\
$(HOME)/Library/Caches/dotnet-android/jdk/
$(HOME)/.cache/dotnet-android/jdk/
For the Android SDK path itself, I can see being rather opinionated on a specific location for our own purposes. For JDK, I am a little more skeptical, since the easy path is downloading the microsoft openjdk installer, which defaults to a known location already. Why wouldn't we use this?
@Redth asked
Why wouldn't we use this?
Because it's another manual step.
Current world order: 4 manual steps:
dotnet
dotnet workload install maui
dotnet build -f net8.0-android -t:InstallAndroidDependencies …
Desired world order: one less manual step:
dotnet
dotnet workload install maui
dotnet build -f net8.0-android -t:InstallAndroidDependencies …
My concern is for "clean" machines which don't have previous dependencies, and for which we aren't relying on the Visual Studio installer to install everything needed.
Ok for the JDK, when you use the Microsoft OpenJDK installers, the defaults end up being:
Windows installs to $env:PROGRAMFILES\Microsoft\
and will create a folder for the JDK version such as jdk-17.0.12.7-hotspot
or jdk-11.0.16.101-hotspot
.
There's also an option in the installer to set the env variables (_set or override JAVAHOME):
If you use the .pkg installer it will install to the path /Library/Java/JavaVirtualMachines/microsoft-17.jdk/Contents/Home
where the version changes for the version of the JDK of course.
In the spirit of 'clean' machines I think it's important to use the conventions from the pkg/msi installers even if we aren't going to use them directly. I guess I'm not ultimately opinionated on using the official installer vs installing through the InstallAndroidDependencies
target (which I presume uses the official archives from MS OpenJdk anyway?), but rather am confused at why:
-p:JavaSdkDirectory
and then install it there again as wellThen of course the point of this issue is providing sensible defaults when no directory is specified, which although this issue was about AndroidSdkDirectory specifically, the conversation has also come in around JavaSdkDirectory too. Again here, we should infer a sensible default in my opinion, if none is specified, and we should also skip trying to install the JDK at all if we can locate one ourselves that is already installed and compatible.
@Redth: we should update our docs to tell people to install OpenJDK, and to not provide -p:JavaSdkDirectory=…
.
We should also verify that it works when we do so. If it doesn't work, that's a bug.
For .NET 9 Preview 7, -p:JavaSdkDirectory
is required for -t:InstallAndroidDependencies
.
Edited to completely reverse the logic: -p:JavaSdkDirectory
is required. My previous test accidentally used .NET 8 Preview 7, instead of .NET 9 Preview 7. Doh!
Android framework version
net8.0-android, net9.0-android
Affected platform version
macOS, Windows (presumably)
Description
When running
dotnet build -t:InstallAndroidDependencies
I must set a path to the Android SDK (eg:-p:AndroidSdkDirectory=/Users/username/Android/sdk
).Could we assume a reasonable default path for this variable if none is specified in this build task? We are likely going to provide guidance to a user to use the same path always, why not pick that by default?