Qt bootstrap assumes every native Qt library has a corresponding PySide wrapper
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 65/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- android, python
- Lĩnh vực
- build-system, mobile
Hướng nghiên cứu
Start with the Qt bootstrap template at pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml, which emits both Qt6<Module>``_<arch> native entries and Qt<Module>.abi3.so wrapper entries from the same qt_libs list, and then check how build.py in pythonforandroid/bootstraps/common/build/ passes that list. Done means the generated load_local_libs contains only wrapper libraries that exist in the PySide wheel, such as no QtQmlModels.abi3.so, with a separate pyside-libs option falling back to qt_libs. Confirm this by rendering the template and checking the output, since the reporter says the change works on an arm64 emulator.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Title: Qt bootstrap assumes every native Qt library has a corresponding PySide wrapper
Description:
I found an issue in the python-for-android Qt bootstrap when it is used by PySide6.
Environment:
- PySide6: 6.12
- Python: 3.14
- Android ABI: arm64-v8a
- Android emulator: Android 16
- Android NDK: r28c
- Qt Quick / Qt Quick Controls
The PySide Android deployment correctly needs to pass native Qt dependencies such as:
Core
Gui
Network
Qml
OpenGL
QmlModels
QmlWorkerScript
QmlMeta
Quick
QuickTemplates2
QuickControls2
The problem is in:
pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml
The current template iterates over qt_libs and generates both:
Qt6<Module>_<arch>
for native Qt libraries, and:
Qt<Module>.abi3.so
for PySide wrapper libraries.
These two sets are not equivalent.
Some native Qt dependencies do not have a corresponding PySide wrapper library.
For example:
QmlModels
QmlWorkerScript
QmlMeta
QuickTemplates2
are valid native Qt dependencies, but the corresponding wrapper libraries do not exist in the PySide wheel:
QtQmlModels.abi3.so
QtQmlWorkerScript.abi3.so
QtQmlMeta.abi3.so
QtQuickTemplates2.abi3.so
As a result, the generated load_local_libs array can contain non-existent libraries.
The runtime then fails with an error like:
dlopen failed: library ".../QtQmlModels.abi3.so" not found
java.lang.UnsatisfiedLinkError
Loading Qt native libraries failed
Root cause:
qt_libs is currently used for two different purposes:
- native Qt libraries;
- PySide wrapper libraries.
This assumption is not always valid.
Suggested solution:
Introduce a separate list/argument for PySide wrapper modules, for example:
--pyside-libs
Then:
qt_libs
should be used only for native Qt libraries, while:
pyside_libs
should be used only to generate:
Qt<Module>.abi3.so
entries in load_local_libs.
For backward compatibility, if --pyside-libs is not provided, it could fall back to qt_libs.
Conceptually:
pyside_libs = (
args.pyside_libs.split(",")
if args.pyside_libs
else qt_libs
)
and in libs.tmpl.xml:
{%- for pyside_lib in pyside_libs %}
<item>{{ arch }};Qt{{ pyside_lib }}.abi3.so</item>
{% if pyside_lib == "Qml" -%}
<item>{{ arch }};libpyside6qml.abi3.so</item>
{% endif %}
{%- endfor -%}
I implemented this locally and tested it successfully.
After separating native Qt libraries from PySide wrapper libraries:
- the application starts correctly;
- Qt Quick Controls work;
- no non-existent
Qt*.abi3.solibraries are loaded; - no
UnsatisfiedLinkErroroccurs; - QML to Python interaction works correctly.
The relevant files are:
pythonforandroid/bootstraps/common/build/build.py
pythonforandroid/bootstraps/qt/build/templates/libs.tmpl.xml
This issue is related to PySide Android deployment, because PySide may need to pass native Qt-only dependencies which do not have Python wrapper libraries.
I have a working local implementation and can provide the diff if useful.
- Ngôn ngữ chính
- Python
- Star
- 8.9k
- Fork
- 2.1k
- Merge trung bình
- 3 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 7
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của kivy/python-for-android
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
kivy/python-for-android#3405 · 1 reaction ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
kivy/python-for-android#3335 · 1 bình luận · 3 reaction ·
-
Documentation easy
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
kivy/python-for-android#3326 · 1 bình luận ·
-
Documentation easy Priority: Low
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
kivy/python-for-android#3299 ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 57/100
kivy/python-for-android#3409 ·
Tất cả issue của kivy/python-for-android
Issue tương tự
-
Document style: tablesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
-
Successor registrant to review: Navient Holdings, Inc. (CIK 2152623), 8-K12B 0001193125-26-436899Đang mởsuccessor-review
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
dgunning/edgartools#1889 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`destroy` sans terminal répond « Aborted. » au lieu de réclamer `--yes` comme `clean` et `reset`Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
stephrobert/dsoxlab#354 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
hardware help wanted testing
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
mediajunkie/piper-morgan-product#2335 · 1 bình luận ·