diff --git a/.ci/scripts/build_android_instrumentation.sh b/.ci/scripts/build_android_instrumentation.sh index 93b0591a261..5e074d9e215 100644 --- a/.ci/scripts/build_android_instrumentation.sh +++ b/.ci/scripts/build_android_instrumentation.sh @@ -12,30 +12,10 @@ if [[ -z "${PYTHON_EXECUTABLE:-}" ]]; then fi which "${PYTHON_EXECUTABLE}" -build_android_test() { - mkdir -p extension/android/executorch_android/src/androidTest/resources - cp extension/module/test/resources/add.pte extension/android/executorch_android/src/androidTest/resources - pushd extension/android - ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew :executorch_android:testDebugUnitTest - ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew :executorch_android:assembleAndroidTest - popd -} +mkdir -p "${BUILD_AAR_DIR}"/executorch_android/src/androidTest/resources +cp extension/module/test/resources/add.pte "${BUILD_AAR_DIR}"/executorch_android/src/androidTest/resources -collect_artifacts_to_be_uploaded() { - ARTIFACTS_DIR_NAME="$1" - # Collect Java library test - JAVA_LIBRARY_TEST_DIR="${ARTIFACTS_DIR_NAME}/library_test_dir" - mkdir -p "${JAVA_LIBRARY_TEST_DIR}" - cp extension/android/executorch_android/build/outputs/apk/androidTest/debug/*.apk "${JAVA_LIBRARY_TEST_DIR}" -} - -main() { - build_android_test - if [ -n "$ARTIFACTS_DIR_NAME" ]; then - collect_artifacts_to_be_uploaded ${ARTIFACTS_DIR_NAME} - fi -} - -if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then - main "$@" -fi +pushd "${BUILD_AAR_DIR}" +ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew :executorch_android:testDebugUnitTest +ANDROID_HOME="${ANDROID_SDK:-/opt/android/sdk}" ./gradlew :executorch_android:assembleAndroidTest +popd diff --git a/.github/workflows/_android.yml b/.github/workflows/_android.yml index 10e96e4098b..e29833015d3 100644 --- a/.github/workflows/_android.yml +++ b/.github/workflows/_android.yml @@ -27,16 +27,21 @@ jobs: conda activate "${CONDA_ENV}" PYTHON_EXECUTABLE=python bash .ci/scripts/setup-linux.sh --build-tool buck2 export ARTIFACTS_DIR_NAME=artifacts-to-be-uploaded - - mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom - bash examples/models/llama/install_requirements.sh - bash ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dtype fp16 -mode portable -upload ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + mkdir -p ${ARTIFACTS_DIR_NAME}/ # Build LLM Demo for Android export BUILD_AAR_DIR=aar-out mkdir -p $BUILD_AAR_DIR - bash scripts/build_android_library.sh ${ARTIFACTS_DIR_NAME} - bash .ci/scripts/build_android_instrumentation.sh ${ARTIFACTS_DIR_NAME} + bash scripts/build_android_library.sh + cp ${BUILD_AAR_DIR}/executorch.aar $ARTIFACTS_DIR_NAME + + mkdir -p ${ARTIFACTS_DIR_NAME}/library_test_dir + bash .ci/scripts/build_android_instrumentation.sh + cp ${BUILD_AAR_DIR}/executorch_android/build/outputs/apk/androidTest/debug/executorch_android-debug-androidTest.apk "${ARTIFACTS_DIR_NAME}/library_test_dir" + + mkdir -p ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom + bash examples/models/llama/install_requirements.sh + bash ".ci/scripts/test_llama.sh" -model stories110M -build_tool cmake -dtype fp16 -mode portable -upload ${ARTIFACTS_DIR_NAME}/fp32-xnnpack-custom mkdir -p examples/demo-apps/android/LlamaDemo/app/libs cp aar-out/executorch.aar examples/demo-apps/android/LlamaDemo/app/libs @@ -96,7 +101,7 @@ jobs: curl -O https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/llm_demo/app-debug.apk curl -O https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/llm_demo/app-debug-androidTest.apk curl -O https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/fp32-xnnpack-custom/model.zip - curl -o android-test-debug-androidTest.apk https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/library_test_dir/executorch-debug-androidTest.apk + curl -o android-test-debug-androidTest.apk https://gha-artifacts.s3.amazonaws.com/${{ github.repository }}/${{ github.run_id }}/artifacts/library_test_dir/executorch_android-debug-androidTest.apk unzip model.zip mv *.pte model.pte diff --git a/extension/android/executorch_android/build.gradle b/extension/android/executorch_android/build.gradle index 16c3d97c87e..b284ce3896e 100644 --- a/extension/android/executorch_android/build.gradle +++ b/extension/android/executorch_android/build.gradle @@ -34,7 +34,7 @@ android { } dependencies { - implementation 'com.facebook.fbjni:fbjni-java-only:0.5.1' + implementation 'com.facebook.fbjni:fbjni:0.5.1' implementation 'com.facebook.soloader:nativeloader:0.10.5' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.5' diff --git a/extension/android/executorch_android/src/androidTest/AndroidManifest.xml b/extension/android/executorch_android/src/androidTest/AndroidManifest.xml new file mode 100644 index 00000000000..7ea0516e5c2 --- /dev/null +++ b/extension/android/executorch_android/src/androidTest/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/scripts/build_android_library.sh b/scripts/build_android_library.sh index 36d66dd4e21..8a385ad6876 100755 --- a/scripts/build_android_library.sh +++ b/scripts/build_android_library.sh @@ -140,8 +140,6 @@ main() { fi export ANDROID_ABIS - ARTIFACTS_DIR_NAME="$1" - copy_src for ANDROID_ABI in "${ANDROID_ABIS[@]}"; do build_android_native_library ${ANDROID_ABI} diff --git a/scripts/run_android_emulator.sh b/scripts/run_android_emulator.sh index 363ded31b5e..fe73ec8a1d7 100755 --- a/scripts/run_android_emulator.sh +++ b/scripts/run_android_emulator.sh @@ -28,7 +28,7 @@ adb push model.pte /data/local/tmp/llama adb push tokenizer.bin /data/local/tmp/llama adb shell am instrument -w -r com.example.executorchllamademo.test/androidx.test.runner.AndroidJUnitRunner -# adb uninstall org.pytorch.executorch.test || true -# adb install -t android-test-debug-androidTest.apk +adb uninstall org.pytorch.executorch.test || true +adb install -t android-test-debug-androidTest.apk -# adb shell am instrument -w -r org.pytorch.executorch.test/androidx.test.runner.AndroidJUnitRunner +adb shell am instrument -w -r org.pytorch.executorch.test/androidx.test.runner.AndroidJUnitRunner