Skip to content

[Build] Android Qnn backend with --build_java flag failed #26981

@zhao-leo

Description

@zhao-leo

Describe the issue

When I try to build an onnxruntime aar package with Qnn support for Android device, the build script throw an error.

I can locate the error is caused by CMakeLists.txt,onnxruntime_unittest.cmake

The CMakeLists.txt should set a Variable named QNN_LIB_FILES for unittest, which will not set when build for android, and this will cause the error.

Besides, the QNN_ARCH_ABI in CMakeLists.txt line 884 is strange. I didn't found the arch support in the newest Qnn library.

When skip the unittest, the --build_java is available.

Patch file:

diff --git a/cmake/onnxruntime_unittests.cmake b/cmake/onnxruntime_unittests.cmake
index b23365e..58e60af 100644
--- a/cmake/onnxruntime_unittests.cmake
+++ b/cmake/onnxruntime_unittests.cmake
@@ -1612,7 +1612,7 @@ if (NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
   endif()
 
   if (NOT onnxruntime_ENABLE_TRAINING_TORCH_INTEROP)
-    if (onnxruntime_BUILD_JAVA AND NOT onnxruntime_ENABLE_STATIC_ANALYSIS)
+    if (onnxruntime_BUILD_JAVA AND NOT onnxruntime_ENABLE_STATIC_ANALYSIS AND NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
       block()
         message(STATUS "Enabling Java tests")

Configuration below:

ORT_VERSION: 1.23.2
QNN_VERSION: 2.40.0.251030
NDK_VERSION: 27.0.12077973
ANDROID_API: 27
JAVA_HOME: /lib/jvm/java-17-openjdk-amd64

Cross compile environment:
OS: Ubuntu 25.10 x86_64
Kernel: Linux 6.17.0-8-generic

Urgency

No response

Target platform

arm64-v8a

Build script

./build.sh \
	--android \
	--android_sdk_path $(ANDROID_HOME) \
	--android_ndk_path $(ANDROID_HOME)/ndk/$(NDK_VERSION) \
	--android_abi arm64-v8a \
	--android_api $(ANDROID_API) \
	--cmake_generator Ninja \
	--use_qnn static_lib \
	--qnn_home $(QNN_SDK_DIR)/qairt/$(QNN_VERSION) \
	--config Release \
	--parallel \
	--skip_tests \
	--build_shared_lib \
	--build_dir $(BUILD_DIR) \
	--build_java

Full build scripts can be found in https://github.com/zhao-leo/onnxruntime_qnn_android_build

Error / output

[1606/1617] Linking CXX static library libonnxruntime_providers_qnn.a
FAILED: libonnxruntime_providers_qnn.a
: && /usr/bin/cmake -E rm -f libonnxruntime_providers_qnn.a && /home/april/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar qc libonnxruntime_providers_qnn.a  CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/onnx_ctx_model_helper.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/op_builder_factory.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/argmax_min_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/base_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/batch_norm_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/cast_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/clip_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/conv_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/cumsum_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/einsum_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/expand_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/gather_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/gemm_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/instance_norm_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/layer_norm_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/lrn_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/lstm_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/matmul_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/mean_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/pad_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/pool_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/reciprocal_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/reduce_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/reshape_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/resize_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/simple_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/slice_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/softmax_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/split_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/tile_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/topk.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/transpose_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/opbuilder/upsample_op_builder.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_backend_manager.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_context_mem_handle_manager.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_def.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_model.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_model_wrapper.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/channel_shuffle_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/dq_q_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/hardsigmoid_mul_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/lpbqgemm_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/lpbqmatmul_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/qnn_node_group.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/reshape_gemm_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/scale_softmax_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/udo_fusion.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_node_group/utils.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_quant_params_wrapper.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/builder/qnn_utils.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/ort_api.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/qnn_allocator.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/qnn_execution_provider.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/qnn_provider_factory.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/qnn_telemetry.cc.o CMakeFiles/onnxruntime_providers_qnn.dir/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/onnxruntime/core/providers/qnn/rpcmem_library.cc.o && /home/april/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib libonnxruntime_providers_qnn.a && cd /home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/build/android/arm64-v8a/Release && /usr/bin/cmake -E copy /home/april/Desktop/onnxruntime_qnn_android_build/qnn_sdk/qairt/2.40.0.251030/LICENSE.pdf /home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/build/android/arm64-v8a/Release/Qualcomm_LICENSE.pdf && cd /home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/build/android/arm64-v8a/Release && /usr/bin/cmake -E copy /home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/build/android/arm64-v8a/Release/java/native-test
CMake Error: cmake version 3.31.6
Usage: /usr/bin/cmake -E <command> [arguments...]
Available commands:
  capabilities              - Report capabilities built into cmake in JSON format
  cat [--] <files>...       - concat the files and print them to the standard output
  chdir dir cmd [args...]   - run command in a given directory
  compare_files [--ignore-eol] file1 file2
                              - check if file1 is same as file2
  copy <file>... destination  - copy files to destination (either file or directory)
  copy_directory <dir>... destination   - copy content of <dir>... directories to 'destination' directory
  copy_directory_if_different <dir>... destination   - copy changed content of <dir>... directories to 'destination' directory
  copy_if_different <file>... destination  - copy files if it has changed
  echo [<string>...]        - displays arguments as text
  echo_append [<string>...] - displays arguments as text but no new line
  env [--unset=NAME ...] [NAME=VALUE ...] [--] <command> [<arg>...]
                            - run command in a modified environment
  environment               - display the current environment
  make_directory <dir>...   - create parent and <dir> directories
  md5sum <file>...          - create MD5 checksum of files
  sha1sum <file>...         - create SHA1 checksum of files
  sha224sum <file>...       - create SHA224 checksum of files
  sha256sum <file>...       - create SHA256 checksum of files
  sha384sum <file>...       - create SHA384 checksum of files
  sha512sum <file>...       - create SHA512 checksum of files
  remove [-f] <file>...     - remove the file(s), use -f to force it (deprecated: use rm instead)
  remove_directory <dir>... - remove directories and their contents (deprecated: use rm instead)
  rename oldname newname    - rename a file or directory (on one volume)
  rm [-rRf] [--] <file/dir>... - remove files or directories, use -f to force it, r or R to remove directories and their contents recursively
  sleep <number>...         - sleep for given number of seconds
  tar [cxt][vf][zjJ] file.tar [file/dir1 file/dir2 ...]
                            - create or extract a tar or zip archive
  time command [args...]    - run command and display elapsed time
  touch <file>...           - touch a <file>.
  touch_nocreate <file>...  - touch a <file> but do not create it.
  create_symlink old new    - create a symbolic link new -> old
  create_hardlink old new   - create a hard link new -> old
  true                      - do nothing with an exit code of 0
  false                     - do nothing with an exit code of 1

[1607/1617] Linking CXX static library libonnxruntime_providers.a
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
  File "/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/tools/ci_build/build.py", line 2670, in <module>
    sys.exit(main())
             ~~~~^^
  File "/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/tools/ci_build/build.py", line 2571, in main
    build_targets(args, cmake_path, build_dir, configs, num_parallel_jobs, args.target)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/tools/ci_build/build.py", line 1363, in build_targets
    run_subprocess(cmd_args, env=env)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/tools/ci_build/build.py", line 148, in run_subprocess
    return run(*args, cwd=cwd, capture_stdout=capture_stdout, shell=shell, env=my_env)
  File "/home/april/Desktop/onnxruntime_qnn_android_build/onnxruntime/tools/python/util/run.py", line 50, in run
    completed_process = subprocess.run(
        cmd,
    ...<6 lines>...
        shell=shell,
    )
  File "/usr/lib/python3.13/subprocess.py", line 577, in run
    raise CalledProcessError(retcode, process.args,
                             output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/usr/bin/cmake', '--build', 'build/android/arm64-v8a/Release', '--config', 'Release', '--', '-j20']' returned non-zero exit status 1.
make: *** [Makefile:67: build] Error 1

Visual Studio Version

None

GCC / Compiler Version

Clang 18.0.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    api:Javaissues related to the Java APIbuildbuild issues; typically submitted using templateep:QNNissues related to QNN exeution providerplatform:mobileissues related to ONNX Runtime mobile; typically submitted using template

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions