Kivy 应用程序的 buildozer 中的 NDK 版本冲突

问题描述 投票:0回答:1

我正在尝试构建一个 kivy 应用程序,它在 buildozer.spec 中有这些要求:

requirements = python3,kivy,pillow,plyer,scipy,numpy

所有 Android(SDK/NDK、API)设置均为默认(已注释)

一次不指定 NDK 的运行给出:

[INFO]:    <- directory context /home/joachim/PycharmProjects/CardReader/.buildozer/android/platform/python-for-android
[WARNING]: install_libs called with no libraries to install!
[INFO]:    Building lapack for arm64-v8a
[INFO]:    -> directory context /home/joachim/PycharmProjects/CardReader/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/other_builds/lapack/arm64-v8a__ndk_target_21/lapack/build
[ERROR]:   Build failed: Please set the environment variable 'LEGACY_NDK' to point to a NDK location with gcc/gfortran support (supported NDK version: 'r21e')

当我清理然后将 NDK 设置为 21e 并再次运行时,我收到另一个错误:

[INFO]:    Will compile for the following archs: arm64-v8a, armeabi-v7a
[INFO]:    Found Android API target in $ANDROIDAPI: 27
[INFO]:    Available Android APIs are (27)
[INFO]:    Requested API target 27 is available, continuing.
[INFO]:    Found NDK dir in $ANDROIDNDK: /home/joachim/.buildozer/android/platform/android-ndk-r21e
[INFO]:    Found NDK version 21e
[ERROR]:   Build failed: The minimum supported NDK version is 23. You can download it from https://developer.android.com/ndk/downloads/.
[INFO]:    Instructions: Please, go to the android NDK page (https://developer.android.com/ndk/downloads/) and download a supported version.
*** The currently recommended NDK version is 23b ***

如何解决这种不匹配问题? 寻找具有 gcc/gfortran 支持的 NDK。 或者,LEGACY_NDK 需要设置什么?

android-ndk kivy buildozer python-for-android
1个回答
2
投票

所以我刚刚遇到了这个问题并找到了解决方案。
问题是,要为 android 构建 scipy python 需要一个使用 fortran 支持构建的 android ndk。这些似乎仅受 NDK 版本 21 及更低版本支持,并且 NDK 需要专门构建 fortran 支持。幸运的是,有人为此目的托管了预构建版本。 https://github.com/mzakharo/android-gfortran/releases(仅限 Linux,如果您从 Windows 构建 APK,则需要构建自己的 NDK 工具链,如该项目的自述文件中所述)

那么你必须执行以下操作:

首先您需要通过 buildozer 下载旧版 NDK 对于

buildozer.spec
中的此修改:

#android.ndk = 23b --> android.ndk = 21e

然后执行

buildozer android debug

当失败时(这没关系,因为我们只运行 buildozer 来下载 r21 NDK):

tar -jxvf gcc-arm-linux-x86_64.tar.bz2
mv arm-linux-androideabi-4.9 ~/.buildozer/android/platform/android-ndk-r21e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

注意:将

~/.buildozer
更改为buildozer存储ndks的路径

然后将更改恢复为

buildozer.spec

android.ndk = 21e --> #android.ndk = 23b

现在您可以使用

进行构建和部署
export LEGACY_NDK=~/.buildozer/android/platform/android-ndk-r21e
buildozer android debug deploy run

注意:按上述方式更改

~/.buildozer

© www.soinside.com 2019 - 2024. All rights reserved.