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

p4a Doesn't Pick Up Latest Installed Java Command Line Tools, Resulting in avdmanager exception #2540

Open
cedarbob opened this issue Jan 16, 2022 · 15 comments
Labels
Priority: Medium This issue may be useful, and needs some attention.

Comments

@cedarbob
Copy link

Versions

  • Python: 3.9.7
  • OS: Ubuntu 20.04
  • Kivy: 2.0
  • Cython: 0.29.25
  • OpenJDK: 11.0.13

Description

I'm trying to build an apk with p4a for the first time. Using IntellijIdea, I installed the latest sdk command line tools. But p4a used the avdmanager in ../Sdk/tools/bin, instead of the new one which was installed in the default location .../Sdk/cmdline-tools/latest/bin. The avdmanager then threw a ClassNotFoundException for javax.xml.bind.annotation.XmlSchema.

Logs

$ p4a apk --private $HOME/Test/Python/kivydemo-for-android/showcase --package=com.rhrapps.showcase --name "Kivy Showcase" --version 0.1 --bootstrap=sdl2 --requirements=Python,kivy
[WARNING]: $ANDROIDNDKVER is deprecated and no longer necessary, the value you set is ignored
[INFO]:    Will compile for the following archs: armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 32
Traceback (most recent call last):
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/pythonforandroid/toolchain.py", line 725, in __init__
    getattr(self, command)(args)
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/pythonforandroid/toolchain.py", line 143, in wrapper_func
    ctx.prepare_build_environment(user_sdk_dir=self.sdk_dir,
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/pythonforandroid/build.py", line 300, in prepare_build_environment
    apis = get_available_apis(self.sdk_dir)
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/pythonforandroid/build.py", line 74, in get_available_apis
    targets = get_targets(sdk_dir)
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/pythonforandroid/build.py", line 62, in get_targets
    targets = avdmanager('list', 'target').stdout.decode('utf-8').split('\n')
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/sh.py", line 1566, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/sh.py", line 822, in __init__
    self.wait()
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/sh.py", line 879, in wait
    self.handle_command_exit_code(exit_code)
  File "/home/rhr/Tools/miniconda3/envs/kivy_env/lib/python3.9/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /home/rhr/Android/Sdk/tools/bin/avdmanager list target

  STDOUT:


  STDERR:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
	at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
	at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
	at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
	at com.android.sdklib.tool.AvdManagerCli.run(AvdManagerCli.java:213)
	at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	... 5 more

SomberNight added a commit to spesmilo/electrum that referenced this issue Mar 14, 2022
This is the new minimum the google play store requires.

note: the newer android command-line tools use a tiny bit different paths,
hence the `mv "${ANDROID_SDK_HOME}/cmdline-tools" "${ANDROID_SDK_HOME}/tools"` rename
see kivy/python-for-android#2540
@misl6 misl6 added the Priority: Medium This issue may be useful, and needs some attention. label Apr 6, 2022
@misl6
Copy link
Member

misl6 commented Apr 6, 2022

Yeah, recently tools became cmdline-tools.

In buildozer we're still relying on an old version of the cmdline tools, which are located at tools, but I agree that should be updated to support the newest ones (or at least we should support both locations)

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

I have this same problem, I've followed instructions at:

https://stackoverflow.com/a/67413427
and
https://python-for-android.readthedocs.io/en/latest/quickstart/#installing-android-sdk

Then when building I get:

~/Documents/codings/kivy> p4a apk --private $HOME/Documents/codings/kivy/ --package=org.example.myapp --name "My application" --version 0.1 --requirements=python3,kivy --arch=armeabi-v7a
[WARNING]: $ANDROIDNDKVER is deprecated and no longer necessary, the value you set is ignored
[INFO]:    Will compile for the following archs: armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
Traceback (most recent call last):
  File "/usr/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 141, in wrapper_func
    ctx.prepare_build_environment(user_sdk_dir=self.sdk_dir,
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 358, in prepare_build_environment
    apis = get_available_apis(self.sdk_dir)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 130, in get_available_apis
    targets = get_targets(sdk_dir)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 118, in get_targets
    targets = avdmanager('list', 'target').stdout.decode('utf-8').split('\n')
  File "/usr/lib/python3.10/site-packages/sh.py", line 1566, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/usr/lib/python3.10/site-packages/sh.py", line 822, in __init__
    self.wait()
  File "/usr/lib/python3.10/site-packages/sh.py", line 879, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /opt/android-sdk/tools/bin/avdmanager list target

  STDOUT:


  STDERR:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
	at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
	at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
	at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
	at com.android.sdklib.tool.AvdManagerCli.run(AvdManagerCli.java:213)
	at com.android.sdklib.tool.AvdManagerCli.main(AvdManagerCli.java:200)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	... 5 more

I don't know about you, but to me this sounds very acute, because I don't understand any way around.

@mavavilj
Copy link

I can proceed by editing /usr/lib/python3.10/site-packages/pythonforandroid/build.py lines 116 and 117 to:

    if exists(join(sdk_dir, 'cmdline-tools', 'bin', 'avdmanager')):
        avdmanager = sh.Command(join(sdk_dir, 'cmdline-tools', 'bin', 'avdmanager'))

But now the error becomes:

p4a apk --private $HOME/Documents/codings/kivy/ --package=org.example.myapp --name "My application" --version 0.1 --requirements=python3,kivy --arch=armeabi-v7a
[WARNING]: $ANDROIDNDKVER is deprecated and no longer necessary, the value you set is ignored
[INFO]:    Will compile for the following archs: armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
Traceback (most recent call last):
  File "/usr/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 141, in wrapper_func
    ctx.prepare_build_environment(user_sdk_dir=self.sdk_dir,
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 358, in prepare_build_environment
    apis = get_available_apis(self.sdk_dir)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 130, in get_available_apis
    targets = get_targets(sdk_dir)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 121, in get_targets
    targets = android('list').stdout.decode('utf-8').split('\n')
  File "/usr/lib/python3.10/site-packages/sh.py", line 1566, in __call__
    return RunningCommand(cmd, call_args, stdin, stdout, stderr)
  File "/usr/lib/python3.10/site-packages/sh.py", line 822, in __init__
    self.wait()
  File "/usr/lib/python3.10/site-packages/sh.py", line 879, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_2: 

  RAN: /opt/android-sdk/tools/android list

  STDOUT:
*************************************************************************
The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager
*************************************************************************
Invalid or unsupported command "list"

Supported commands are:
android list target
android list avd
android list device
android create avd
android move avd
android delete avd
android list sdk
android update sdk


  STDERR:

@misl6
Copy link
Member

misl6 commented Apr 10, 2022

As a workaround, until we update python-for-android to support the latest Android command-line-tools version, please rely on the following links:

macOS: https://dl.google.com/android/repository/commandlinetools-mac-6514223_latest.zip
Linux: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

I can also proceed from the previous edit of /usr/lib/python3.10/site-packages/pythonforandroid/build.py lines 116 and 117 to:

    if exists(join(sdk_dir, 'cmdline-tools', 'bin', 'avdmanager')):
        avdmanager = sh.Command(join(sdk_dir, 'cmdline-tools', 'bin', 'avdmanager'))
        targets = avdmanager('list', 'target').stdout.decode('utf-8').split('\n')
    elif exists(join(sdk_dir, 'cmdline-tools/latest/bin', 'sdkmanager')):
        android = sh.Command(join(sdk_dir, 'cmdline-tools/latest/bin', 'sdkmanager'))
        targets = android('--list').stdout.decode('utf-8').split('\n')

Then the error becomes:

p4a apk --private $HOME/Documents/codings/kivy/ --package=org.example.myapp --name "My application" --version 0.1 --requirements=python3,kivy --arch=arm64-v8a
[WARNING]: $ANDROIDNDKVER is deprecated and no longer necessary, the value you set is ignored
[INFO]:    Will compile for the following archs: arm64-v8a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
[INFO]:    Available Android APIs are ()
[ERROR]:   Build failed: Requested API target 27 is not available, install it with the SDK android tool.

@misl6
Copy link
Member

misl6 commented Apr 10, 2022

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

Yes, but by using /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager as given in:

https://stackoverflow.com/questions/65262340/cmdline-tools-could-not-determine-sdk-root/67413427#67413427

my ~/.bashrc:

# Adjust the paths!
export ANDROIDSDK="/opt/android-sdk"
export ANDROIDNDK="$HOME/Developer/android-ndk-r23b"
export ANDROIDAPI="27"  # Target API version of your application
export NDKAPI="21"  # Minimum supported API version of your application
export ANDROIDNDKVER="r23b"  # Version of the NDK you installed

The installation created a new /tools/ for example, but:

/opt/android-sdk/tools/bin/sdkmanager
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
	at com.android.repository.api.SchemaModule$SchemaModuleVersion.<init>(SchemaModule.java:156)
	at com.android.repository.api.SchemaModule.<init>(SchemaModule.java:75)
	at com.android.sdklib.repository.AndroidSdkHandler.<clinit>(AndroidSdkHandler.java:81)
	at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73)
	at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlSchema
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	... 5 more

At line 358 of /usr/lib/python3.10/site-packages/pythonforandroid/build.py we find:

apis = get_available_apis(self.sdk_dir)

The self.sdk_dir prints to /opt/android-sdk, which indeed should be the sdk_root.

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

The reason it doesn't return any available APIs is caused by:

apis = [s for s in targets if re.match(r'^ *API level: ', s)]

at line 131

resulting to apis = [].

Even when the line before it

targets = get_targets(sdk_dir)

has the full output of /opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --list. This list actually does contain:

system-images;android-27;default;arm64-v8a | 1 | ARM 64 v8a System Image

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

I can proceed by commenting out the lines that check for the API (358-367):

        """
        apis = get_available_apis(self.sdk_dir)
        info('Available Android APIs are ({})'.format(
            ', '.join(map(str, apis))))
        if android_api in apis:
            info(('Requested API target {} is available, '
                  'continuing.').format(android_api))
        else:
            raise BuildInterruptingException(
                ('Requested API target {} is not available, install '
                 'it with the SDK android tool.').format(android_api))
        """

Now the error becomes:

p4a apk --private $HOME/Documents/codings/kivy/ --package=org.example.myapp --name "My application" --version 0.1 --requirements=python3,kivy --arch=arm64-v8a
[INFO]:    Will compile for the following archs: arm64-v8a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/myuser/Developer/android-ndk-r23b
[INFO]:    Found NDK version 23b
[WARNING]: Maximum recommended NDK version is 19c, but newer versions may work.
[WARNING]: Newer NDKs may not be fully supported by p4a.
[INFO]:    Found Android API target in $NDKAPI
[INFO]:    ccache is missing, the build will not be optimized in the future.
/usr/bin/python3: No module named cython
[WARNING]: Cython for python3 missing. If you are building for  a python 3 target (which is the default) then THINGS WILL BREAK.
[WARNING]: Could not find any toolchain for aarch64-linux-android!
Traceback (most recent call last):
  File "/usr/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 141, in wrapper_func
    ctx.prepare_build_environment(user_sdk_dir=self.sdk_dir,
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 447, in prepare_build_environment
    self.toolchain_version = select_and_check_toolchain_version(
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 90, in select_and_check_toolchain_version
    toolchain_version=toolchain_version,
UnboundLocalError: local variable 'toolchain_version' referenced before assignment


@mavavilj
Copy link

mavavilj commented Apr 10, 2022

I can proceed by modifying line 430 to use the python3 that I really use:

"python3.10", "-m", "cython", "--help",

Now error becomes:

p4a apk --private $HOME/Documents/codings/kivy/ --package=org.example.myapp --name "My application" --version 0.1 --requirements=python3,kivy --arch=arm64-v8a
[INFO]:    Will compile for the following archs: arm64-v8a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/myuser/Developer/android-ndk-r23b
[INFO]:    Found NDK version 23b
[WARNING]: Maximum recommended NDK version is 19c, but newer versions may work.
[WARNING]: Newer NDKs may not be fully supported by p4a.
[INFO]:    Found Android API target in $NDKAPI
[INFO]:    ccache is missing, the build will not be optimized in the future.
[WARNING]: Could not find any toolchain for aarch64-linux-android!
Traceback (most recent call last):
  File "/usr/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 141, in wrapper_func
    ctx.prepare_build_environment(user_sdk_dir=self.sdk_dir,
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 447, in prepare_build_environment
    self.toolchain_version = select_and_check_toolchain_version(
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 90, in select_and_check_toolchain_version
    toolchain_version=toolchain_version,
UnboundLocalError: local variable 'toolchain_version' referenced before assignment

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

Finally,

changing to android-ndk-r19c, rather than android-ndk-r23b, the build starts and goes on for quite a long time until I hit something which looks like a python3 name mismatch again:

[INFO]:    Building pyjnius for arm64-v8a
[INFO]:    jnius apparently isn't already in site-packages
[INFO]:    Cythonizing anything necessary in pyjnius
[INFO]:    -> directory context /home/myuser/.local/share/python-for-android/build/other_builds/pyjnius-sdl2/arm64-v8a__ndk_target_21/pyjnius
[INFO]:    -> running python3 -c import sys; print(sys.path)
[INFO]:    Trying first build of pyjnius to get cython files: this is expected to fail                                       
[INFO]:    -> running python3 setup.py build_ext -v
           working: subprocess.CalledProcessError: Command '['which', 'javac']' returned non-zero exit status 1.             Exception in thread background thread for pid 10702:
Traceback (most recent call last):
  File "/usr/lib64/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.10/threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.10/site-packages/sh.py", line 1683, in wrap
    fn(*rgs, **kwargs)
  File "/usr/lib/python3.10/site-packages/sh.py", line 2662, in background_thread
    handle_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 2349, in fn
    return self.command.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /home/myuser/.local/share/python-for-android/build/other_builds/hostpython3/desktop/hostpython3/native-build/python3 setup.py build_ext -v

  STDOUT:
which: no javac in (/home/myuser/Developer/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin:/home/myuser/Developer/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin:/home/myuser/Developer/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin:/home/myuser/Developer/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64/bin:/home/myuser/Developer/android-ndk-r19c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86/bin/:/home/myuser/Developer/android-ndk-r19c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/:/home/myuser/Developer/android-ndk-r19c:/opt/android-sdk/tools:/home/myuser/.local/bin:/home/myuser/bin:/usr/local/bin:/usr/bin:/bin:/snap/bin)
Traceback (most recent call last):
  File "setup.py", line 95, in <module>
    compile_native_invocation_handler(*get_possible_homes(PLATFORM))
  File "jnius/env.py", line 172, in get_possible_homes
    get_jdk_home(platform),
  File "jnius/env.py", line 136, in get_jdk_home
    check_output(
  File "/home/myuser/.local/share/python-for-android/build/other_builds/hostpython3/desktop/hostpython3/Lib/subprocess.py", line 415, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/home/myuser/.local/share/python-for-android/build/other_builds/hostpython3/desktop/hostpython3/Lib/subprocess.py", line 516, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['which', 'javac']' returned non-zero exit status 1.


  STDERR:

                                                                                                                             
[INFO]:    pyjnius first build failed (as expected)
[INFO]:    Running cython where appropriate
[INFO]:    Cythonize jnius/jnius.pyx
[INFO]:    -> running python3 -cimport sys; from Cython.Compiler.Main import setuptools_main; sys....(and 42 more)
           working: ModuleNotFoundError: No module named 'Cython'                                                            Exception in thread background thread for pid 10710:
Traceback (most recent call last):
  File "/usr/lib64/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.10/threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.10/site-packages/sh.py", line 1683, in wrap
    fn(*rgs, **kwargs)
  File "/usr/lib/python3.10/site-packages/sh.py", line 2662, in background_thread
    handle_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 2349, in fn
    return self.command.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /usr/bin/python3 '-cimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());' ./jnius/jnius.pyx

  STDOUT:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'Cython'


  STDERR:

Traceback (most recent call last):                                                                                           
  File "/usr/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 151, in wrapper_func
    build_dist_from_args(ctx, dist, args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 210, in build_dist_from_args
    build_recipes(build_order, python_modules, ctx,
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 597, in build_recipes
    recipe.build_arch(arch)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1059, in build_arch
    self.build_cython_components(arch)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1084, in build_cython_components
    self.cythonize_build(env=env)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1132, in cythonize_build
    self.cythonize_file(env, build_dir, join(root, filename))
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1121, in cythonize_file
    shprint(python_command, "-c"
  File "/usr/lib/python3.10/site-packages/pythonforandroid/logger.py", line 167, in shprint
    for line in output:
  File "/usr/lib/python3.10/site-packages/sh.py", line 953, in next
    self.wait()
  File "/usr/lib/python3.10/site-packages/sh.py", line 879, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /usr/bin/python3 '-cimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());' ./jnius/jnius.pyx

  STDOUT:
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'Cython'


  STDERR:

@mavavilj
Copy link

mavavilj commented Apr 10, 2022

Modifying line 1118 of recipe.py to:

python_command = sh.Command("python3.10")

ends up to:

[INFO]:    pyjnius first build failed (as expected)
[INFO]:    Running cython where appropriate
[INFO]:    Cythonize jnius/jnius.pyx
[INFO]:    -> running python3.10 -cimport sys; from ...(and 91 more)
           working: jnius/jnius.pyx:113:3: Compile-time name '...(and 26 more) Exception in thread background thread for pid 15352:
Traceback (most recent call last):
  File "/usr/lib64/python3.10/threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.10/threading.py", line 946, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.10/site-packages/sh.py", line 1683, in wrap
    fn(*rgs, **kwargs)
  File "/usr/lib/python3.10/site-packages/sh.py", line 2662, in background_thread
    handle_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 2349, in fn
    return self.command.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /usr/bin/python3.10 '-cimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());' ./jnius/jnius.pyx

  STDOUT:
/home/myuser/.local/lib/python3.10/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/myuser/.local/share/python-for-android/build/other_builds/pyjnius-sdl2/arm64-v8a__ndk_target_21/pyjnius/jnius/jnius.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)

Error compiling Cython file:
------------------------------------------------------------
...
import sys
import traceback

include "jnius_compat.pxi"
include "jni.pxi"
include "config.pxi"
^
------------------------------------------------------------

jnius/jnius.pyx:100:0: 'config.pxi' not found

Error compiling Cython file:
------------------------------------------------------------
...

include "jnius_compat.pxi"
include "jni.pxi"
include "config.pxi"

IF JNIUS_PLATFORM == "android":
  ^
------------------------------------------------------------

jnius/jnius.pyx:102:3: Compile-time name 'JNIUS_PLATFORM' not defined

Error compiling Cython file:
------------------------------------------------------------
...
include "jni.pxi"
include "config.pxi"

IF JNIUS_PLATFORM == "android":
    include "jnius_jvm_android.pxi"
ELIF JNIUS_PLATFORM == "win32":
    ^
------------------------------------------------------------

jnius/jnius.pyx:104:5: Compile-time name 'JNIUS_PLATFORM' not defined

Error compiling Cython file:
------------------------------------------------------------
...
include "config.pxi"
^
------------------------------------------------------------

jnius/jnius_jvm_dlopen.pxi:1:0: 'config.pxi' not found

Error compiling Cython file:
------------------------------------------------------------
...
    JAVA_HOME = os.getenv('JAVA_HOME') or find_java_home()
    if JAVA_HOME is None or JAVA_HOME == '':
        raise SystemError("JAVA_HOME is not set, and unable to guess JAVA_HOME")
    cdef str JNIUS_LIB_SUFFIX = get_jnius_lib_location(JNIUS_PLATFORM)

    IF JNIUS_PYTHON3:
      ^
------------------------------------------------------------

jnius/jnius_jvm_dlopen.pxi:89:7: Compile-time name 'JNIUS_PYTHON3' not defined

Error compiling Cython file:
------------------------------------------------------------
...

include "jnius_env.pxi"
include "jnius_utils.pxi"
include "jnius_conversion.pxi"
include "jnius_localref.pxi"
IF JNIUS_PYTHON3:
  ^
------------------------------------------------------------

jnius/jnius.pyx:113:3: Compile-time name 'JNIUS_PYTHON3' not defined



  STDERR:

Traceback (most recent call last):                                             
  File "/usr/bin/p4a", line 8, in <module>
    sys.exit(main())
  File "/usr/lib/python3.10/site-packages/pythonforandroid/entrypoints.py", line 18, in main
    ToolchainCL()
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 728, in __init__
    getattr(self, command)(args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 151, in wrapper_func
    build_dist_from_args(ctx, dist, args)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/toolchain.py", line 210, in build_dist_from_args
    build_recipes(build_order, python_modules, ctx,
  File "/usr/lib/python3.10/site-packages/pythonforandroid/build.py", line 597, in build_recipes
    recipe.build_arch(arch)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1059, in build_arch
    self.build_cython_components(arch)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1084, in build_cython_components
    self.cythonize_build(env=env)
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1130, in cythonize_build
    self.cythonize_file(env, build_dir, join(root, filename))
  File "/usr/lib/python3.10/site-packages/pythonforandroid/recipe.py", line 1119, in cythonize_file
    shprint(python_command, "-c"
  File "/usr/lib/python3.10/site-packages/pythonforandroid/logger.py", line 167, in shprint
    for line in output:
  File "/usr/lib/python3.10/site-packages/sh.py", line 953, in next
    self.wait()
  File "/usr/lib/python3.10/site-packages/sh.py", line 879, in wait
    self.handle_command_exit_code(exit_code)
  File "/usr/lib/python3.10/site-packages/sh.py", line 905, in handle_command_exit_code
    raise exc
sh.ErrorReturnCode_1: 

  RAN: /usr/bin/python3.10 '-cimport sys; from Cython.Compiler.Main import setuptools_main; sys.exit(setuptools_main());' ./jnius/jnius.pyx

  STDOUT:
/home/myuser/.local/lib/python3.10/site-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /home/myuser/.local/share/python-for-android/build/other_builds/pyjnius-sdl2/arm64-v8a__ndk_target_21/pyjnius/jnius/jnius.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)

Error compiling Cython file:
------------------------------------------------------------
...
import sys
import traceback

include "jnius_compat.pxi"
include "jni.pxi"
include "config.pxi"
^
------------------------------------------------------------

jnius/jnius.pyx:100:0: 'config.pxi' not found

Error compiling Cython file:
------------------------------------------------------------
...

include "jnius_compat.pxi"
include "jni.pxi"
include "config.pxi"

IF JNIUS_PLATFORM == "android":
  ^
------------------------------------------------------------

jnius/jnius.pyx:102:3: Compile-time name 'JNIUS_PLATFORM' not defined

Error compiling Cython file:
------------------------------------------------------------
...
include "jni.pxi"
include "config.pxi"

IF JNIUS_PLATFORM == "android":
    include "jnius_jvm_android.pxi"
ELIF JNIUS_PLATFORM == "win32":
    ^
------------------------------------------------------------

jnius/jnius.pyx:104:5: Compile-time name 'JNIUS_PLATFORM' not defined

Error compiling Cython file:
------------------------------------------------------------
...
include "config.pxi"
^
------------------------------------------------------------

jnius/jnius_jvm_dlopen.pxi:1:0: 'config.pxi' not found

Error compiling Cython file:
------------------------------------------------------------
...
    JAVA_HOME = os.getenv('JAVA_HOME') or find_java_home()
    if JAVA_HOME is None or JAVA_HOME == '':
        raise SystemError("JAVA_HOME is not set, and unable to guess JAVA_HOME")
    cdef str JNIUS_LIB_SUFFIX = get_jnius_lib_location(JNIUS_PLATFORM)

    IF JNIUS_PYTHON3:
      ^
------------------------------------------------------------

jnius/jnius_jvm_dlopen.pxi:89:7: Compile-time name 'JNIUS_PYTHON3' not defined

Error compiling Cython file:
------------------------------------------------------------
...

include "jnius_env.pxi"
include "jnius_utils.pxi"
include "jnius_conversion.pxi"
include "jnius_localref.pxi"
IF JNIUS_PYTHON3:
  ^
------------------------------------------------------------

jnius/jnius.pyx:113:3: Compile-time name 'JNIUS_PYTHON3' not defined



  STDERR:

Which may suggest that altering "python3" is not robust.

Also:

kivy/buildozer#1422

@dbnicholson
Copy link
Contributor

In #2593 I changed p4a to prefer the newer avdmanager in cmdline-tools/latest/bin. I don't know if that fixes buildozer, though.

SomberNight added a commit to SomberNight/python-for-android that referenced this issue Oct 6, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [0][1],
use a different path structure.
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
SomberNight added a commit to SomberNight/buildozer that referenced this issue Oct 6, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy/python-for-android#2540
kivy/python-for-android#2593
SomberNight added a commit to SomberNight/python-for-android that referenced this issue Oct 6, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
SomberNight added a commit to SomberNight/python-for-android that referenced this issue Oct 6, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
SomberNight added a commit to SomberNight/python-for-android that referenced this issue Oct 10, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
SomberNight added a commit to SomberNight/buildozer that referenced this issue Oct 10, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy/python-for-android#2540
kivy/python-for-android#2593
SomberNight added a commit to SomberNight/python-for-android that referenced this issue Oct 14, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
accumulator pushed a commit to accumulator/python-for-android that referenced this issue Oct 18, 2022
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
accumulator pushed a commit to accumulator/python-for-android that referenced this issue Jan 5, 2023
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
accumulator pushed a commit to accumulator/python-for-android that referenced this issue Jan 5, 2023
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
accumulator pushed a commit to accumulator/python-for-android that referenced this issue Jan 6, 2023
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
@lufebe16
Copy link

lufebe16 commented Mar 4, 2023

Just coming back of a fdroidata merge. And agiain trapped into the
avdmanager ClassNonFoundException. f-droid too seems to
have its own problems with the new command line tools. But why does p4a use
that call? Time to dig into the code.

The only call to avdmanager is in build.py/get_targets() as
'avdmanager list targts'. It delivers a list of parameters for
each targent.

get_targets() is called only from get_available_apis(). The only
relevant information extracted in there are the api numbers. Isn't it not
an overkill?

Targets api information in android-sdk resides in the subdir 'platforms'
So why not simply do:

def get_available_apis(sdk_dir): apis = [] path = join(sdk_dir, 'platforms') if exists(path): targets = os.listdir(path) apis = [s for s in targets if re.match(r'^ *android-', s)] apis = [re.findall(r'[0-9]+', s) for s in apis] apis = [int(s[0]) for s in apis if s] else: raise BuildInterruptingException( 'Could not find platfrom information in Android SDK', instructions='Make sure the path to the Android SDK is correct') return apis

This would deliver the same information and eliminate a critical dependency.

@lufebe16
Copy link

lufebe16 commented Mar 4, 2023

Addendum (correctly formatted now):

def get_available_apis(sdk_dir):
   apis = []
   path = join(sdk_dir, 'platforms')
   if exists(path):
       targets = os.listdir(path)
       apis = [s for s in targets if re.match(r'^ *android-', s)]
       apis = [re.findall(r'[0-9]+', s) for s in apis]
       apis = [int(s[0]) for s in apis if s]
   else:
       raise BuildInterruptingException(
           'Could not find platfrom information in Android SDK',
           instructions='Make sure the path to the Android SDK is correct')
   return apis

accumulator pushed a commit to accumulator/python-for-android that referenced this issue Jun 30, 2023
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy#2540
kivy#2593
accumulator pushed a commit to accumulator/buildozer that referenced this issue Oct 6, 2023
Recent Android SDK tools, including e.g. "8092744" and "8512546" [1][2],
use a different path structure than e.g. "6514223" [0].
E.g. `sdkmanager` in older sdk tools used to be located at
  ${ANDROID_SDK_HOME}/tools/bin/sdkmanager
but now it is at
  ${ANDROID_SDK_HOME}/cmdline-tools/bin/sdkmanager

[0]: https://dl.google.com/android/repository/commandlinetools-linux-6514223_latest.zip
[1]: https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip
[2]: https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip

Related:
kivy/python-for-android#2540
kivy/python-for-android#2593
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Priority: Medium This issue may be useful, and needs some attention.
Projects
None yet
Development

No branches or pull requests

5 participants