parameters: - name: artifactName displayName: Artifact Name type: string default: '' - name: job_name_suffix displayName: job name type: string default: '' - name: packageName displayName: Package Name type: string default: 'onnxruntime-android' - name: ReleaseVersionSuffix displayName: Release Version Suffix type: string default: '' - name: QnnSDKVersion displayName: QNN SDK Version type: string default: '2.28.0.241029' jobs: - job: Final_AAR_Testing_Android_${{ parameters.job_name_suffix }} workspace: clean: all pool: vmImage: 'macOS-13' variables: - name: runCodesignValidationInjection value: false timeoutInMinutes: 90 dependsOn: - Android_Java_API_AAR_Packaging_${{ parameters.job_name_suffix }} steps: - template: set-version-number-variables-step.yml - task: DownloadPipelineArtifact@2 displayName: 'Download Final Android AAR' inputs: buildType: 'current' artifactName: '${{parameters.artifactName}}' targetPath: '$(Build.BinariesDirectory)/final-android-aar' - task: JavaToolInstaller@0 displayName: Use jdk 17 inputs: versionSpec: '17' jdkArchitectureOption: 'x64' jdkSourceOption: 'PreInstalled' - template: use-android-ndk.yml - script: | set -e -x mkdir -p android_test/android/app/libs cd android_test/android cp -av $(Build.SourcesDirectory)/java/src/test/android/* ./ cp $(Build.BinariesDirectory)/final-android-aar/${{parameters.packageName}}-$(OnnxRuntimeVersion)${{parameters.ReleaseVersionSuffix}}.aar app/libs/${{parameters.packageName}}.aar displayName: Copy Android test files and AAR to android_test directory workingDirectory: $(Build.BinariesDirectory) # skip emulator tests for qnn package as there are no arm64-v8a emulators and no qnn libraries for x86 - ${{ if not(contains(parameters.packageName, 'qnn')) }}: - template: use-android-emulator.yml parameters: create: true start: true - script: | set -e -x cd android_test/android $(Build.SourcesDirectory)/java/gradlew --no-daemon clean connectedDebugAndroidTest --stacktrace displayName: Run E2E test using Emulator workingDirectory: $(Build.BinariesDirectory) - template: use-android-emulator.yml parameters: stop: true - ${{ else }}: - script: | # QNN SDK version string, expected format: 2.28.0.241029 # Extract the first three parts of the version string to get the Maven package version (e.g., 2.28.0) QnnMavenPackageVersion=$(echo ${{ parameters.QnnSDKVersion }} | cut -d'.' -f1-3) echo "QnnMavenPackageVersion: $QnnMavenPackageVersion" echo "##vso[task.setvariable variable=QnnMavenPackageVersion]$QnnMavenPackageVersion" displayName: Trim QNN SDK version to major.minor.patch - script: | set -e -x # build apks for qnn package as they are not built in the emulator test step $(Build.SourcesDirectory)/java/gradlew --no-daemon clean assembleDebug assembleAndroidTest -DqnnVersion=$(QnnMavenPackageVersion) --stacktrace displayName: Build QNN APK workingDirectory: $(Build.BinariesDirectory)/android_test/android # we run e2e tests on one older device (Pixel 3) and one newer device (Galaxy 23) - script: | set -e -x pip install requests python $(Build.SourcesDirectory)/tools/python/upload_and_run_browserstack_tests.py \ --test_platform espresso \ --app_path "debug/app-debug.apk" \ --test_path "androidTest/debug/app-debug-androidTest.apk" \ --devices "Samsung Galaxy S23-13.0" "Google Pixel 3-9.0" \ --build_tag "${{ parameters.packageName }}" displayName: Run E2E tests using Browserstack workingDirectory: $(Build.BinariesDirectory)/android_test/android/app/build/outputs/apk timeoutInMinutes: 15 env: BROWSERSTACK_ID: $(browserstack_username) BROWSERSTACK_TOKEN: $(browserstack_access_key) - template: component-governance-component-detection-steps.yml parameters : condition : 'succeeded' - task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3 displayName: 'Clean Agent Directories' condition: always()