kivy / kivy/python-for-android

Recipe request: h3 for Android / timezonefinder 8.x fails with x86_64 h3 .so in arm64-v8a APK

Đang mở
#3,348 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
8.9k
Fork
2k
Merge trung bình
12 giờ 20 phút
Pull request đã merge (30 ngày)
9

Mô tả

I have been told to be free to request a working python-for-android recipe for `h3`.

The practical issue is that current `timezonefinder` versions depend on `h3`. With Buildozer / python-for-android, the APK builds, but the application crashes at runtime on an Android arm64 device because the packaged `h3` native extension is for x86_64 instead of ARM64.

For now I have to pin:

```ini
timezonefinder==4.4.1
```

because newer `timezonefinder` versions pull in `h3`. I am not sure how long this is viable.

## Runtime error

On Android, importing `timezonefinder` imports `h3`, and this fails:

```text
ImportError: dlopen failed: "/data/data/xx.xx.xx/files/app/_python_bundle/site-packages/h3/_cy/cells.so" is for EM_X86_64 (62) instead of EM_AARCH64 (183)
```

Relevant traceback:

```text
File ".../timezonefinder/__init__.py", line 1, in
File ".../timezonefinder/timezonefinder.py", line 22, in
File ".../h3/__init__.py", line 3, in
File ".../h3/api/__init__.py", line 3, in
File ".../h3/api/basic_int/__init__.py", line 5, in
File ".../h3/_cy/__init__.py", line 16, in
ImportError: dlopen failed: ".../h3/_cy/cells.so" is for EM_X86_64 (62) instead of EM_AARCH64 (183)
```

## Environment

```text
OS: Linux Mint / Ubuntu 24.04 base
Python: 3.12.3 virtualenv
Buildozer: 1.6.1.dev0 from git
python-for-android branch: develop
python-for-android commit: 70f92243
Android API: 36
Android min API: 24
Android NDK: r28c
Target architecture: arm64-v8a / armeabi-v7a
Device: arm64 Android device
```

## Relevant requirements

In the real project this happens with:

```ini
requirements = python3,kivy==2.3.1,android,jpeg,pillow,olefile,pytz,skyfield,numpy,jplephem,sgp4,h3,timezonefinder
```

A reduced version could look like this:

```ini
requirements = python3,kivy==2.3.1,android,numpy,h3,timezonefinder
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Start with the h3/_cy/__init__.py import path and the reduced requirements containing h3 and timezonefinder, then build for the listed arm64-v8a target. Done means importing timezonefinder succeeds on an arm64 Android device without the EM_X86_64 versus EM_AARCH64 error.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
android, python
Lĩnh vực
build-system, mobile
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
45/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.