Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

-t:InstallAndroidDependencies could use a reasonable default AndroidSdkDirectory if not specified #9160

Open
Redth opened this issue Jul 31, 2024 · 8 comments
Assignees
Labels
Area: App+Library Build Issues when building Library projects or Application projects. delighter-sc

Comments

@Redth
Copy link
Member

Redth commented Jul 31, 2024

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?

@Redth Redth added the needs-triage Issues that need to be assigned. label Jul 31, 2024
@jpobst jpobst added Area: App+Library Build Issues when building Library projects or Application projects. and removed needs-triage Issues that need to be assigned. labels Jul 31, 2024
@jpobst jpobst assigned jonpryor and jonathanpeppers and unassigned jpobst Jul 31, 2024
@jonpryor
Copy link
Member

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 3659766:

<MavenCacheDirectory Condition="$([MSBuild]::IsOSPlatform('Windows')) and '$(MavenCacheDirectory)'==''">$(LocalAppData)\dotnet-android\MavenCacheDirectory\</MavenCacheDirectory>
<MavenCacheDirectory Condition="$([MSBuild]::IsOSPlatform('OSX')) and '$(MavenCacheDirectory)'==''">$(HOME)/Library/Caches/dotnet-android/MavenCacheDirectory/</MavenCacheDirectory>
<MavenCacheDirectory Condition="'$(MavenCacheDirectory)'==''">$(HOME)/.cache/dotnet-android/MavenCacheDirectory/</MavenCacheDirectory>

and for $(AndroidSdkDirectory), use a fallback default of:

  • Windows: $(LocalAppData)\dotnet-android\sdk\
  • macOS: $(HOME)/Library/Caches/dotnet-android/sdk/
  • Linux: $(HOME)/.cache/dotnet-android/sdk/

and similarly for $(JavaSdkDirectory), use a fallback value of:

  • Windows: $(LocalAppData)\dotnet-android\jdk\
  • macOS: $(HOME)/Library/Caches/dotnet-android/jdk/
  • Linux: $(HOME)/.cache/dotnet-android/jdk/

@Redth
Copy link
Member Author

Redth commented Aug 27, 2024

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?

@jonpryor
Copy link
Member

@Redth asked

Why wouldn't we use this?

Because it's another manual step.

Current world order: 4 manual steps:

  1. Install dotnet
  2. Install JDK (from where?!)
  3. dotnet workload install maui
  4. dotnet build -f net8.0-android -t:InstallAndroidDependencies …

Desired world order: one less manual step:

  1. Install dotnet
  2. dotnet workload install maui
  3. dotnet build -f net8.0-android -t:InstallAndroidDependencies …

@jonpryor
Copy link
Member

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.

@Redth
Copy link
Member Author

Redth commented Aug 27, 2024

Ok for the JDK, when you use the Microsoft OpenJDK installers, the defaults end up being:

Windows

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 JAVA_HOME):
image

macOS

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.

@Redth
Copy link
Member Author

Redth commented Aug 27, 2024

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:

  1. In our docs we still do tell people to manually download and install the OpenJDK first
  2. We still require you provide a -p:JavaSdkDirectory and then install it there again as well

Then 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.

@jonpryor
Copy link
Member

@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.

@jonpryor
Copy link
Member

jonpryor commented Aug 27, 2024

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: App+Library Build Issues when building Library projects or Application projects. delighter-sc
Projects
None yet
Development

No branches or pull requests

4 participants