빌드 타겟

다음 빌드 대상은 Android용 .NET 프로젝트에 정의되어 있습니다.

빌드

프로젝트 및 모든 종속성 안에 소스 코드를 빌드합니다.

이 대상은 Android 패키지( 파일)를 만들지 않습니다.apk. Android 패키지를 만들려면 SignAndroidPackage 대상을 사용하거나, 빌드할 때 `$(AndroidBuildApplicationPackage) 속성을 True로 설정합니다.

msbuild /p:AndroidBuildApplicationPackage=True App.slnx

Aot 프로파일링을 빌드하고 시작하기

포함된 AOT 프로파일러를 사용하여 앱을 빌드하고, 프로파일러 TCP 포트를 $(AndroidAotProfilerPort)로 설정하고, 기본 작업을 시작합니다.

이 레거시 대상은 Mono를 사용하는 지원되는 .NET 10 이전 프로젝트에 적용됩니다. CoreCLR 또는 NativeAOT 프로파일링을 구성하지 않습니다.

기본 TCP 포트는 9999입니다.

Xamarin.Android 10.2에 추가되었습니다.

청소

빌드 프로세스에서 생성된 파일을 모두 제거합니다.

사용 가능 장치 계산

와 함께 dotnet run사용할 수 있는 Android 디바이스 및 에뮬레이터 목록을 쿼리하고 반환합니다.

이 대상은 .NET SDK의 dotnet run 명령에 의해 자동으로 호출되어 옵션을 통해 --device 디바이스 선택을 지원합니다. 각 디바이스에 @(Devices) 다음 메타데이터가 있는 항목 그룹을 반환합니다.

  • 설명: 사람 친화적인 이름(예: 에뮬레이터의 경우 "Pixel 7 - API 35", 물리적 디바이스의 경우 "Pixel 6 Pro")
  • 형식: "디바이스" 또는 "에뮬레이터"
  • 상태: 디바이스 상태 - "온라인", "오프라인", "권한 없음" 또는 "NoPermissions"
  • 모델: 디바이스 모델 식별자(선택 사항)
  • 제품: 제품 이름(선택 사항)
  • 디바이스: 디바이스 이름(선택 사항)
  • TransportId: adb 전송 ID(선택 사항)

예를 들어 사용 가능한 모든 디바이스를 나열하려면 다음을 수행합니다.

dotnet build -t:ComputeAvailableDevices

이 대상은 .NET SDK 디바이스 선택 사양 의 일부이며 다음과 같은 명령을 사용하도록 설정합니다.

dotnet run --device <device-serial>

속성을 $(Device) 통해 디바이스를 $(AdbTarget) 선택하면 속성이 모든 adb 작업에 대해 해당 특정 디바이스를 대상으로 자동으로 설정됩니다.

.NET 11에 추가되었습니다.

FinishAotProfiling

BuildAndStartAotProfiling 대상 이후에 호출해야 합니다.

이 레거시 대상은 Mono를 사용하는 지원되는 .NET 10 이전 프로젝트에 적용됩니다.

TCP 포트 를 통해 디바이스 또는 에뮬레이터에서 AOT 프로파일러 데이터를 수집하여 $(AndroidAotProfilerPort)를 $(AndroidAotCustomProfilePath)에 씁니다.

포트 및 사용자 지정 프로필의 기본값은 9999 및 custom.aprof입니다.

추가 옵션을 aprofutil전달하려면 다음에서 설정합니다. $(AProfUtilExtraOptions) 속성

다음 코드와 동일합니다.

aprofutil $(AProfUtilExtraOptions) -s -v -p $(AndroidAotProfilerPort) -o "$(AndroidAotCustomProfilePath)"

Xamarin.Android 10.2에 추가되었습니다.

GetAndroidDependencies # (안드로이드 종속성 가져오기)

@(AndroidDependency) 대상에서 설치할 Android SDK 패키지를 결정하는 데 사용되는 InstallAndroidDependencies 항목 그룹을 만듭니다.

GetApplicationArtifacts

빌드에서 @(ApplicationArtifact) 생성된 APK 및 Android 앱 번들 파일을 포함하는 항목 그룹을 만들고 반환합니다.

이 대상은 항상 플랫폼 아티팩트를 생성하고 수집하여 @(ApplicationArtifact)로 보내는 필수 Build 대상에 의존합니다. 나중에 가져오는 항목은 $(GetApplicationArtifactsDependsOn)에 대상을 설정하거나 추가하여, 이 대상 또는 Publish 대상이 해당 항목을 반환하기 전에 기존 항목을 추가 메타데이터로 업데이트할 수 있습니다. 교체 $(GetApplicationArtifactsDependsOn) 해도 필요한 Build 종속성이 제거되지는 않습니다.

아티팩트가 수집되기 전에 공통 애플리케이션 메타데이터를 최종적으로 병합된 AndroidManifest.xml에서 읽어옵니다. 최종 매니페스트 값은 사용자 지정 매니페스트가 생성된 값을 재정의하거나 $(GenerateApplicationManifest)가 false인 경우를 포함하여 해당 프로젝트 속성보다 우선합니다. android:label 리소스 참조와 같은 @string/app_name 리소스 참조는 리소스 참조로 유지되며 메타데이터가 반환될 때 로캘이 선택되지 않습니다.

CI 작업 또는 사용자 지정 도구에 빌드 출력 아티팩트 경로가 필요한 경우 이 대상을 직접 호출합니다.

dotnet build MyApp.csproj -t:GetApplicationArtifacts -getTargetResult:GetApplicationArtifacts

호출자에게 $(PublishDir)에서 복사된 게시 출력이 필요한 경우 Publish 대상 결과를 사용하세요:

dotnet build MyApp.csproj -t:Publish -getTargetResult:Publish

설치

Android 패키지를 생성하고 서명하여 기본 디바이스 또는 가상 디바이스에 설치합니다.

$(AdbTarget) 속성은 Android 패키지를 설치하거나 제거할 수 있는 Android 대상 디바이스를 지정합니다.

# Install package onto emulator via -e
# Use `/Library/Frameworks/Mono.framework/Commands/msbuild` on OS X
MSBuild /t:Install ProjectName.csproj /p:AdbTarget=-e

안드로이드 종속성 설치

대상을 호출한 후, GetAndroidDependencies 항목 그룹에 지정된 Android SDK 패키지를 설치합니다.

dotnet build -t:InstallAndroidDependencies -f net8.0-android "-p:AndroidSdkDirectory=<path to sdk>" "-p:JavaSdkDirectory=<path to java sdk>"

이 -f net8.0-android 대상은 Android용 .NET 특정 대상이므로 필요합니다. 이 인수를 생략하면 다음 오류가 발생합니다.

error MSB4057: The target "InstallAndroidDependencies" does not exist in the project.

AndroidSdkDirectory 필요한 구성 요소를 설치할 위치를 알아야 하므로 속성과 JavaSdkDirectory 속성이 필요합니다. 이러한 디렉터리는 비어 있을 수도 있고 이미 존재할 수도 있습니다. Sdk 구성 요소는 기존 sdk 설치 위에 설치됩니다.

MSBuild 속성은 어떤 $(AndroidManifestType)가 패키지 이름과 패키지 버전 감지 및 다운로드할 URL에 사용되는지를 제어합니다.

게시하기

애플리케이션을 빌드하고, 최종 APK 및 Android 앱 번들 파일을 $(PublishDir)복사하고, 항목 그룹을 반환합니다 @(ApplicationArtifact) . 반환된 항목은 복사된 publish-directory 경로를 사용하고 %(Signed), %(PackageId), %(Abi), %(ApplicationId), %(ApplicationDisplayVersion), %(ApplicationTitle), %(ApplicationName), %(PackageFormat), %(ApplicationVersion)와 같은 아티팩트 메타데이터를 유지합니다.

Publish 먼저 GetApplicationArtifacts을 실행하며, 이 과정에서 프로젝트를 빌드하고 @(ApplicationArtifact)를 플랫폼에서 생성된 아티팩트로 채웁니다. Publish에 추가된 대상은 그 기존 항목들에 대해 실행된 다음, @(ApplicationArtifact)가 게시 파일을 계산하기 전과 Publish가 $(GetApplicationArtifactsDependsOn)를 반환하기 전에 실행되므로, 이후 가져오기에서 게시 호출자에 대한 메타데이터를 추가할 수 있습니다.

예를 들어, 게시된 아티팩트를 쿼리하려면:

dotnet build MyApp.csproj -t:Publish -getTargetResult:Publish

로그와 함께 실행 (RunWithLogging)

추가 로깅을 사용하도록 설정된 애플리케이션을 실행합니다. 애플리케이션 또는 런타임과 관련된 문제를 보고하거나 조사할 때 유용합니다. 성공하면 화면에 인쇄된 메시지는 기록된 메시지와 함께 logcat 파일의 위치를 표시합니다.

대상의 작동 방식에 영향을 미치는 속성:

  • /p:RunLogVerbose=true 를 사용하면 더 많은 자세한 런타임 로깅을 사용할 수 있습니다.
  • /p:RunLogDelayInMS=X 로그 X 출력을 파일에 쓰기 전에 대기할 시간(밀리초)으로 바꿔야 합니다. 기본값은 1000입니다.

SignAndroidPackage

Android 패키지(.apk) 파일을 만들고 서명합니다.

자체 포함 "릴리스" 패키지를 생성하려면 /p:Configuration=Release와 함께 사용합니다.

이 대상에서 만든 패키지 파일은 항목 그룹에서 사용할 수 있습니다 @(ApplicationArtifact) .

StartAndroidActivity

디바이스 또는 실행 중 에뮬레이터에서 기본 작업을 시작합니다.

다른 작업을 시작하려면 설정하십시오 $(AndroidLaunchActivity) 활동 이름에 대한 속성입니다.

다음 코드와 동일합니다.

adb shell am start -S -n @PACKAGE_NAME@/$(AndroidLaunchActivity)

Xamarin.Android 10.2에 추가되었습니다.

안드로이드 패키지 중지

디바이스 또는 실행 중 에뮬레이터에서 애플리케이션 패키지를 완전히 중지합니다.

다음 코드와 동일합니다.

adb shell am force-stop @PACKAGE_NAME@

Xamarin.Android 10.2에 추가되었습니다.

제거

기본 디바이스 또는 가상 디바이스에서 Android 패키지를 제거합니다.

$(AdbTarget) 속성은 Android 패키지를 설치하거나 제거할 수 있는 Android 대상 디바이스를 지정합니다.

안드로이드 리소스 업데이트

파일을 업데이트합니다 Resource.designer.cs .

이 대상은 일반적으로 프로젝트에 새 리소스가 추가될 때 IDE에 의해 호출됩니다.